| |
------------------------------------------------------------------
MPI_ALLGATHER(sendbuf, sendcount, sendtype, recvbuf,
recvcount, recvtype, comm)
------------------------------------------------------------------
| IN | sendbuf | Стартовый адрес буфера передачи (по выбору) | ||||
| IN | sendcount | Количество элементов в буфере передачи (целое) | ||||
| IN | sendtype | Тип данных элементов буфера передачи (указатель) | ||||
| OUT | recvbuf | Адрес буфера приема (по выбору) | ||||
| IN | recvcount | Количество элементов, принимаемых от любого процесса (целое) | ||||
| IN | recvtype | Тип данных элементов буфера приема (указатель) | ||||
| IN | comm | Коммуникатор (указатель) |
void MPI::Comm::Allgather(const void* sendbuf, int sendcount,
const MPI::Datatype& sendtype,
void* recvbuf, int recvcount,
const MPI::Datatype& recvtype)
const = 0
Опция in-place для интракоммуникаторов указывается передачей
MPI_IN_PLACE в качестве значения sendbuf для всех процессов.
sendcount и sendtype игнорируются. При этом предполагается,
что входные данные каждого процесса располагаются таким образом, чтобы они
оказались в пространстве, где данный процесс сможет внести свой
собственный вклад в буфер приема. Особенность состоит в том, что результат
вызова MPI_ALLGATHER для случая in-place оказывается таким,
как если бы все процессы выполнили
вызовов:
MPI_GATHER(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, recvbuf,
recvcount, recvtype, root, comm)
для root
.
Если comm - интеркоммуникатор, то каждый процесс из группы A
выдает элемент данных; эти элементы подвергаются конкатенации и результат
сохраняется в каждом процессе из группы B. В то же время,
конкатенация всех вкладов от процессов из группы B сохраняется в
каждом процессе из группы A. Аргументы буферов передачи из группы
B должны соответствовать аргументам буферов приема из группы
А, и наоборот.
Совет пользователям:
Модель коммуникаций для MPI_ALLGATHER, обрабатываемый в
интеркоммуникационном домене, не обязательно должна быть симметричной.
Число элементов, посылаемых процессами из группы A (которое указано
аргументами sendcount, sendtype для группы A и
аргументами recvcount, recvtype для группы B), не
обязательно эквивалентно числу элементов, посылаемых процессами из группы
B (которое указано аргументами sendcount, sendtype
для группы B и арггументами recvcount, recvtype для
группы A). В частности, можно пересылать данные только в одном
направлении, указав sendcount = 0 для реализации связи в обратном
направлении. []
------------------------------------------------------------------
MPI_ALLGATHERV(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, comm)
------------------------------------------------------------------
| IN | sendbuf | Стартовый адрес буфера передачи (по выбору) | ||||
| IN | sendcount | Количество элементов в буфере передачи (целое) | ||||
| IN | sendtype | Тип данных элементов буфера передачи (указатель) | ||||
| OUT | recvbuf | Адрес буфера приема (по выбору) | ||||
| IN | recvcounts | Целочисленный массив (длины, равной длине группы), содержащий количество элементов, принимаемых от каждого процесса | ||||
| IN | displs | Целочисленный массив (длины, равной длине группы).
Элемент |
||||
| IN | recvtype | Тип данных элементов буфера приема (указатель) | ||||
| IN | comm | Коммуникатор (указатель) |
void MPI::Comm::Allgatherv(const void* sendbuf, int sendcount,
const MPI::Datatype& sendtype,
void* recvbuf, const int recvcounts[],
const int displs[],
const MPI::Datatype& recvtype)
const = 0
Опция in-place для интракоммуникаторов указывается передачей
MPI_IN_PLACE в качестве значения sendbuf для всех процессов.
sendcount и sendtype игнорируются. При этом предполагается,
что входные данные каждого процесса располагаются таким образом, чтобы они
оказались в пространстве, где данный процесс сможет внести свой
собственный вклад в буфер приема. Особенность состоит в том, что результат
вызова MPI_ALLGATHER для случая in-place оказывается таким,
как если бы все процессы выполнили
вызовов:
MPI_GATHER(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, recvbuf,
recvcount, recvtype, root, comm)
для root
.
Если comm - интеркоммуникатор, то каждый процесс из группы A
выдает элемент данных; эти элементы подвергаются конкатенации и результат
сохраняется в каждом процессе из группы B. В то же время,
конкатенация всех вкладов от процессов из группы B сохраняется в
каждом процессе из группы A. Аргументы буферов передачи из группы
B должны соответствовать аргументам буферов приема из группы
А, и наоборот.
------------------------------------------------------------------
MPI_ALLTOALL(sendbuf, sendcount, sendtype, recvbuf,
recvcount, recvtype, comm)
------------------------------------------------------------------
| IN | sendbuf | Стартовый адрес буфера передачи (по выбору) | ||||
| IN | sendcount | Количество элементов в буфере передачи (целое) | ||||
| IN | sendtype | Тип данных элементов буфера передачи (указатель) | ||||
| OUT | recvbuf | Адрес буфера приема (по выбору) | ||||
| IN | recvcount | Количество элементов, принимаемых от любого процесса (целое) | ||||
| IN | recvtype | Тип данных элементов буфера приема (указатель) | ||||
| IN | comm | Коммуникатор (указатель) |
void MPI::Comm::Alltoall(const void* sendbuf, int sendcount,
const MPI::Datatype& sendtype,
void* recvbuf, int recvcount,
const MPI::Datatype& recvtype)
const = 0
Опция in-place - не поддерживается.
Если comm - интеркоммуникатор, то результатом результатом вызова
будет посылка каждым процессом из группы A сообщения каждому
процессу из группы B, и наоборот.
-й буфер передачи процесса
из
группы A должен быть совместим с
-м буфером приема процесса
из группы
B, и наоборот.
Совет пользователям:
Когда выполняется all-to-all в интеркоммуникационном домене, число
элементов, посылаемых процессами из группы A процессам из группы
B, не обязательно должно совпадать с числом элементов, посылаемых в
обратном направлении. В частности, мы можем иметь однонаправленные
коммуникации, указав sendcount = 0 в обратном направлении.
[]
------------------------------------------------------------------
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 | Коммуникатор (указатель) |
void MPI::Comm::Alltoallv(const void* sendbuf,
const int sendcounts[],
const int sdispls[],
const MPI::Datatype& sendtype,
void* recvbuf,
const int recvcounts[],
const int rdispls[],
const MPI::Datatype& recvtype)
const = 0
Опция in-place - не поддерживается.
Если comm - интеркоммуникатор, то результатом будет посылка каждым
процессом из группы A сообщения каждому процессу из группы
B, и наоборот.
-й буфер передачи процесса
из группы
A должен быть совместим с
-ым буфером приема процесса
из
группы B, и наоборот.
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |