Похожие презентации:
Коллективные операции MPI
1.
2. Коллективные операции
Необходимы для общего взаимодействия исинхронизации процессов.
Функция общей синхронизации:
int MPI_Barrier(MPI_Comm comm)
3. Широковещательная рассылка данных
int MPI_Bcast(void* buffer, int count, MPI_Datatypedatatype, 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_Datatypesendtype, 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_Datatypesendtype, 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_Datatypesendtype, 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+…