Определение количества и ранга процессов

Инициализация и завершение MPI-программ

Основы MPI

Введение в разработку параллельных программ с использованием MPI

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

Первой вызываемой функцией MPI должна быть функция:

int MPI_Init(int *argc, char ***argv),

где

· argc — указатель на количество параметров командной строки,

· argv — параметры командной строки,

применяемая для инициализации среды выполнения MPI-программы. Параметрами функции являются количество аргументов в командной строке и адрес указателя на массив символов текста самой командной строки.

Последней вызываемой функцией MPI обязательно должна являться функция:

int MPI_Finalize(void).

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

#include "mpi.h"int main(int argc, char *argv[]) { <программный код без использования функций MPI> MPI_Init(&argc, &argv); <программный код с использованием функций MPI> MPI_Finalize(); <программный код без использования функций MPI> return 0;}

Следует отметить:

· файл mpi.h содержит определения именованных констант, прототипов функций и типов данных библиотеки MPI;

· функции MPI_Init и MPI_Finalize являются обязательными и должны быть выполнены (и только один раз) каждым процессом параллельной программы;

· перед вызовом MPI_Init может быть использована функция MPI_Initialized для определения того, был ли ранее выполнен вызов MPI_Init, а после вызова MPI_Finalize – MPI_Finalized 1) аналогичного предназначения.

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

Определение количества процессов в выполняемой параллельной программе осуществляется при помощи функции:

int MPI_Comm_size(MPI_Comm comm, int *size),

где

· comm — коммуникатор, размер которого определяется,

· size — определяемое количество процессов в коммуникаторе.

Для определения ранга процесса используется функция:

int MPI_Comm_rank(MPI_Comm comm, int *rank),

где

· comm — коммуникатор, в котором определяется ранг процесса,

· rank — ранг процесса в коммуникаторе.

Как правило, вызов функций MPI_Comm_size и MPI_Comm_rank выполняется сразу после MPI_Init для получения общего количества процессов и ранга текущего процесса:

#include "mpi.h"int main(int argc, char *argv[]) { int ProcNum, ProcRank; <программный код без использования функций MPI> MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &ProcNum); MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); <программный код с использованием функций MPI> MPI_Finalize(); <программный код без использования функций MPI> return 0;}

Следует отметить:

· коммуникатор MPI_COMM_WORLD, как отмечалось ранее, создается по умолчанию и представляет все процессы выполняемой параллельной программы;

· ранг, получаемый при помощи функции MPI_Comm_rank, является рангом процесса, выполнившего вызов этой функции, т. е. переменная ProcRank примет различные значения у разных процессов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: