Лого cs.karelia.ru Кафедра ИМО
Курсовая работа
Введение
Общие процедуры MPI
Передача сообщений
Прием сообщений
Пример
Источники

Valid HTML 4.01!


Пример параллельной программы для MPI

#include "mpi.h" // подключение библиотеки функций MPI
int main (int argc, char **argv)
{
char message[20];
int myrank;
MPI_Status status;
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &myrank); // запрос процессом его номера
if (myrank==0) // код для нулевого процесса
{
strcpy (message, "Hello, there");
MPI_Send(message, strlen(message), MPI_CHAR, 1, 99, MPI_COMM_WORLD);
}
else // код для первого процесса
{
MPI_Recv (message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
printf ("received: %s:\n", message);
}
MPI_Finalize(); // завершение MPI программы
}

Номер процесса - целое неотрицательное число, являющееся уникальным атрибутом каждого процесса.

Атрибуты сообщения - номер процесса-отправителя, номер процесса-получателя и идентификатор сообщения. Для них заведена структура MPI_Status, содержащая три поля: MPI_Source (номер процесса отправителя), MPI_Tag (идентификатор сообщения), MPI_Error (код ошибки); могут быть и добавочные поля.

Идентификатор сообщения (msgtag) - атрибут сообщения, являющийся целым неотрицательным числом, лежащим в диапазоне от 0 до 32767.

Процессы объединяются в группы, могут быть вложенные группы. Внутри группы все процессы перенумерованы. С каждой группой ассоциирован свой коммуникатор. Поэтому при осуществлении пересылки необходимо указать идентификатор группы, внутри которой производится эта пересылка. Все процессы содержатся в группе с предопределенным идентификатором MPI_COMM_WORLD.