4.4. Совмещенные коллективные операции
Функция MPI_Alltoall совмещает в себе операции Scatter и Gather и является по сути дела расширением операции Allgather, когда каждый процесс посылает различные данные разным получателям. Процесс i посылает j-ый блок своего буфера sendbuf процессу j, который помещает его в i-ый блок своего буфера recvbuf. Количество посланных данных должно быть равно количеству полученных данных для каждой пары процессов.
IN | sendbuf | - | адрес начала буфера посылки; |
IN | sendcount | - | число посылаемых элементов; |
IN | sendtype | - | тип посылаемых элементов; |
OUT | recvbuf | - | адрес начала буфера приема; |
IN | recvcount | - | число элементов, получаемых от каждого процесса; |
IN | recvtype | - | тип получаемых элементов; |
IN | comm | - | коммуникатор. |
Графическая интерпретация операции Alltoall представлена на рис. 4.7.
Рис. 4.7. Графическая интерпретация операции Аlltoall.Функция MPI_Alltoallv реализует векторный вариант операции Alltoall, допускающий передачу и прием блоков различной длины с более гибким размещением передаваемых и принимаемых данных.