Синтаксис функции сборки Gather-to-all представлен ниже.
MPI_ALLGATHER(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm)
IN | sendbuf | начальный адрес посылающего буфера (альтернатива) | |
IN | sendcount | количество элементов в буфере (целое) | |
IN | sendtype | тип данных элементов в посылающем буфере (дескриптор) | |
OUT | recvbuf | адрес принимающего буфера (альтернатива) | |
IN | recvcount | количество элементов, полученных от любого процесса (целое) | |
IN | recvtype | тип данных элементов принимающего буфера (дескриптор) | |
IN | comm | коммуникатор (дескриптор) |
int MPI_Allgather(void* sendbuf,
int sendcount, MPI_Datatype sendtype, void* recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
MPI_ALLGATHER(SENDBUF, SENDCOUNT,
SENDTYPE, RECVBUF, RECVCOUNT,
RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE,
RECVCOUNT, RECVTYPE,
COMM, IERROR
void MPI::Intracomm::Allgather(const void* sendbuf, int sendcount,
const Datatype& sendtype, void* recvbuf, int recvcount,
const Datatype& recvtype) const
Функцию MPI_ALLGATHER можно представить как MPI_GATHER, где результат принимают все процессы, а не только главный. Блок данных, посланный j-м процессом принимается каждым процессом и помещается в j-й блок буфера recvbuf.
Сигнатура типа, связанная с sendcount, sendtype, должна быть одинаковой во всех процессах.
Результат выполнения вызова MPI_ALLGATHER(...) такой же, как если бы все процессы выполнили n вызовов
MPI_GATHER(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm),для root = 0, ..., n-1. Правила корректного использования MPI_ALLGATHER соответствуют правилам для MPI_GATHER.
Синтаксис функции сборки MPI_ALLGATHERV представлен ниже.
MPI_ALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,recvcounts, displs,recvtype,comm)
IN | sendbuf | начальный адрес посылающего буфера (альтернатива) | |
IN | sendcount | количество элементовв посылающем буфере (целое) | |
IN | sendtype | тип данных элементов в посылающем буфере (дескриптор) | |
OUT | recvbuf | адрес принимающего буфера (альтернатива) | |
IN | recvcounts | целочисленный массив (размера группы) содержащий количество элементов, полученых от каждого процесса | |
IN | displs | целочисленный массив (размера группы). Элемент i представляет смещение области (относительно recvbuf), где на помещаются принимаемые данные от процесса i | |
IN | recvtype | тип данных элементов принимающего буфера(дескриптор) | |
IN | comm | коммуникатор (дескриптор) |
int MPI_Allgatherv(void* sendbuf, int sendcount,
MPI_Datatype sendtype, void *recvbuf,int *recvcounts,
int *displs, MPI_Datatype recvtype, MPI_Comm comm)
MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,
RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE,
RECVCOUNTS(*), DISPLS(*), RECVTYPE, COMM, IERROR
void MPI::Intracomm::Allgatherv(const void* sendbuf,
int sendcount, const Datatype& sendtype, void* recvbuf,
const int recvcounts[], const int displs[],
const Datatype& recvtype) const
Функцию MPI_ALLGATHERV можно представить как MPI_GATHERV, но при ее использовании результат получают все процессы, а не только один корневой. j-й блок данных, посланный каждым процессом, принимается каждым процессом и помещается в j-й блок буфера recvbuf. Эти блоки не обязаны быть одинакового размера.
Сигнатура типа, связанного с sendcount, sendtype в процессе j должна быть такой же, как сигнатура типа, связанного с recvcounts[j], recvtype в любом другом процессе.
Результат вызова MPI_ALLGATHERV(...) такой же, как если бы все процессы
выполнили n вызовов
MPI_GATHERV(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root, comm),
для root = 0, ..., n-1. Правила корректного использования MPI_ALLGATHERV соответствуют правилам для MPI_GATHERV.