Процедуры обмена между двумя процессами
Основными процедурами для целей обмена двух процессов слу-
жат процедура посылки сообщения MPI_SEND и процедура приема
сообщения MPI_RECV; обращения к этим процедурам имеют вид
MPI_SEND(buf0,count0,datatype0,dest,tag0,comm),
MPI_RECV(buf1,count1,datatype1,source,tag1,comm,status),
где
buf0, buf1 — начальные адреса передающего и принимающего
буферов (соответственно);
count0, count1 — числа элементов данных в передающем и в
принимающем буферах;
datatype0, datatype1 — типы передаваемых и получаемых
данных;
dest — номер принимающего процесса;
source — номер посылающего процесса;
tag — тэг сообщения (тэг служит для указания типа сообщения
и может принимать целочисленные значения от 0 до натурального
числа UB, значение которого зависит от реализации);
comm — коммуникатор группы.
Кроме этих процедур имеются также процедуры
MPI_ANY_SOURCE и MPI_ANY_TAG для приема сообщений от лю-
бых источников с любыми тэгами.
Коллективные обмены между процессами
Основными процедурами для коллективных обменов меж-
ду процессами являются барьерная процедура MPI_BARRIER, ши-
роковещательная процедура MPI_BCAST, процедура сбора данных
MPI_GATHER, процедура раздачи данных MPI_SCATTER, процедура
сбора и раздачи данных всем процессам MPI_ALLGATHER.
Барьерная синхронизация всей группы процессов осуществля-
ет процедура MPI_BARRIER с обращением вида MPI_BARRIER(comm),
где comm — коммуникатор группы.
После вызова этой процедуры процесс останавливается до тех
пор, пока все процессы группы не произведут вызов этой проце-
дуры; это позволяет синхронизировать процессы, продолжая их с
момента, когда будет произведен последний вызов этой процедуры.
Передачу сообщения от одного процесса ко всем остальным
процессам группы называют широковещательной (broadcast) пере-
дачей; она реализуется процедурой MPI_BCAST с помощью вызова
MPI_BCAST(buffer,count,datatype,root,comm),
156