Справочник по функциям mpi
Инициализация MPI
int MPI_Init( int* argc, char** argv)
Инициализация параллельной части приложения. Реальная инициализация для каждого приложения выполняется не более одного раза, а если MPI уже был инициализирован, то никакие действия не выполняются и происходит немедленный возврат из подпрограммы. Все остальные MPI-процедуры могут быть вызваны только после вызова MPI_Init.
Возвращает: в случае успешного выполнения - MPI_SUCCESS, иначе - код ошибки. (То же самое возвращают и все остальные функции).
Сложный тип аргументов MPI_Init предусмотрен для того, чтобы передавать всем процессам аргументы main:
Пример вызова:
int main(int argc, char** argv) { … MPI_Init(&argc, &argv); … } |
Закрытие MPI
int MPI_Finalize( void )
Завершение параллельной части приложения. Все последующие обращения к любым MPI-процедурам, в том числе к MPI_Init, запрещены. К моменту вызова MPI_Finalize любым процессом все действия по обмену сообщениями должны быть завершены.
Пример вызова:
int main(int argc, char** argv) { … MPI_Finalize(); … } |
Определение числа процессов
int MPI_Comm_size( MPI_Comm comm, int* size)
Определение общего числа параллельных процессов в группе comm (вместо comm во всех лабораторных работах использовать константу MPI_COMM_WORLD - группа "все процессы", связи в виде полного графа).
· comm - идентификатор группы
· выходной параметр size - размер группы. Здесь возвращается число процессов, которое пользователь задал при запуске программы.
Пример вызова:
… int size; MPI_Comm_size(MPI_COMM_WORLD, &size); … |
Определение номера процесса
int MPI_Comm_rank( MPI_comm comm, int* rank)
Определение номера процесса в группе comm. Возвращаемое значение (номер процесса, rank) лежит в диапазоне от 0 до size-1.
· comm - идентификатор группы
· выходной параметр rank - номер вызывающего процесса в группе comm
Пример вызова:
… int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); … |
Аварийное завершение программы
int MPI_Abort(MPI_Comm comm, int errorcode )
Аварийное завершение работы всех процессов. Эта функция должна вызываться одновременно всеми процессами приложения.
· errorcode - код ошибки
· comm - идентификатор группы
Пример вызова:
… MPI_Abort(MPI_COMM_WORLD,MPI_ERR_OTHER); … |
Передача сообщения
int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm)
Посылка сообщения с меткой msgtag, состоящего из count элементов типа datatype, процессу с номером dest. Все элементы сообщения расположены подряд в буфере buf. Значение count может быть нулем. Тип передаваемых элементов datatype должен указываться с помощью предопределенных констант типа (для целых - MPI_INT). Разрешается передавать сообщение самому себе. Метка должна быть одной и той же при приеме и передаче сообщения. Дальнейшее выполнение программы задерживается до тех пор, пока передача не завершится.
· buf - адрес начала буфера посылки сообщения
· count - число передаваемых элементов в сообщении
· datatype - тип передаваемых элементов
· dest - номер процесса-получателя
· msgtag - метка сообщения
· comm - идентификатор группы
Пример вызова:
… #define N 10 … int rank,buf[N]; … MPI_Send(buf,N,MPI_INT,1,10,MPI_COMM_WORLD); … |
Прием сообщения
int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_comm comm, MPI_Status *status)
Прием сообщения с меткой msgtag от процесса source с блокировкой. Число элементов в принимаемом сообщении не должно превосходить значения count.
· выходной параметр buf - адрес начала буфера приема сообщения
· count - максимальное число элементов в принимаемом сообщении
· datatype - тип элементов принимаемого сообщения
· source - номер процесса-отправителя
· msgtag - метка принимаемого сообщения
· comm - идентификатор группы
· выходной параметр status - параметры принятого сообщения
Пример вызова: