|
|||
Семинар 7.. Тема: Применение технологии MPI для параллельной реализации вычисления суммы ряда. Раздел 1.. Раздел 2.Семинар 7. Тема: Применение технологии MPI для параллельной реализации вычисления суммы ряда План: 1. Что мы освоили на предыдущих семинарах касательно технологии MPI. Подводим итоги. 2. Используем наши знания для параллельной реализации вычисления суммы ряда
Раздел 1. Итак – еще раз повторим функции MPI, которые мы знаем. Функции общего назначения MPI_Init – инициализация работы с MPI MPI_Finalize – завершение работы с MPI MPI_Comm_rank – определение номера процесса MPI_Comm_size – определение размера группы (количества процессов в группе) Функции для обмена между отдельными процессами MPI_Send – блокирующая отправка данных процессу с заданным номером MPI_Recv – блокирующий прием данных от процесса с заданным номером MPI_Isend – неблокирующая отправка процессу с заданным номером MPI_Irecv – неблокирующий прием от процесса с заданным номером MPI_Test – проверка завершенности неблокирующего приема\отправки MPI_Wait – ожидание завершения неблокирующего приема\отправки Функции коллективного взаимодействия между параллельными процессами MPI_Bcast – рассылка данных от одного процесса всем процессам в группе MPI_Reduce (MPI_Allreduce) – глобальные операции над данными из разных процессов Кроме того, мы знаем два варианта параллельной реализации циклов- «блочное» и «циклическое», см материалы предыдущего семинара и\или стр.13 и 14 Пособия по MPI.
Раздел 2. Применим наши знания для параллельной реализации расчета суммы ряда
· Сумма этого ряда равна (если вспомнить математический анализ) π2/6+ π4/90. · Естественно, вместо бесконечного числа членов ряда будем суммировать конечное число – n=10000000. · Каждый процесс будет суммировать свои члены ряда – вычислять частичную сумму с. · Для сложения всех частичных сумм из разных процессов применим процедуру MPI_Reduce с записью результата в с1. · Будем измерять время счета с использованием функции MPI_Wtime
Пояснение: как работает процедура MPI_Wtime Процедуру надо вызвать дважды – до и после участка программы, время выполнения которого необходимо измерить:
double time1=MPI_Wtime(); … … … double time2= MPI_Wtime();
Разница между time1 и time2 дает время (в секундах) выполнения фрагмента между двумя вызовами MPI_Wtime. Что надо сделать:
1. Довести до работающего состояния программу расчета суммы ряда. Проверить соответствие расчетной суммы ряды и аналитического значения. 2. Выполнить серию запусков с возрастающим количеством процессов. Найти для данной задачи оптимальное количество процессов, при котором время вычисления – минимальное. 3. Заменить в программе «блочную» схему параллельного выполнения цикла на «циклическую» и выполнить для этого случая пункт 2.
|
|||
|