Вперед: 4.4.5. Глобальные вычислительные операции над распределенными данными
Назад: 4.4.3. Функции распределения блоков данных по всем процессам группы
К содержанию: Оглавление
4.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, допускающий передачу и прием блоков различной длины с более гибким размещением передаваемых и принимаемых данных.
Вперед: 4.4.5. Глобальные вычислительные операции над распределенными данными
Назад: 4.4.3. Функции распределения блоков данных по всем процессам группы
К содержанию: Оглавление