Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lecture-6_1.ppt
Скачиваний:
0
Добавлен:
11.06.2024
Размер:
267.78 Кб
Скачать

2.2 Коллективные операции рассылки-сборки данных 2.2.1 Коллективная операция рассылки данных

MPI_BCAST

(BUF,COUNT,DATATYPE,ROOT,COMM,IERR)

INTEGER

COUNT,DATATYPE,ROOT,COMM,IERR

BUF

- буфер рассылки

COUNT

- состоящий из COUNT элементов

DATATYPE

- типа DATATYPE

ROOT

- номер рассылающего процесса из коммуникатора COMM

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

 

Данные

 

Процессы

А0

А0

 

 

А0

 

Broadcast

А0

 

 

А0

 

 

А0

 

 

А0

Свойства коллективной операции BroadCast рассылки данных

При возврате из операции буфер BUF процесса ROOT будет скопирован в локальные буфера всех процессов коммуникатора COMM

BUF,COUNT,DATATYPE,ROOT – должны быть одинаковы у всех процессов, иначе ошибка

Пример.

CALL MPI_BCAST(BUF,100,MPI_INTEGER,2, MPI_COMM_WORLD, IERR)

2.2.2 Коллективная операция рассылки данных c разборкой

MPI_SСATTER

(SBUF,SCOUNT,STYPE, RBUF,RCOUNT,RTYPE,ROOT,COMM,IERR)

INTEGER

SCOUNT,STYPE, RCOUNT,RTYPE,ROOT,COMM,IERR

SBUF

- буфер рассылки

SCOUNT

- состоящий из SCOUNT элементов

STYPE

- типа STYPE

RBUF

- буфер приема

RCOUNT

- состоящий из RCOUNT элементов

RTYPE

- типа RTYPE

ROOT

- номер рассылающего процесса из коммуникатора COMM

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

 

Данные

 

 

 

 

Процессы

А0

А1

А2

А3

А4

А5

 

А0

 

А1

Scatter

А2

 

А3

 

А4

 

А5

Свойства коллективной операции Scatter рассылки данных с разборкой

При возврате из операции части буфера SBUF по SCOUNT элементов процесса ROOT будут скопированы в локальные буфера RBUF всех процессов (в том числе и процесса ROOT) коммуникатора COMM

На процессе ROOT – существенны все параметры операции

На остальных процессах существенны только RBUF,RCOUNT,RTYPE,ROOT,COMM

ROOT – должен быть одинаков у всех процессов

SCOUNT должен быть равен RCOUNT во всех процессах, иначе ошибка

Преобразование типов допускается

Пример. Рассылка столбцов матрицы.

REAL SBUF (SIZE,SIZE), RBUF (SIZE)

IF (RANK .EQ. 0) THEN DO j = 1, SIZE

DO i = 1, SIZE

SBUF(i, j) = 100.0*i + j ENDDO

ENDDO

ENDIF

CALL MPI_SCATTER(SBUF,SIZE,MPI_REAL, RBUF,SIZE,MPI_REAL,0, MPI_COMM_WORLD,IERR)

2.2.3 Коллективная операция сборки данных (обратная к Scatter)

MPI_GATHER

(SBUF,SCOUNT,STYPE, RBUF,RCOUNT,RTYPE,ROOT,COMM,IERR)

INTEGER

SCOUNT,STYPE, RCOUNT,RTYPE,ROOT,COMM,IERR

SBUF

- буфер рассылки

SCOUNT

- состоящий из SCOUNT элементов

STYPE

- типа STYPE

RBUF

- буфер приема

RCOUNT

- состоящий из RCOUNT элементов

RTYPE

- типа RTYPE

ROOT

- номер принимающего процесса из коммуникатора COMM

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

 

Данные

 

 

 

 

Процессы

А0

А1

А2

А3

А4

А5

 

А0

 

А1

Gather

А2

 

А3

 

А4

 

А5

Свойства коллективной операции Gather сборки данных

При возврате из операции локальные буфера SBUF по SCOUNT элементов всех процессов (в том числе и процесса ROOT) будут скопированы в буфер RBUF процесса ROOT коммуникатора COMM

Принятые в процессе ROOT данные записываются RBUF в порядке номеров процессов

На процессе ROOT – существенны все параметры операции

На остальных процессах существенны только SBUF,SCOUNT,STYPE,ROOT,COMM

ROOT – должен быть одинаков у всех процессов

SCOUNT должен быть равен RCOUNT во всех процессах, иначе ошибка

Преобразование типов допускается

Пример. Сбор столбцов матрицы.

REAL RBUF (SIZE,SIZE), SBUF (SIZE)

DO i = 1, SIZE

SBUF(i) = 100.0 * i

ENDDO

CALL MPI_GATHER(SBUF,SIZE,MPI_REAL, RBUF,SIZE,MPI_REAL,0, MPI_COMM_WORLD,IERR)

2.2.4. Коллективные операции сборки-разборки данных переменной длины

MPI_SСATTERV (SBUF,SCOUNTS,DISPLS,STYPE, RBUF,RCOUNT,RTYPE,ROOT,COMM,IERR)

INTEGER SCOUNTS(*),STYPE, DISPLS(*), RCOUNT,RTYPE,ROOT,COMM,IERR

SCOUNTS(*) – целочисленный массив, SCOUNTS(i) - количество элементов, передаваемых процессу i -1.

DISPLS(*) - целочисленный массив, DISPLS(i) – смещения относительно друг друга данных, передаваемых процессу i -1

MPI_GATHERV (SBUF,SCOUNT,STYPE,

RBUF,RCOUNTS, DISPLS,RTYPE,ROOT,COMM,IERR)

INTEGER SCOUNT,STYPE, RCOUNTS(*), DISPLS(*),RTYPE,ROOT,COMM,IERR

50 SBUF:

50

RBUF:

47

100

SCOUNT

 

 

 

 

Пример сборки данных

 

 

 

переменной длины SCOUNT

47

 

100

и размещения их

 

 

 

с переменным шагом DISPLS

DISPLS

2.2.5 Коллективная операция сборки данных “все от всех”

MPI_ALLGATHER (SBUF,SCOUNT,STYPE, RBUF,RCOUNT,RTYPE,COMM,IERR)

INTEGER

SCOUNT,STYPE, RCOUNT,RTYPE,ROOT,COMM,IERR

SBUF

- буфер рассылки

SCOUNT

- состоящий из SCOUNT элементов

STYPE

- типа STYPE

RBUF

- буфер приема

RCOUNT

- состоящий из RCOUNT элементов

RTYPE

- типа RTYPE

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

Нет корневого процесса ROOT !

 

 

 

 

 

 

 

 

Данные

 

 

 

 

 

 

 

Процессы

А0

 

А0

B0

C0

D0

E0

F0

 

B0

 

А0

B0

C0

D0

E0

F0

 

C0

AllGather

А0

B0

C0

D0

E0

F0

 

D0

А0

B0

C0

D0

E0

F0

 

 

 

E0

 

А0

B0

C0

D0

E0

F0

 

F0

 

А0

B0

C0

D0

E0

F0

Свойства коллективной операции ALLGather сборки данных “все от всех”

При возврате из операции локальные буфера SBUF по SCOUNT элементов со всех процессов будут скопированы в буфер RBUF каждого процесса коммуникатора COMM.

Принятые данные записываются в RBUF в порядке номеров процессов (блок данных, посланных процессом i-1 , размещается блоке i буфера RBUF)

SCOUNT должен быть равен RCOUNT во всех процессах, иначе ошибка

Преобразование типов допускается

Может рассматриваться, как MPI_GATHER, при выполнении которой результат получается во всех процессах коммуникатора COMM

2.2.5 Коллективная операция полного обмена данными “все со всеми”

MPI_ALLTOALL

(SBUF,SCOUNT,STYPE, RBUF,RCOUNT,RTYPE,COMM,IERR)

INTEGER

SCOUNT,STYPE, RCOUNT,RTYPE,ROOT,COMM,IERR

SBUF

- буфер рассылки

SCOUNT

- состоящий из SCOUNT элементов

STYPE

- типа STYPE

RBUF

- буфер приема

RCOUNT

- состоящий из RCOUNT элементов

RTYPE

- типа RTYPE

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

Нет корневого процесса ROOT ! Данные

Процессы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А0

 

A1

 

A2

 

A3

 

A4

 

A5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B0

 

B1

 

B2

 

B3

 

B4

 

B5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C0

 

C1

 

C2

 

C3

 

C4

 

C5

 

AllToAll

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D0

 

D1

 

D2

 

D3

 

D4

 

D5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E0

 

E1

 

E2

 

E3

 

E4

 

E5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F0

 

F1

 

F2

 

F3

 

F4

 

F5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А0

B0

C0

D0

E0

F0

 

 

 

 

 

 

 

 

 

 

А1

B1

C1

D1

E1

F1

 

 

 

 

 

 

 

 

А2

B2

C2

D2

E2

F2

 

 

 

 

 

 

 

 

 

А3

B3

C3

D3

E3

F3

 

 

 

 

 

 

 

 

 

А4

B4

C4

D4

E4

F4

 

 

 

 

 

 

 

 

 

А5

B5

C5

D5

E5

F5

 

 

 

 

 

 

 

 

Соседние файлы в папке Лекции