52
Пересылка
данных
по
схеме
"
каждый
всем
"
int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *rcvbuf, int rcvcount, MPI_Datatype rcvtype, MPI_Comm comm)
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RCVBUF, RCVCOUNT, RCVTYPE,
COMM, IERR)
Входные
параметры
:
•
sendbuf
начальный
адрес
буфера
передачи
;
•
sendcount
количество
элементов
данных
,
пересылаемых
каждому
процессу
;
•
sendtype
тип
данных
в
буфере
передачи
;
•
rcvcount
количество
элементов
данных
,
принимаемых
от
каждого
процесса
;
•
rcvtype
тип
принимаемых
данных
;
•
comm
коммуникатор
.
Выходной
параметр
:
•
rcvbuf
адрес
буфера
приема
.
Векторными
версиями
MPI_Allgather
и
MPI_Alltoall
являются
подпрограммы
MPI_Allgatherv
и
MPI_Alltoallv
.
Сбор
данных
от
всех
процессов
и
пересылка
их
всем
процессам
int MPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype
sendtype, void *rcvbuf, int *rcvcounts, int *displs, MPI_Datatype
rcvtype, MPI_Comm comm)
MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RCVBUF, RCVCOUNTS,
DISPLS, RCVTYPE, COMM, IERR)
Ее
параметры
совпадают
с
параметрами
подпрограммы
MPI_Allgather,
за
исключением
дополнительного
входного
параметра
displs
.
Это
целочисленный
одномерный
массив
,
количество
элементов
в
котором
равно
количеству
процессов
в
коммуникаторе
.
Элемент
массива
с
индексом
i
задает
смещение
относительно
начала
буфера
приема
recvbuf
,
в
котором
располагаются
данные
,
принимаемые
от
процесса
i.
Блок
данных
,
переданный
от
j-
го
процесса
,
принимается
каждым
процессом
и
размещается
в
j-
м
блоке
буфера
приема
.
Пересылка
данных
от
всех
процессов
всем
процессам
со
смещением
int MPI_Alltoallv(void *sendbuf, int *sendcounts, int *sdispls,
MPI_Datatype sendtype, void *rcvbuf, int *rcvcounts, int *rdispls,
MPI_Datatype rcvtype, MPI_Comm comm)
MPI_ALLTOALLV(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPE, RCVBUF,
RCVCOUNTS, RDISPLS, RCVTYPE, COMM, IERR)
Ее
параметры
аналогичны
параметрам
подпрограммы
MPI_Alltoall
,
кроме
двух
дополнительных
параметров
:
•
sdispls
целочисленный
массив
,
количество
элементов
в
котором
равно
количеству
процессов
в
коммуникаторе
.
Элемент
j
задает
смещение
относительно
начала
буфера
,
из
которого
данные
передаются
j-
му
процессу
.