next up previous contents
Next: Примеры использования MPI_ALLGATHER, MPI_ALLGATHERV Up: Коллективные взаимодействия процессов Previous: Пример использования MPI_SCATTER, MPI_SCATTERV   Contents

Сборка для всех процессов

Синтаксис функции сборки 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.



Subsections
next up previous contents
Next: Примеры использования MPI_ALLGATHER, MPI_ALLGATHERV Up: Коллективные взаимодействия процессов Previous: Пример использования MPI_SCATTER, MPI_SCATTERV   Contents
Alex Otwagin 2002-12-10