Сумма должна быть всегда одна и та же. Это просто проверка правильности работы программы. На всякий случай. Если не выводить результат работы S на экран и никак его не использовать, компилятор может немного оптимизировать нашу программу. За ним нужен глаз да глаз.
Рис.5.28. Параллельное суммирование
Задание.Составьте программу (рис. 5.28).
Программа готова.
Незабываем выбрать конфигурацию Release и включить поддержку OpenMP.
Скомпилируем её:
Build — Build Solution.
Исполняемый файл готов.
Создаём пакетный файл для многократного запуска с разным числом потоков (рис. 5.29).
Мы уже познакомились с использованием цикла в пакетных файлах.
Отключаем вывод команд на экран.
Выводим заголовок таблицы.
Далее вызываем по пять прогонов с числом потоков от одного до двенадцати.
Это решение задачи «в лоб».
Немного громоздко, но работоспособно.
Рис. 5.29. Пакетный файл
Задание.Составьте пакетный файл (рис. 5.29).
На самом деле, мы можем организовать вложенные циклы. Ведь пакетный файл — это язык программирования. Почти как настоящий.
В результате у нас осталось всего три строчки в нашем пакетном файле (рис. 5.30). Такой файл легко отлаживать. Меньше шансов ошибиться.
Рис. 5.30. Вложенные циклы
Задание.Составьте пакетный файл (рис. 5.30).
Переходим в командную строку.
Меняем текущий диск и каталог.
Запускаем наш пакетный файл и перенаправляем вывод в файл:
19> 19.txt.
Мы называем пакетный и текстовый файл одинаково —просто чтобы немного запутать читателя.
Загружаем полученный текстовый файл в Excel.
Обрабатываем данные с помощью сводной таблицы.
Строим график изменения времени выполнения от числа потоков (рис. 5.31).
Как ни странно, скорость работы почти не меняется, начиная с четырёх потоков.
Рис.5.31.
Задание.Загрузите данные в Excel и постройте график (рис. 5.31).
Теперь наконец-то мы сможем найти показатели ускорения и эффективности.
У нас есть число потоков и время выполнения.
Будем считать, что число потоков равно числу логических процессоров. Мы притворимся, что запускали программу с рпотоков на рпроцессорах.
Для дальнейших расчётов мы выделим сводную таблицу и скопируем её в буфер обмена. Затем мы вставим её на свободном месте листа — но только как значения:
Paste Options — Values.
Добавим столбцы показателей S pи E p(рис. 5.32).
Мы сравниваем длительность работы параллельной программы с последовательной. Поэтому в формулах для расчёта ускорения мы фиксируем адрес первой ячейки E18, нажав клавишу F4. За счёт этого мы можем копировать нашу формулу в остальные ячейки столбца.
Строим графики ускорения и эффективности в зависимости от числа потоков (и ядер).
Рассмотрим график. Картина довольно неожиданная. Получается, что ускорение нашей программы не достигает 8 раз на восьми ядрах. Мы не достигли даже ускорения в четыре раза.
В нашей пробной программе мы работали с целыми числами. Складывали единички. Зато мы полностью отработали схему эксперимента и обработки данных. Это пригодится нам в следующем разделе.
Рис. 5.32. Ускорение и эффективность
Задание.Постройте таблицу и графики (рис. 5.32). Сделайте выводы об ускорении программы.
Мы рассмотрели работу параллельной программы, которой потоки выполняются на любых ядрах. К тому же, операционная система норовит перебрасывать потоки с одного ядра на другое.
Интересно, что будет, если привязать каждый поток к своему ядру? Станет ли от этого программа работать быстрее?
Задание. Добавьте в программу параллельного суммирования привязку потоков к ядрам. Повторите исследование и выясните, как влияет привязка к ядрам на ускорение расчётов.
6. Численное интегрирование
Мы рассмотрели основы распараллеливания. Можем переходить к решению более реалистичной задачи.
Посмотрим, как покажет себя компьютер на задаче численного интегрирования. Там придётся работать с вещественными числами. А ведь операции с плавающей точкой выполняются гораздо дольше.
В данной работе мы продолжаем рассматривать задачу численного интегрирования методом прямоугольников.
Формула приводится на рис. 6.1.
Рис. 6.1. Определённый интеграл
Мы используем те же самые варианты заданий, что и предыдущей работе (рис. 6.2).
Рис. 6.2. Варианты заданий
Читать дальше
Конец ознакомительного отрывка
Купить книгу