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

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


Лабораторная работа № 5:
MPI коллективный обмен сообщениями II


Содержание


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

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

Для изучения или получения справки по синтаксису вызовов MPI, свяжитесь со стандартом Message Passing Interface в первоисточнике:
http://www-unix.mcs.anl.gov/mpi/,
для которого имеется перевод на русский язык на странице кластера Белорусского государственного университета
http://www.cluster.bsu.by/MPI_ALL.htm.


Цели

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


Упражнение

Входной файл:

wave_inp.data

файлы на C для лабораторной работы:

wave_mw.c
cwave.mak

C solution files:

wave_mw_vv.c
cwave_vv_out.data (будет получен после запуска)

Выходной файл Фортрана (для сравнения с результатами программы на C):

wave_vv_out.data

Описание программы

Wave_mw осуществляет параллельное волновое уравнение, описанное в главе 5 книги Fox и др. (1988), используя модель "мастер-рабочий". Эта программа вычисляет амплитуду точек по вибрирующей строке для указанного числа интервалов времени. Уравнение, которое решает программа таково:

   newval[i] = (2.0 * values[i]) - oldval[i] 
	       + (sqtau * (values[i-1] - (2.0 * values[i]) + values[i+1]));
Здесь "i" указывает точку на линии. Массив значений содержит текущие амплитуды. Заметим, что новая амплитуда для точки будет зависеть от текущих значений в соседних точках.

Декомпозицию можно увидеть на рисунке:


Каждой задаче назначен непрерывный блок точек ("блочная" декомпозиция). Каждая задача имеет все данные, нужные для модификации его внутренних точек. Чтобы модифицировать ее конечные точки, задача должна получить значения для точек, ограничивающих блок (граничные величины) от задач, которые "владеют" ими. Она должна также отправить значения ее собственных конечных точек к этим задачам. Для этой коммуникации используются неблокирующие отправки (сопровождаемые вызовом MPI_Wait) и блокирующие получения. Таким образом, основной вычислительный цикл обменивает конечные точки и обновляет амплитуды.

Модификация кода для использования Scatterv и Gatherv

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

Нижеприведенная схема показывает структура программы wave_mw. Поля выбора идентифицируют изменения, которые должны быть сделаны в определенных функциях. Эти функции содержат комментарии, информирующие о работе. Кроме того, Вы можете обратиться к фрагменту кода, представленному в модуле MPI Collective Communication II.

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

узнать число задач и ранг (функция main)

для мастера: получить параметры и начальные данные программы (get_data)

широко распределить (broadcast) параметры программы (get_data)

распределить начальные данные

обновите данные (update)

соберите результаты

если мастер: запомните результаты (out_master)

конец

Откомпилируйте и запустите модифицированную программу wave_mw_vv.exe на 2-8 процессорах. Не забудьте, что вы должны скопировать входной файл wave_inp.data в вашу локальную директорию.

Код распечатывает несколько значений для проверки правильности. Правильные значения:

 1: .00   11:-.20   21:-.32   31:-.32   41:-.19   51: .01   
61: .21   71: .32   81: .31   91: .18  100: .00
 

Полученный в результате файл, cwave_vv_out.data, можно сравнить с предоставленным выходным файлом (wave_vv_out.data) в каталоге лабораторной работы, чтобы дополнительно удостовериться, что код работает правильно.


Домашнее задание: в данном коде на C - найдите ошибки и исправленный вариант в файле hmwork5.c отправьте на проверку .


Литература

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


Очистка

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


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