8654
.pdfПРИЛОЖЕНИЕ 3. Порядок определения доступных вычислительных узлов
спомощью утилиты WMPICONFIG
1.Запустите утилиту WMPICONFIG, входящую в пакет MPICH2 (Пуск – Все программы – MPICH2 – wmpiconfig.exe). В открывшейся форме в поле Domain введите имя рабочей группы / компьютерного класса (например, 2-111), компьютеры которого планируется проверить на доступность и нажмите кнопку Get Hosts. В нижнем окне отобразится список компьютеров указанной рабочей группы / компьютерного класса.
2.Для определения доступных для использования вычислительных узлов необходимо нажать кнопку Scan Hosts. После чего имена доступных компьютеров окрасятся в зелёный цвет, а недоступных – в серый цвет (рис. П3.1).
Рис. П3.1. Список доступных вычислительных узлов
ПРИЛОЖЕНИЕ 4. Сводный перечень некоторых MPI-функций
MPI-функция |
Пояснение |
|
|||
int MPI_Init ( int *agrc, char ***argv ) |
Инициализация |
MPI |
|||
|
|
|
программ |
|
|
int MPI_Finalize (void) |
|
Завершение |
|
MPI |
|
|
|
|
программ |
|
|
int MPI_Comm_size (MPI_Comm comm, int *size |
Определение |
|
|
||
), |
|
|
количества процессов в |
||
где |
|
|
выполняемой |
|
|
- comm - коммуникатор, в рамках которого |
параллельной |
|
|||
выполняется передача данных, |
программе |
|
|
||
- size – переменная, в которую возвращается |
|
|
|
||
значение функции |
|
|
|
|
|
int MPI_Comm_rank (MPI_Comm comm, int *rank |
Определение |
ранга |
|||
), |
|
|
процесса |
|
|
где |
|
|
|
|
|
- rank – переменная, в которую возвращается |
|
|
|
||
значение функции |
|
|
|
|
|
double MPI_Wtime(void) |
|
Получение |
времени |
||
|
|
|
текущего |
момента |
|
|
|
|
выполнения программы |
||
int MPI_Send(void *buf, int count, MPI_Datatype |
Парная |
операция |
|||
type, int dest, int tag, MPI_Comm comm), |
передачи сообщения от |
||||
где |
|
|
одного |
процесса |
|
- buf – адрес буфера памяти, в котором |
другому |
|
|
||
располагаются |
данные |
отправляемого |
|
|
|
сообщения, |
|
|
|
|
|
- count – количество элементов данных в |
|
|
|
||
сообщении, |
|
|
|
|
|
- type - тип элементов данных пересылаемого |
|
|
|
||
сообщения, |
|
|
|
|
|
- dest - ранг процесса, которому отправляется |
|
|
|
||
сообщение, |
|
|
|
|
|
- tag - значение-тег, используемое для |
|
|
|
||
идентификации сообщений, |
|
|
|
|
|
- comm - коммуникатор, в рамках которого |
|
|
|
||
выполняется передача данных. |
|
|
|
||
int MPI_Recv(void *buf, int count, MPI_Datatype |
Парная |
операция |
|||
type, int source, int tag, |
MPI_Comm comm, |
приёма |
сообщения |
||
MPI_Status *status), |
|
|
одним процессом |
от |
|
где |
|
|
другого |
|
|
- buf, count, type – буфер памяти для приема |
|
|
|
||
сообщения, назначение соответствует описанию |
|
|
|
||
в MPI_Send (), |
|
|
|
|
|
- source - ранг процесса, от которого должен |
|
|
|
|||
быть выполнен прием сообщения, |
|
|
|
|
||
- tag - тег сообщения, которое должно быть |
|
|
|
|||
принято для процесса, |
|
|
|
|
|
|
- comm - коммуникатор, в рамках которого |
|
|
|
|||
выполняется передача данных, |
|
|
|
|
||
- status – указатель на структуру данных с |
|
|
|
|||
информацией |
о |
результате |
выполнения |
|
|
|
операции приема данных |
|
|
|
|
||
int MPI_Bcast(void *buf, int count, MPI_Datatype |
Коллективная операция |
|||||
type, int root, MPI_Comm comm), |
|
передачи |
данных |
от |
||
где |
|
|
|
одного процесса |
всем |
|
- buf, count, type – буфер памяти с отправляемым |
процессам программы |
|||||
сообщением (для процесса с рангом 0), и для |
|
|
|
|||
приема сообщений для всех остальных |
|
|
|
|||
процессов, |
|
|
|
|
|
|
- root - ранг процесса, выполняющего рассылку |
|
|
|
|||
данных, |
|
|
|
|
|
|
- comm - коммуникатор, в рамках которого |
|
|
|
|||
выполняется передача данных |
|
|
|
|
||
int MPI_Reduce(void *sendbuf, void *recvbuf, int |
Коллективная операция |
|||||
count, MPI_Datatype type, MPI_Op op, int root, |
передачи |
данных |
от |
|||
MPI_Comm comm), |
|
|
всех процессов одному |
|||
где |
|
|
|
процессу |
|
|
-sendbuf - буфер памяти с отправляемым сообщением,
-recvbuf – буфер памяти для результирующего сообщения (только для процесса с рангом root),
-count - количество элементов в сообщениях,
-type – тип элементов сообщений,
-op - операция, которая должна быть выполнена над данными,
-root - ранг процесса, на котором должен быть получен результат,
-comm - коммуникатор, в рамках которого выполняется операция
int |
MPI_Sendrecv(void |
*sbuf,int |
scount, |
Коллективная операция |
MPI_Datatype stype, int dest, int stag, void *rbuf, |
одновременного |
|||
int rcount, MPI_Datatype rtype, int source, int rtag, |
выполнение передачи и |
|||
MPI_Comm comm, MPI_Status *status), |
|
приема |
||
где |
|
|
|
|
- sbuf, scount, stype, dest, stag - параметры |
|
|||
передаваемого сообщения, |
|
|
|
|
- rbuf, rcount, rtype, source, rtag - параметры |
|
|||
принимаемого сообщения, |
|
|
|
- comm - коммуникатор, в рамках которого |
|
|
|
||||||
выполняется передача данных, |
|
|
|
|
|
||||
- status – структура данных с информацией о |
|
|
|
||||||
результате выполнения операции |
|
|
|
|
|
||||
int |
MPI_Scatter(void |
*sbuf, |
int |
scount, |
Коллективная операция |
||||
MPI_Datatype |
stype, |
void |
*rbuf, |
int |
rcount, |
обобщенной |
передача |
||
MPI_Datatype rtype, int root, MPI_Comm comm), |
данных |
от |
одного |
||||||
где |
|
|
|
|
|
|
процесса |
|
всем |
- sbuf, scount, stype - параметры передаваемого |
процессам |
|
|
||||||
сообщения (scount определяет количество |
|
|
|
||||||
элементов, передаваемых на каждый процесс), |
|
|
|
||||||
- rbuf, rcount, rtype - параметры сообщения, |
|
|
|
||||||
принимаемого в процессах, |
|
|
|
|
|
|
|||
- root – ранг процесса, выполняющего рассылку |
|
|
|
||||||
данных, |
|
|
|
|
|
|
|
|
|
- comm - коммуникатор, в рамках которого |
|
|
|
||||||
выполняется передача данных |
|
|
|
|
|
||||
int |
MPI_Gather(void |
*sbuf, |
int |
scount, |
Коллективная операция |
||||
MPI_Datatype |
stype, |
void |
*rbuf,int |
rcount, |
обобщенной |
передачи |
|||
MPI_Datatype rtype, int root, MPI_Comm comm), |
данных |
от |
всех |
||||||
где |
|
|
|
|
|
|
процессов |
|
одному |
-sbuf, scount, stype - параметры передаваемого процессу сообщения,
-rbuf, rcount, rtype - параметры принимаемого сообщения,
-root – ранг процесса, выполняющего сбор
данных, |
|
|
|
|
|
- comm - коммуникатор, в рамках которого |
|
|
|
||
выполняется передача данных |
|
|
|
|
|
int MPI_Allgather(void *sbuf, |
int |
scount, |
Коллективная операция |
||
MPI_Datatype stype, void *rbuf, |
int |
rcount, |
обобщенной |
|
передачи |
MPI_Datatype rtype, MPI_Comm comm) |
|
данных |
от |
всех |
|
|
|
|
процессов |
|
одному |
|
|
|
процессу (сбора) и |
||
|
|
|
последующей рассылки |
||
|
|
|
от одного |
|
процесса |
|
|
|
всем процессам |
||
int MPI_Barrier(MPI_Comm comm) |
|
|
Коллективная операции |
||
|
|
|
синхронизации |
Список рекомендованной литературы
1.The Message Passing Interface (MPI) standard [Электронный ресурс]. - Режим доступа: http://www.mcs.anl.gov/mpi.
2.Кластерные установки России и СНГ [Электронный ресурс]. - Режим
доступа: http://parallel.ru/parallel/russia/russian_clusters.html.
3.Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. СПб.: БХВПетербург, 2002. - 608 с.
4.Антонов А.С. Параллельное программирование с использованием технологии MPI: Учебное пособие. – М.: Изд-во МГУ, 2004. – 71 с.
5.Немнюгин С.А., Стесик О.Л. Параллельное программирование для многопроцессорных вычислительных систем с использованием MPI. СПб.: БХВПетербург, 2002.
Кислицын Дмитрий Игоревич
ОСНОВЫ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ ТЕХНОЛОГИИ MPI
Учебно-методическое пособие
по выполнению лабораторных работ для обучающихся по дисциплине «Основы параллельных вычислений для систем с распределённой памятью» по направлению подготовки 09.03.02 Информационные системы и технологии, без профиля
Федеральное государственное бюджетное образовательное учреждение высшего образования «Нижегородский государственный архитектурно-строительный университет»
603950, Нижний Новгород, ул. Ильинская, 65. http://www.nngasu.ru, srec@nngasu.ru