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

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

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


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