Коллективные операции
Широковещательная рассылка данных
Функции сбора блоков данных от всех процессов группы
Функции сбора блоков данных от всех процессов группы
Функции сбора блоков данных от всех процессов группы
Функции распределения блоков данных по всем процессам группы
Функции распределения блоков данных по всем процессам группы
Совмещенные коллективные операции
Глобальные вычислительные операции над распределенными данными
Глобальные вычислительные операции над распределенными данными
Глобальные вычислительные операции над распределенными данными
Глобальные вычислительные операции над распределенными данными
Глобальные вычислительные операции над распределенными данными
1.57M
Категория: ПрограммированиеПрограммирование

Коллективные операции MPI

1.

2. Коллективные операции

Необходимы для общего взаимодействия и
синхронизации процессов.
Функция общей синхронизации:
int MPI_Barrier(MPI_Comm comm)

3. Широковещательная рассылка данных

int MPI_Bcast(void* buffer, int count, MPI_Datatype
datatype, int root, MPI_Comm comm)
buffer
count
buffer
Все процессы
count
Процесс 0
buffer

count
Процесс root
buffer

count
Процесс n-1
Рис. 1. Схема взаимодействия

4. Функции сбора блоков данных от всех процессов группы

int MPI_Gather(void* sendbuf, int sendcount,
MPI_Datatype sendtype, void* recvbuf, int recvcount,
MPI_Datatype recvtype, int root, MPI_Comm comm)
sendbuffer
Все процессы
sendbuffer
a1
sendcount
Процесс root
sendbuffer
a2
… sendcount

a3
sendcount
recvbuffer
recvbuffer
recvbuffer
a1
a2
a3
recvcount
recvcount
recvcount
Рис. 2. Схема взаимодействия

5. Функции сбора блоков данных от всех процессов группы

int MPI_Allgather(void* sendbuf, int sendcount,
MPI_Datatype sendtype, void* recvbuf, int recvcount,
MPI_Datatype
recvtype,recvbuffer
MPI_Comm
comm)
sendbuffer
recvbuffer
recvbuffer
Процесс 0
Процесс 1

Процесс n-1
a0
sendcount
sendbuffer
a0
recvcount
recvbuffer
a1
recvcount
recvbuffer
a1
a0
a1
sendcount
recvcount
recvcount
sendbuffer
recvbuffer
recvbuffer
an-1
a0
a1
sendcount
recvcount
recvcount


an-1
recvcount
recvbuffer
an-1
recvcount
recvbuffer

Рис. 3. Схема взаимодействия
an-1
recvcount

6. Функции сбора блоков данных от всех процессов группы

int MPI_Gatherv(void* sendbuf, int sendcount, MPI_Datatype
sendtype, void* rbuf, int *recvcounts, int *displs,
MPI_Datatype recvtype, int root, MPI_Comm comm)
sendbuffer
Все процессы
a0
sendcount[0]
recvbuffer
Процесс root
a0
recvcounts[0]
sendbuffer


ap
sendcount[p]
recvbuffer
ap
recvcounts[p]
sendbuffer


an-1
sendcount[n-1]
recvbuffer
displs[p]
Рис. 4. Схема взаимодействия
an-1
recvcounts[n-1]

7. Функции распределения блоков данных по всем процессам группы

int MPI_Scatter(void* sendbuf, int sendcount, MPI_Datatype
sendtype, void* recvbuf, int recvcount, MPI_Datatype
recvtype, int root, MPI_Comm comm)
sendbuffer
Процесс root
sendbuffer
a1
a2
a3
sendcount
sendcount
sendcount
recvbuffer
Все процессы
sendbuffer
a1
recvcount
recvbuffer
recvbuffer
a
a
… recvcount
… recvcount
2
Рис. 5. Схема взаимодействия
3

8. Функции распределения блоков данных по всем процессам группы

int MPI_Scatterv(void* sendbuf, int *sendcounts, int *displs,
MPI_Datatype sendtype, void* recvbuf, int recvcount,
MPI_Datatype recvtype, int root, MPI_Comm comm)
sendbuffer
Процесс root
a0
sendcounts[0]

sendbuffer
ap
sendcounts[p]

sendbuffer
an-1
sendcounts[n-1]
displs[p]
recvbuffer
Все процессы
a0
recvcount[0]
recvbuffer

ap
recvcount[p]
recvbuffer

Рис. 6. Схема взаимодействия
an-1
recvcount[n-1]

9. Совмещенные коллективные операции

int MPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype
sendtype, void* recvbuf, int recvcount, MPI_Datatype
recvtype,
MPI_Comm comm)
sendbuffer
recvbuffer
Процесс 0
a0
b0
… c0
sendbuffer
Процесс 1

Процесс n-1
a1
b1
bn-1
a1
… an-1
recvbuffer
… c
1
b0
b1
…b
n-1

sendbuffer
an-1
a0
recvbuffer
…c
n-1
c0
c1
Рис. 7. Схема взаимодействия
…c
n-1

10. Глобальные вычислительные операции над распределенными данными

int MPI_Reduce(void* sendbuf, void* recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, int root,
MPI_Comm comm)
sendbuffer
Процесс 0
a0
b0
… c
0
sendbuffer
Процесс 1

Процесс n-1
a1
b1

c1
recvbuffer
a0+a1+… b0+b1+…
sendbuffer
an-1
bn-1
…c
n-1
Рис. 8. Схема взаимодействия
… c +c
0
1+…

11. Глобальные вычислительные операции над распределенными данными

Название
Операция
MPI_MAX
Максимум
MPI_MIN
Минимум
MPI_SUM
Сумма
MPI_PROD
Произведение
MPI_LAND
Логическое И
MPI_LOR
Логическое ИЛИ
MPI_LXOR
Логическое исключающее ИЛИ
MPI_BAND
Поразрядное И
MPI_BOR
Поразрядное ИЛИ
MPI_BXOR
Поразрядное исключающее ИЛИ
MPI_MAXLOC
Максимальное значение и его индекс
MPI_MINLOC
Максимальное значение и его индекс

12. Глобальные вычислительные операции над распределенными данными

int MPI_Allreduce(void* sendbuf, void* recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
recvbuffer
sendbuffer
Процесс 0
a0
b0
… c
0

Процесс n-1
a1
b1
… c
1
bn-1
0
1+…
a0+a1+… b0+b1+…
… c +c
1+…
0

sendbuffer
an-1
… c +c
recvbuffer
sendbuffer
Процесс 1
a0+a1+… b0+b1+…
recvbuffer
…c
n-1
a0+a1+… b0+b1+…
Рис. 9. Схема взаимодействия
… c +c
0
1+…

13. Глобальные вычислительные операции над распределенными данными

int MPI_Reduce_scatter(void* sendbuf, void* recvbuf, int
*recvcounts, MPI_Datatype datatype, MPI_Op op,
MPI_Comm comm)
recvbuffer
sendbuffer
a0
Процесс 0
b0
… c
0
recvbuffer
sendbuffer
a1
Процесс 1

b1
… c
1
an-1
bn-1
b0+b1+… bn-1

recvbuffer
sendbuffer
Процесс n-1
a0+a1+…an-1
…c
n-1
c0+c1+… an-1
Рис. 10. Схема взаимодействия

14. Глобальные вычислительные операции над распределенными данными

int MPI_Scan(void* sendbuf, void* recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
recvbuffer
sendbuffer
Процесс 0
a0
b0
… c
0

Процесс n-1
a1
b1
… c
1
bn-1

c0
a0+a1
b0+b1

c0+c1

sendbuffer
an-1
b0
recvbuffer
sendbuffer
Процесс 1
a0
recvbuffer
…c
n-1
a0+a1+… b0+b1+…
Рис. 11. Схема взаимодействия
… c +c
0
1+…
English     Русский Правила