Валентин Арьков - Организация параллельных потоков. Часть 2
- Название:Организация параллельных потоков. Часть 2
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:2020
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Арьков - Организация параллельных потоков. Часть 2 краткое содержание
Параллельные программы нужны для того, чтобы использовать вычислительные мощности многоядерных процессоров и графических ускорителей. В данной работе мы рассмотрим технологию автоматической организации параллельных потоков для многоядерных вычислительных машин.
Организация параллельных потоков. Часть 2 - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Составим последовательную программу (рис. 6.3). Здесь мы используем приёмы, успешно отработанные в предыдущих разделах.
Вводим число итераций через параметр командной строки (строка 5).
Объявляем переменные одинарной точности типа float(строка 9).
Преобразуем вводимую строку символов в длинное целое (строка 10).
Время вычислений определим через библиотечную функцию OpenMP (строки 11 и 18).
Вычисляем шаг по оси «иксов» (строка 12).
На каждом шаге вычислений находим текущее значение аргумента функции (строка 14).
Прибавляем новое значение функции в середине очередного интервала по «икс» (строка 15).
После завершения цикла умножаем сумму значений функции на длину интервала, то есть на основание прямоугольника (строка 17).
В конце программы выводим на экран значения числа итераций, полученную оценку интеграла и время вычислений (строка 19). Значения разделяем символом табуляции. Так будет легче загрузить результаты в Excel.
Рис. 6.3. Последовательная программа
Задание.Составьте программу (рис. 6.3) для своего варианта задания. Проверьте работу программы в командной строке, задавая разное количество итераций.
Запустим программу через пакетный файл (рис. 6.4).
Мы используем почти логарифмическое приращение числа итераций. Это позволит нам подробно рассмотреть начало графика и быстрой пройтись по большим значениям.
На досуге можно попробовать сделать пакетный файл более компактным. При этом придётся учесть такие условия:
— количество итераций — целое число;
— шаг приращения счётчика цикла — постоянный;
— шаг приращения числа итераций растёт логарифмически.
Конечно, это будет задачей повышенной сложности.
Нам сейчас пока что нужно просто посмотреть на поведение программы. Мы обойдёмся таким грубым решением, как шесть строчек, прописанных вручную.
Рис. 6.4. Пакетный файл
Задание.Составьте пакетный файл (рис. 6.4) и запустите его в командной строке.
Запустим пакетный файл и перенаправим вывод в файл.
Загрузим файл в пакет Excel и проведём анализ полученных результатов.
Начнём с оценки интеграла.
Построим график в логарифмическом масштабе. Находим десятичный логарифм числа итераций.
Рассмотрим полученный график (рис. 6.5).
Значение быстро растёт от 1 до 10 прямоугольников.
Затем значение стабилизируется.
Затем значение начинает падать после миллиона прямоугольников (то есть 10 в шестой степени). Это соответствует нашим прогнозам погрешности.
Рис. 6.5. Значение интеграла
Задание. Запустите пакетный файл, загрузите данные в Excel и постройте график (рис. 6.5)
Продолжим наш анализ результатов многократных прогонов.
Построим график продолжительности вычислений в зависимости от числа итераций (прямоугольников). Зависимость практически линейная (рис. 6.6).
Рис. 6.6. Время вычислений
Задание.Постройте график (рис. 6.6) и опишите его в отчёте.
Теперь рассмотрим погрешность вычислений.
Сравним полученные оценки с аналитическим решением (рис. 6.7).
Построим график погрешности в зависимости от логарифма числа итераций (прямоугольников).
Можно видеть, что погрешность быстро падает практически до нуля при ста прямоугольниках и начинает возрастать после миллиона.
Рис. 6.7. Погрешность расчётов
Задание. Постройте график погрешности (рис. 6.7) и опишите его в отчёте.
Если внимательно рассмотреть таблицу значений погрешности, можно обнаружить ещё кое-что.
Особенно хорошо видна закономерность в логарифмическом масштабе. На таких графиках экспонента превращается в прямую линию.
Задание. Постройте график логарифма ошибки от логарифма числа итераций и найдите число итераций, начиная с которого начинает возрастать погрешность.
6.3.2. Двойная точность
Повторим исследование погрешности вычислений.
Определим наши переменные как вещественные с двойной точностью double.
Повторим наше исследование и построим такие графики, как и в предыдущем разделе (рис. 6.8).
Нас будет интересовать поведение погрешности вычислений и подбор наилучших параметров интегрирования.
А ещё неплохо было бы сравнить результаты с предыдущим разделом. Повлияет ли разная точность представления переменных на качество оценок?
Рис. 6.8. Анализ результатов
Задание.Проведите анализ эффективности, постройте графики и сделайте выводы.
6.4. Параллельные потоки
Составим параллельную программу (рис. 6.9).
Объявляем переменные одинарной точности (строка 10).
Вводим в командной строке число потоков ри число прямоугольников N(строки 11 и 12).
Выводим число потоков р, число прямоугольников N, оценку интеграла Sи время вычислений T(строка 22).
Компилируем программу, не забывая про поддержку OpenMP. Проверяем работоспособность в командной строке.
Рис. 6.9. Параллельная программа
Задание. Составьте параллельную программу (рис. 6.9) и проверьте её работоспособность.
Подбираем максимальное число прямоугольников так, чтобы выполнение программы занимало приемлемое время.
Составляем пакетный файл (рис. 6.10).
Здесь мы организуем три вложенных цикла:
— пять повторений для последующего усреднения;
— восемь значений числа потоков;
— число прямоугольников увеличиваем меняем логарифмически.
Рис. 6.10. Пакетный файл
Задание.Составьте пакетный файл (рис. 6.10).
Запускаем пакетный файл и направляем вывод в файл.
Загружаем полученный текстовый файл в Excel.
Вставляем сводную таблицу (рис. 6.11):
— по строкам — число прямоугольников;
— по столбцам — число потоков.
Рис. 6.11. Сводная таблица
Задание.Запустите пакетный файл, загрузите результаты в Excel и постройте сводную таблицу (рис. 6.11).
Мы можем располагать данные в сводной таблице так. Как нам удобно. При этом все значения быстро пересчитываются автоматически.
Построим график, на котором можно будет увидеть, как меняется время вычислений Тс увеличением числа прямоугольников N. Здесь же мы хотим отразить «расслоение» наших характеристик в зависимости от числа параллельных потоков (рис. 6.12). Включим легенду, чтобы видеть, какая ветка чему соответствует.
Можно видеть, что время работы программы для четырёх и восьми потоков практически не отличаются.
Рис. 6.12. Время вычислений
Задание. Постройте диаграмму времени вычислений (рис. 6.12).
Пришло время для анализа эффективности распараллеливания. Вставляем новую сводную таблицу. Проводим дополнительные вычисления.
Задание. Сформируйте новую сводную таблицу. Рассчитайте ускорение и эффективность. Постройте графики lg Err (lg N), Sp (lg N)и Ep (lg N). Сделайте выводы.
Читать дальшеИнтервал:
Закладка: