Вычислительный центр им. А.А. Дородницына РАН    

Раздел виртуального курса
Параллельное программирование в интерфейсе MPI


Лабораторная работа № 8:
Устойчивые запросы связи MPI


Содержание


Предварительные требования

Эта работа следует за теорией, изложенной в модуле Устойчивые запросы связи. Требуется вначале завершить работу по модулю Основы программирования в MPI , включая упражнения, прежде чем начинать данную лабораторную работу.

Для получения справки по синтаксису вызовов 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. Запустите на четырех процессорах. Сохраните выход в файле ‐ вам это нужно, чтобы протестировать корректность результатов и сравнить времены. Вы должны ожидать Вам следует ожидать, что времена выполнения изменяются широко для интерактивных запусков. Волновые коды включают переменные для числа точек вдоль вибрирующей струны и числу шагов по времени. Пробуйте изменять эти переменные, и запускать заново.

Конвертация кода к устойчивым запросам связи

Конвертируйте код для использования устойчивых запросов связи при обмене конечными точками.

Нижеследующая схема показывает структуру программы wave_send. Выбранные поля идентифицируют изменения, которые должны быть сделаны к определенным подпрограммам. Эти подпрограммы также содержат комментарии, которые обеспечивают дополнительную информацию относительно конверсионного процесса.

Вы будете заменять стандартные отправки и получения на функции устойчивой связи. Так как функции, которые создают устойчивые запросы используют те же самые параметры, что и вызовы передачи сообщений, вы можете выполнить упражнение без понимания, как эти параметры относятся к программе. Здесь дано некоторое пояснение, если вам захочется получить эту дополнительную информацию.

начало программы

определить число задач и ранг (main)

идентифицировать левого и правого соседей (main)

получить параметры программы (get_data)

инициализировать волновые значения (init_line)

создать устойчивый запрос связи - постоянную коммуникацию
обновить значения
переразместить устойчивый запрос связи
если master: собрать результаты и распечатать (output_master)

если worker: отправить результаты мастеру (output_workers)

конец

Запустить конвертированный код

Откомпилируйте и запустите ваш конвертированный код снова на 4 процессорах. Сравните результаты по времени с теми, что были в оригинальном коде wave_send.


Очистка

После завершения работы программ и сдачи вашего решения преподавателю не забудьте очистить ваш рабочий каталог на кластерном компьютере ВЦ РАН. Исходные тексты программ можно хранить на сервере Fastcenter в вашем каталоге.


Литература

Fox, G. et al. (1988) Solving Problems on Concurrent Processors, vol. 1. Prentice Hall.


© 2003 Вычислительный центр им. А.А.Дородницына Все права защищены.
Прочтите наше Copyright руководство.