Вычислительный центр им. А.А. Дородницына РАНРаздел виртуального курса
|
|
Лабораторная работа следует за теоретическим модулем основы программирования в MPI. Практические занятия первой части курса выполняются на виртуальной параллельной машине, устанавливаемой в Windows NT/2000 на вашем компьютере.
Прежде всего, перед началом работы вам следует установить MPICH для Windows на ваш компьютер.
Затем, вам необходимо изучить инструкцию пользователя MPICH на английском языке или руководство пользователя российского суперкомпьютера МВС 1000М, с тем, чтобы вы знали ответы на следующие вопросы:
В первых двух упражнениях этой лабораторной работы требуется модифицировать очень простую программу MPI, используя только шесть базовых вызовов MPI.
В третьем упражнении дана простая последовательная программа, названная karp, которая вычисляет PI, используя цикл for для вычисления интегральной аппроксимации. Требуется преобразовать эту программу в программу, используя представление SPMD (одна программа/многокомпонентные данные).
Для относительных новичков в передаче сообщений, следующие упражнения, возможно, потребуют следующее время для выполнения:
Синтаксис и описание вызовов MPI можно посмотреть в руководстве программиста российского суперкомпьютера МВС 1000М .
исходный C файл: hello.c
файл решения на С записать в: helloex1.c
hello является программой SPMD (Single Program/Multiple Data = одна программа/многокомпонентные данные), то есть, одна и та же программа выполняется и как процесс "мастер", и как процессы "рабочие". Программа определяет, является ли она мастером (ранг 0) или рабочим (ранг 1 или выше) посредством предложения if, и затем разветвляется по соответствующим сегментам программы.
Мастер посылает сообщение ("Hello world!") всем рабочим, и затем распечатывает сообщение на стандартный вывод stdout. Каждый рабочий получает его сообщение, затем распечатывает его на stdout.
Ваша задача заключается в том, чтобы модифицировать программу hello так, чтобы каждый рабочий вместо распечатки подтверждения посылал сообщение обратно мастеру, добавив в него рабочий ранг. Мастер должен получить эти сообщения и распечатать сообщение и соответствующие ранги на stdout.
Запустите эту программу на 4 процессорах.
исходный C файл: helloex1.c
файл решения на С записать в: helloex2.c
Приложение может использовать параметр тег в вызовах отправки и получения, чтобы отличать сообщения. Модифицируйте программу, полученную в упражнении 1 так, чтобы мастер посылал сообщения каждому рабочему, используя два различных тега. Используя теги, заставьте рабочих получать сообщения в обратном порядке и затем ответьте мастеру как в упражнении 1. Также, опять заставьте мастера получить и распечатать каждое сообщение и соответствующий ранг на stdout.
Запустите эту программу на 8 процессорах. Создайте командный файл для запуска ex2.bat и очистки ex2cu.bat.
исходный C файл: karp.c
файл решения на С записать в: karpsoln.c
Входной файл данных: values
Программа karp вычисляет PI, используя интегральную аппроксимацию. Вам предоставлена последовательная версия программы karp, и от вас требуется модифицировать ее в параллельную версию в форме SPMD.
Скопируйте и запустите последовательную программу, затем найдите ответ на следующие вопросы:
- Как программа считает PI? (Совет:
переведите комментарии к программе)
- Как точность вычисления зависит от числа шагов аппроксимации N? (Совет:
отредактируйте values для различных входных значений
от 10 до 10000)
- Как вы думаете, что будет с точностью, с которой мы вычисляем PI, когда мы
разобьем работу по узлам?
В этом разделе вы разбиваете работу по параллельным процессам.
Цель
- Получить работающую SPMD программу, написанную с использованием на MPI.
Шаги
- Отредактируйте karp, чтобы разбить работу по процессам. Используйте только шесть базовых вызова MPI. Совет: мастеру необходимо сообщить всем рабочим полное число итераций и, затем, каждый рабочий вычисляет свой индекс цикла, так, чтобы он проделал его часть работы. Когда это выполнено, каждый рабочий посылает свою частную сумму назад мастеру, который получает эти суммы и вычисляет окончательный результат.
- Рассчитать задачу на одном из
вводимых узлов
- Выполнить задачу с 4 процессорами и с 8 процессорами.
Вопросы
- Считается ли программа?
- Дает ли она правильный ответ?
- Будет ли вычисленное значение PI всегда тем же для данного N?
- Как может операция ⌠распространения (broadcast)■, в которой одна задача
посылает одно и тоже сообщение всем другим задачам, помочь вам? (Операция MPI
⌠распространения (broadcast)■ будет изучаться позднее.)
|
|
╘ 2003 Вычислительный
центр им. А.А.Дородницына Все права защищены. |
|