Организация параллельных потоков. Часть 1 | страница 7
Для полной автоматизации работы мы просто перенаправим вывод текста и значений вместо экрана в файл. Для перенаправления стандартного вывода используется символ>. Пример перенаправления вывода в файл:
batch.bat> file. txt.
Кроме того, в начале файла нам нужно отключить вывод на экран каждой команды:
@echo off.
Далее идёт строка заголовков столбцов — тоже через запятую (рис. 4.3).
Рис. 4.3. Содержимое пакетного файла
После прогона и получения текстового файла мы можем загрузить его в пакет Excel. Мы вызываем пункт меню
File — Open.
Затем указываем, что формат файла — текстовый:
Text Files (*.prn, *.txt, *.csv).
Далее с помощью Мастера импорта настраиваем загрузку текстового файла с разделителями и заголовками. Указываем, что десятичный разделитель — точка.
Получаем готовую таблицу с результатами прогонов. И эти результаты уже можно обработать с помощью того же пакета Excel.
Задание. Настройте вывод программы в одну строку через запятую. Создайте пакетный файл по образцу рис. 5. Перенаправьте вывод в текстовый файл. Загрузите файл в Excel.
Задание. Проведите исследование эффективности распараллеливания, задавая разные значения для следующих параметров:
— количество единиц для суммирования;
— количество параллельных потоков;
— количество использованных виртуальных процессоров.
Представьте результаты исследования в виде таблиц и графиков.
5. Параллельные вычисления
5.1. Создание потока
По умолчанию в любом процессе есть один главный поток. Дополнительные потоки программист создаёт «вручную».
Чтобы создать новый поток, используем функцию
CreateThread.
Это готовый, системный, библиотечный вызов операционной системы. Мы используем параметры по умолчанию. Нам понадобится указать только имя подпрограммы, которая будет выполняться в новом потоке (рис. 5.1). В нашем примере это Thread2.
Рис. 5.1. Создание потока
Задание. Создайте и запустите программу по созданию второго потока. Запустите Диспетчер задач и убедитесь, что в ней присутствует два потока.
Задание. Закомментируйте строку с бесконечным циклом while(1) и запустите программу на выполнение. Запустите Диспетчерзадач и обратите внимание на количество потоков.
5.2. Привязка процесса к ядрам
На многоядерном процессоре можно назначить определённые ядра (виртуальные процессоры) для выполнения выбранного процесса. Для этого в Диспетчере задач нужно выбрать нужный процесс, вызвать контекстное меню правой кнопкой мыши и выбрать пункт Задать соответствие