Next:4.5. Глобальные вычислительные операции над распределенными данными
Up:4. КОЛЛЕКТИВНЫЕ ОПЕРАЦИИ
Prev:4.3. Функции распределения блоков данных по всем процессам группы

4.4. Совмещенные коллективные операции

Функция MPI_Alltoall совмещает в себе операции Scatter и Gather и является по сути дела расширением операции Allgather, когда каждый процесс посылает различные данные разным получателям. Процесс i посылает j-ый блок своего буфера sendbuf процессу j, который помещает его в i-ый блок своего буфера recvbuf. Количество посланных данных должно быть равно количеству полученных данных для каждой пары процессов.

C:
int MPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype,
void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
FORTRAN:
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,
RECVCOUNT, RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE,
COMM, IERROR
IN sendbuf - адрес начала буфера посылки;
IN sendcount - число посылаемых элементов;
IN sendtype - тип посылаемых элементов;
OUT recvbuf - адрес начала буфера приема;
IN recvcount - число элементов, получаемых от каждого процесса;
IN recvtype - тип получаемых элементов;
IN comm - коммуникатор.

Графическая интерпретация операции Alltoall представлена на рис. 4.7.

Рис. 4.7. Графическая интерпретация операции Аlltoall.

Функция MPI_Alltoallv реализует векторный вариант операции Alltoall, допускающий передачу и прием блоков различной длины с более гибким размещением передаваемых и принимаемых данных.




Next:4.5. Глобальные вычислительные операции над распределенными данными
Up:4. КОЛЛЕКТИВНЫЕ ОПЕРАЦИИ
Prev:4.3. Функции распределения блоков данных по всем процессам группы