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

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


Лабораторная работа ╧ 4:
MPI коллективный обмен сообщениями I


Содержание


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

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


Цели

Упражнение 1 лабораторной работы ознакомит вас с основными функциями коллективной коммуникации: операциями рассылки (broadcast), сборки (gather) и глобального приведения (global reduction).

В упражнении 2 требуется вычислить π.

В упражнении 3 изучается метод Лапласа.


Упражнение 1


Рабочий файл на C: ex1.c
Название рабочего файла на С для записи решения: ex1_solved.c
Название файла С для записи решения C: ex1_c.data
Файл входных данных для программы на C: c.seed
Файл построения C программы: ex1_c.mak

Структура этой программы следующая:

Пожалуйста, при выполнении упражнения используйте следующую последовательность действий:

  1. Просмотрите программу с тем, чтобы понять, какие разделы программы соответствуют какому элементу структуры, которые перечислены выше. Отметьте, в частности, сервисную функцию GetStats, которую используют, чтобы вычислить максимальное значение и стандартное отклонение массива чисел.
  2. Вставьте соответствующие вызовы функций коллективной коммуникации в MPI в указанных точках программы.
  3. Используя программу WinSCP, скопируйте файл ex1_solved.c в вашу директорию на кластерном компьютере.
  4. Откомпилируйте программу, используя командную строку


═════ mpicc -o ex1_solved.exe ex1_solved.c -lm
═══

═════ или соответствующий файл построения, например:
═════

═════ nmake /f ex1_c.mak

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

  1. Определитесь, как много задач вы желаете использовать (от 1 до 8).
  2. С помощью SSH клиента (putty.exe) запустите из командной строки программу для расчета


═════ mpirun -np 4 ex1_solved.exe -maxtime 5

═ ════Здесь выбрано 4 задачи и установлено максимальное время расчета, после которого программа будет удалена в случае зацикливания. ═

═════ (Указание максимального допустимого времени расчета √ обязательное требование!)

  1. Скопируйте выходной файл на ваш компьютер.

Упражнение 2:

Вычисление π


Краткая аннотация

Существует два примера программ для вычисления π:

Это очень простая параллельная программа, в которой каждая задача независимо от остальных находит приближенное значение π. Объем работы, сделанный каждой задачей, остается тем же самым по мере увеличения количества задач, но при этом усредненное значение оказывается более правильным. Есть две версии: одна версия демонстрирует отправки и получения (pi_send), а другая использует коллективные коммуникации (pi_reduce).

Эта программа вычисляет π, используя интегральную аппроксимацию. Данный код представляет особый интерес, поскольку включает в себя несколько программ, которые иллюстрируют конверсию последовательного кода int_pi в параллельный код. Конечная версия кода записана в int_pi2.c.


Описание проблемы

Нарисуйте круг с радиусом 1 с центром в начале. Круг вписан в квадрат, углы которого в (-1,-1), (-1,1), (1,1) и (1,-1). Площадь круга, разделенного на площадь квадрата равна π/4.

Представьте себе этот круг как мишень. Координаты по x и y дротиков, попавших в мишень, являются случайными числами между -1 и 1. Дротики могут находиться как в пределах квадрата, так и в пределах круга. Программа приближает значение π, деля число дротиков, которые находятся в пределах круга на полное число брошенных дротиков и умножая результат на четыре.

int_pi использует простую интегральную аппроксимацию для расчета π.


Параллелная реализация

Есть два способа извлечь выгоду из параллелизма: работа программы может занять меньшее время или же работа большей по объему программы может занять примерно то же самое время. Пример dboard_pi использует последний вариант.

Последовательное вычисление π включает бросание 5000 дротиков для каждой из десяти итерации, с накопленным средним числом, полученным в каждой итерации. При параллельном выполнении каждая задача работает независимо, сообщая о своем расчетном значении π задаче-мастеру (ID задачи равен 0). Мастер печатает накопленное среднее число. Чем больше задач, которые участвуют в вычислении, тем точнее рассчитывается значение π.

Код относится к SPMD-типу, то есть каждая задача запускается одними и теми же командами. Есть две версии программы. Pi_send использует отправки и получения низкого уровня, чтобы подсчитать собрать значения π. Pi_reduce использует операцию приведения из коллективных коммуникаций с предопределенной функцией приведения для сложения вектора с удвоенной точностью и плавающей точкой.


Инструкции по компиляции и запуску dboard_pi

Файлы:

Откомпилируйте эти файлы, используя файл построения:

Для C:

nmake /f pi_c.mak

Определитесь с числом узлов для выполнения и исполните одну из учебных программ:

pi_send.exe или pi_reduce.exe


Инструкции по компиляции и запуску int_pi

Файлы:

        int_pi.c √ оригинальная последовательная версия кода int_pi.

        int_pi1.c √ частично распараллеленный код, сведенный к SPMD, но без разделения работы и без передачи сообщений.

        int_pi2.c √ название файла для финальной параллельной версии.

        int_pi_c.mak √ файл построения.

 

Компиляция кода:

mpicc int_pi2.c -o int_pi2.exe -maxtime 5

или:

nmake /f int_pi_c.mak

Определитесь с числом узлов, которые будут использованы и выполните программу-мастер:

int_pi2.exe


Упражнение 3:

Метод Лапласа


Краткая аннотация

Это пример программы 2-х-мерно-блочной декомпозиции. Она работает в парадигме SPMD (единственная программа, множественные данные). В программу включены примеры узлов, обменивающих значения на краях, проверка сходимости и использование некоторых из функций коллективной коммуникации MPI.


Обсуждение задачи

Эта программа использует схему конечных разностей для решения уравнения Лапласа для квадратной матрицы, размерность которой должна быть (4m+2)*(4m+2).


Параллельная реализация

В данном случае  программа определяет матрицу размера 48x48, которая разделена на четыре процессора.

Каждый рабочий процесс решает для себя, является ли он краем, углом или внутренним узлом, а так же с какими другими рабочими процессами он должен обмениваться сообщениями. Краевые узлы получают свои "локальные" граничные значения от "глобальных" граничных значений, при этом обмениваясь сообщениями со своими соседними внутренними узлами. Начальное значение всех точек равно среднему значению глобальных граничных величин. Последовательность итераций имеет следующий вид:

Каждый рабочий процесс обменивает краевые значения со своими четырьмя соседями. Далее, новые значения рассчитываются для верхнего левого и нижнего правого углов ("красных" углов) матрицы у каждого узла. Рабочие процессы обменивают краевые значения снова. Затем рассчитываются верхний правый и нижний левый углы ("черные" углы).

Через каждые 20 итераций узлы вычисляют среднюю разницу между текущими значениями каждой точкой и значениями в этой точек 20 итераций назад. Эти локальные средние разности собираются задачей с номером 0 и высчитывается глобальная средняя разница. Если она меньше, чем некоторое приемлемое значение, то задача 0 собирает куски матрицы. В противном случае подсчитываются еще 20 итераций.


Инструкции по компиляции и запуску

файлы C:

o       parallel_laplace.c  √ файл параллельной реализации

o       parallel_laplace.mak файл построения

2.     Откомпилируйте, используя предоставленный файл построения.


═══════════ nmake /f parallel_laplace.mak

 

3.     Отпределите 4 процессора для запуска программы (mpirun -np 4 ...)

4.     Выполнить программу parallel_laplace.exe.


mpirun -np 4 parallel_laplace.exe -maxtime 3


Результаты запомнить в parallel_laplace.out.


Очистка

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


 

 

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