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

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


Лабораторная работа ╧ 1:
Основы MPI программирования


Содержание


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

Лабораторная работа следует за теоретическим модулем основы программирования в MPI. Практические занятия первой части курса выполняются на виртуальной параллельной машине, устанавливаемой в Windows NT/2000 на вашем компьютере.

Прежде всего, перед началом работы вам следует установить MPICH для Windows на ваш компьютер.

Затем, вам необходимо изучить инструкцию пользователя MPICH на английском языке или руководство пользователя российского суперкомпьютера МВС 1000М, с тем, чтобы вы знали ответы на следующие вопросы:


Обзор

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

В третьем упражнении дана простая последовательная программа, названная karp, которая вычисляет PI, используя цикл for для вычисления интегральной аппроксимации. Требуется преобразовать эту программу в программу, используя представление SPMD (одна программа/многокомпонентные данные).

Для относительных новичков в передаче сообщений, следующие упражнения, возможно, потребуют следующее время для выполнения:

Синтаксис и описание вызовов MPI можно посмотреть в руководстве программиста российского суперкомпьютера МВС 1000М .


Упражнение 1: Добавить отправку сообщений от рабочих мастеру

исходный C файл: hello.c
файл решения на С записать в: helloex1.c

hello является программой SPMD (Single Program/Multiple Data = одна программа/многокомпонентные данные), то есть, одна и та же программа выполняется и как процесс "мастер", и как процессы "рабочие". Программа определяет, является ли она мастером (ранг 0) или рабочим (ранг 1 или выше) посредством предложения if, и затем разветвляется по соответствующим сегментам программы.

Мастер посылает сообщение ("Hello world!") всем рабочим, и затем распечатывает сообщение на стандартный вывод stdout. Каждый рабочий получает его сообщение, затем распечатывает его на stdout.

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

Запустите эту программу на 4 процессорах.


Упражнение 2: Согласовать сообщения с помощью тегов

исходный C файл: helloex1.c
файл решения на С записать в: helloex2.c

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

Запустите эту программу на 8 процессорах. Создайте командный файл для запуска ex2.bat и очистки ex2cu.bat.


Упражнение 3: Преобразовать последовательный код в параллельный

исходный C файл: karp.c
файл решения на С записать в: karpsoln.c

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

Программа karp вычисляет PI, используя интегральную аппроксимацию. Вам предоставлена последовательная версия программы karp, и от вас требуется модифицировать ее в параллельную версию в форме SPMD.

a. Разберитесь с тем, как работает последовательная версия.

Скопируйте и запустите последовательную программу, затем найдите ответ на следующие вопросы:

- Как программа считает PI? (Совет: переведите комментарии к программе)
- Как точность вычисления зависит от числа шагов аппроксимации N? (Совет: отредактируйте values для различных входных значений  

   от 10 до 10000)
- Как вы думаете, что будет с точностью, с которой мы вычисляем PI, когда мы разобьем работу по узлам?

b. Добавьте вызовы MPI, чтобы создать некую SPMD karp программу.

В этом разделе вы разбиваете работу по параллельным процессам.

Цель

- Получить работающую SPMD программу, написанную с использованием на MPI.

Шаги

- Отредактируйте karp, чтобы разбить работу по процессам. Используйте только шесть базовых вызова MPI. Совет: мастеру необходимо сообщить всем рабочим полное число итераций и, затем, каждый рабочий вычисляет свой индекс цикла, так, чтобы он проделал его часть работы. Когда это выполнено, каждый рабочий посылает свою частную сумму назад мастеру, который получает эти суммы и вычисляет окончательный результат.

- Рассчитать задачу на одном из вводимых узлов
- Выполнить задачу с 4 процессорами и с 8 процессорами.

Вопросы

- Считается ли программа?
- Дает ли она правильный ответ?
- Будет ли вычисленное значение PI всегда тем же для данного N?
- Как может операция ⌠распространения (broadcast)■, в которой одна задача посылает одно и тоже сообщение всем другим задачам, помочь вам? (Операция MPI ⌠распространения (broadcast)■ будет изучаться позднее.)


 

 

 

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