Вычислительный центр им. А.А. Дородницына РАНРаздел виртуального курса
|
|
---|
Для получения справки по синтаксису вызовов MPI можно обратиться к переводу стандарта Message Passing Interface.
файл лабораторной работы на С: wave_send.c
файл решения на С назвать: wave_pcomm.c
Программа wave_send осуществляет параллельное волновое уравнение, описанное в Главе 5 Fox et al. (1988). Оно вычисляет амплитуду точек на вибрирующей струне для указанного числа интервалов времени. Уравнение, которое его решает таково:
newval[i] = (2.0 * values[i]) - oldval[i] + (sqtau * (values[i-1] - (2.0 * values[i]) + values[i+1]));"i" указывает точку на линии. Массив значений содержит текущие амплитуды. Заметим, что новая амплитуда для точки будет зависеть от текущих значений в соседних точках.
Декомпозицию можно увидеть на следующем рисунке:
Каждой задаче назначен непрерывный блок точек ("блочная" декомпозиция). Каждая задача имеет все данные, необходимые для модификации его внутренних точек. Чтобы модифицировать ее конечные точки, задача должна получить значения для точек, ограничивающих блок (граничные величины) от задач, которые "владеют" ими. Она должна также отправить значения его собственных конечных точек к этим задачам. Неблокирующие отправки и получения используются для этой коммуникации, сопровождаемые вызовом MPI_Waitall.
Основной вычислительный цикл обменивает конечные точки и затем модифицирует амплитуды. Так как конечная точка использует те же самые параметры для запросов передачи сообщений, что и все итерации цикла, и цикл повторен много раз, то они – хорошие кандидаты для устойчивых запросов связи.
Откомпилируйте и запустите wave_send. Запустите на четырех процессорах. Сохраните выход в файле ‐ вам это нужно, чтобы протестировать корректность результатов и сравнить времены. Вы должны ожидать Вам следует ожидать, что времена выполнения изменяются широко для интерактивных запусков. Волновые коды включают переменные для числа точек вдоль вибрирующей струны и числу шагов по времени. Пробуйте изменять эти переменные, и запускать заново.
Конвертируйте код для использования устойчивых запросов связи при обмене конечными точками.
Нижеследующая схема показывает структуру программы wave_send. Выбранные поля идентифицируют изменения, которые должны быть сделаны к определенным подпрограммам. Эти подпрограммы также содержат комментарии, которые обеспечивают дополнительную информацию относительно конверсионного процесса.
Вы будете заменять стандартные отправки и получения на функции устойчивой связи. Так как функции, которые создают устойчивые запросы используют те же самые параметры, что и вызовы передачи сообщений, вы можете выполнить упражнение без понимания, как эти параметры относятся к программе. Здесь дано некоторое пояснение, если вам захочется получить эту дополнительную информацию.
Откомпилируйте и запустите ваш конвертированный код снова на 4 процессорах. Сравните результаты по времени с теми, что были в оригинальном коде wave_send.
Fox, G. et al. (1988) Solving Problems on Concurrent Processors, vol. 1. Prentice Hall.
© 2003
Вычислительный центр им. А.А.Дородницына
Все права защищены. |
|