Организация параллельных потоков. Часть 2 | страница 25
Sum of lg Tomp.
Рис. 5.23. Выбор полей
Настроим вычисление средних значений:
Щелкаем по полю Sum of Tomp в области значений Values и выбираем в выпадающем меню Value Field Settings (рис. 5.24).
Рис. 5.24. Настройка значений
В диалоговом окне Value Field Settings выбираем вычисление среднего значения:
Summarize value field by — Average.
Настраиваем вычисления среднего для обоих отсчётов времени.
Убеждаемся, что в сводной таблице появились средние вместо сумм (рис. 5.25).
Рис. 5.25. Вычисление среднего
Задание. Настройте сводную таблицу, как описано выше.
Мы определили среднее время выполнения программы.
Сравним измерения времени, полученные двумя разными библиотечными функциями — Windows и OpenMP.
Найдём разность (Twin — Tomp) и выразим её в процентах от Tomp (рис. 5.26).
Поскольку мы ссылаемся на ячейки сводной таблицы, в формуле появляется вызов специальной функции
GETPIVOTDATA
При этом мы не можем копировать формулы. Нам придётся ввести формулы во все ячейки вручную.
Рис. 5.26. Оценка погрешности
Построим график в логарифмическом масштабе (рис. 5.27).
По оси «иксов» — логарифм числа итераций.
По оси «игреков» — логарифм времени выполнения.
Настраиваем масштаб по осям так, чтобы всё поле графика было занято нами данными.
Устанавливаем цвет маркеров и линий.
Можно видеть, что начиная с 10>8 начинается практически прямая линия.
Так что в дальнейших опытах можно ограничиться меньшим количеством вычислений.
Рис. 5.27. Логарифмический масштаб
Задание. Сравните оценки времени выполнения, полученные разными способами.
5.5.3. Организация экспериментов
Нам предстоит провести несколько экспериментов. В этом разделе и в следующих разделах. И в следующих работах тоже. Мы много раз запустим одну и ту же программу. С разными настройками. На разном количестве ядер. Затем мы обработаем результаты и сделаем свои выводы.
Сейчас нас интересует ускорение параллельной программы.
Немного упростим предыдущий вариант параллельного суммирования. Пусть всё делается автоматически.
Текст программы приводится на рис.5.28.
В командной строке вводим количество параллельных потоков (строка 5).
Преобразуем введённую строку в целое число (строка 10).
Задаём число потоков в параметрах директивы parallel (строка 12).
Мы выбрали постоянное количество итераций в цикле. Пусть это будет совсем небольшое число. Всего несколько миллиардов (строка 13).
Определяем продолжительность расчётов (строки 11 и 15). Для используем библиотечную функцию