Организация параллельных потоков. Часть 2 | страница 27
Строим графики ускорения и эффективности в зависимости от числа потоков (и ядер).
Рассмотрим график. Картина довольно неожиданная. Получается, что ускорение нашей программы не достигает 8 раз на восьми ядрах. Мы не достигли даже ускорения в четыре раза.
В нашей пробной программе мы работали с целыми числами. Складывали единички. Зато мы полностью отработали схему эксперимента и обработки данных. Это пригодится нам в следующем разделе.
Рис. 5.32. Ускорение и эффективность
Задание. Постройте таблицу и графики (рис. 5.32). Сделайте выводы об ускорении программы.
Мы рассмотрели работу параллельной программы, которой потоки выполняются на любых ядрах. К тому же, операционная система норовит перебрасывать потоки с одного ядра на другое.
Интересно, что будет, если привязать каждый поток к своему ядру? Станет ли от этого программа работать быстрее?
Задание. Добавьте в программу параллельного суммирования привязку потоков к ядрам. Повторите исследование и выясните, как влияет привязка к ядрам на ускорение расчётов.
6. Численное интегрирование
Мы рассмотрели основы распараллеливания. Можем переходить к решению более реалистичной задачи.
Посмотрим, как покажет себя компьютер на задаче численного интегрирования. Там придётся работать с вещественными числами. А ведь операции с плавающей точкой выполняются гораздо дольше.
6.1. Варианты заданий
В данной работе мы продолжаем рассматривать задачу численного интегрирования методом прямоугольников.
Формула приводится на рис. 6.1.
Рис. 6.1. Определённый интеграл
Мы используем те же самые варианты заданий, что и предыдущей работе (рис. 6.2).
Рис. 6.2. Варианты заданий
Номер варианта — последняя цифра номера зачётки. Для цифры ноль берём десятый вариант
Нам предстоит выбрать приемлемую продолжительность расчетов и определить ускорение и эффективность для различного числа потоков. Как и в предыдущих разделах, мы будем использовать в расчётах среднее время вычислений по нескольким запускам программы.
Задание. Опишите в отчёте свой вариант задания.
6.2. Аналитическое решение
Мы будем определять значение определенного интеграла с помощью аналитических и численных методов.
В предыдущей работе [1] мы разработали и отладили программу. Теперь можно сосредоточиться на исследовании эффективности распараллеливания и не углубляться в тонкости программирования как такового.