126
Сигнатура типа, связанная с sendcount, sendtype в каждом процес-
се должна быть такой же, как и в любом другом процессе. Это требу-
ет, чтобы количество посланных данных было равно количеству по-
лученных данных между каждой парой процессов, карты типа могут
отличаться. Все аргументы используются всеми процессами. Аргу-
мент
comm должен иметь одинаковое значение во всех процессах.
MPI_ALLTOALLV обладает большей гибкостью, чем функция
MPI_ALLTOALL, поскольку размещение данных на передающей
стороне
определяется аргументом sdispls, а на стороне приема – неза-
висимым аргументом
rdispls. j-й блок, посланный процессом i, при-
нимается процессом
j и помещается в i-й блок recvbuf. Эти блоки не
обязаны быть одного размера. Сигнатура типа, связанная с
sendcount[j], sendtype в процессе i, должна быть такой же и для про-
цесса
j. Это подразумевает, что количество посланных данных должно
быть равно количеству полученных данных для каждой пары процес-
сов. Карты типа для отправителя и приемника могут отличаться.
MPI_ALLTOALLV(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
recvcounts, rdispls, recvtype, comm)
IN sendbuf начальный адрес посылающего буфера (альтернатива)
IN sendcounts
целочисленный массив (размера группы), определяющий ко-
личество посылаемых каждому процессу элементов
IN sdispls
целочисленный массив (размера группы). Элемент j содержит
смещение области (относительно sendbuf), из которой берутся
данные для процесса j
IN sendtype тип данных элементов посылающего буфера (дескриптор)
OUT recvbuf адрес принимающего буфера (альтернатива)
IN recvcounts
целочисленный массив (размера группы), содержит число
элементов, которые могут быть приняты от каждого процесса
IN rdispls
целочисленный массив (размера группы). Элемент i определя-
ет смещение области (относительно recvbuf), в которой раз-
мещаются данные, получаемые из процесса i
IN recvtype тип данных элементов принимающего буфера (дескриптор)
IN comm коммуникатор (дескриптор)
int MPI_Alltoallv(void* sendbuf, int *sendcounts, int *sdispls, MPI_Datatype sendtype,
void* recvbuf,int *recvcounts,int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
MPI_ALLTOALLV(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPE,
RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE, COMM, IERROR)