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

Раздел виртуального курса
Параллельное программирование в интерфейсе 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 руководство.