Введение в параллельные вычисления. Технология программирования MPI (день четвертый)

Содержание

Слайд 2

MPI

MPI_SEND_INIT(BUF, COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST, IERR)
BUF(*)
INTEGER COUNT, DATATYPE, DEST,

MPI MPI_SEND_INIT(BUF, COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST, IERR) BUF(*) INTEGER COUNT,
MSGTAG, COMM, REQUEST, IERR
Формирование отложенного запроса на посылку сообщения. Сама операция пересылки не начинается!

Слайд 3

MPI

Модификации функции MPI_SEND_INIT:
MPI_BSEND_INIT — формирование запроса на передачу сообщения с буферизацией.
MPI_SSEND_INIT —  формирование

MPI Модификации функции MPI_SEND_INIT: MPI_BSEND_INIT — формирование запроса на передачу сообщения с
запроса на передачу сообщения с синхронизацией.
MPI_RSEND_INIT —  формирование запроса на передачу сообщения по готовности.

Слайд 4

MPI

MPI_RECV_INIT(BUF, COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERR)
BUF(*)
INTEGER COUNT, DATATYPE, SOURCE,

MPI MPI_RECV_INIT(BUF, COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERR) BUF(*) INTEGER COUNT,
MSGTAG, COMM, REQUEST, IERR
Формирование отложенного запроса на прием сообщения. Сама операция приема не начинается!

Слайд 5

MPI

MPI_START(REQUEST, IERR)
INTEGER REQUEST, IERR
Инициализация отложенного запроса на выполнение операции обмена, соответствующей значению

MPI MPI_START(REQUEST, IERR) INTEGER REQUEST, IERR Инициализация отложенного запроса на выполнение операции
параметра REQUEST. Операция запускается как неблокирующая.

Слайд 6

MPI

MPI_STARTALL(COUNT, REQUESTS, IERR)
INTEGER COUNT, REQUESTS, IERR
Инициализация COUNT отложенных запросов на выполнение операций

MPI MPI_STARTALL(COUNT, REQUESTS, IERR) INTEGER COUNT, REQUESTS, IERR Инициализация COUNT отложенных запросов
обмена, соответствующих значениям первых COUNT элементов массива REQUESTS. Операции запускаются как неблокирующие.

Слайд 7

MPI

Сообщение, отправленное при помощи отложенного запроса, может быть принято любой из процедур

MPI Сообщение, отправленное при помощи отложенного запроса, может быть принято любой из
MPI_RECV и MPI_IRECV, и наоборот.
По завершении отложенного запроса значение параметра REQUEST (REQUESTS) сохраняется и может использоваться в дальнейшем!

Слайд 8

MPI

MPI_REQUEST_FREE(REQUEST, IERR)
INTEGER REQUEST, IERR
Удаляет структуры данных, связанные с параметром REQUEST. REQUEST устанавливается

MPI MPI_REQUEST_FREE(REQUEST, IERR) INTEGER REQUEST, IERR Удаляет структуры данных, связанные с параметром
в значение MPI_REQUEST_NULL. Если операция, связанная с этим запросом, уже выполняется, то она завершится.

Слайд 9

MPI

prev = rank - 1
next = rank + 1
if (rank .eq. 0)

MPI prev = rank - 1 next = rank + 1 if
prev = numtasks - 1
if (rank .eq. numtasks - 1) next = 0
call MPI_RECV_INIT(rbuf(1), 1,
& MPI_REAL, prev, tag1,
& MPI_COMM_WORLD, reqs(1), ierr)
call MPI_RECV_INIT(rbuf(2), 1,
& MPI_REAL, next, tag2,
& MPI_COMM_WORLD, reqs(2), ierr)
call MPI_SEND_INIT(sbuf(1), 1,
& MPI_REAL, prev, tag2,
& MPI_COMM_WORLD, reqs(3), ierr)

Слайд 10

MPI

call MPI_SEND_INIT(sbuf(2), 1,
& MPI_REAL, next, tag1,
& MPI_COMM_WORLD, reqs(4), ierr)

MPI call MPI_SEND_INIT(sbuf(2), 1, & MPI_REAL, next, tag1, & MPI_COMM_WORLD, reqs(4), ierr)
do i=...
sbuf(1)=...
sbuf(2)=...
call MPI_STARTALL(4, reqs, ierr)
...
call MPI_WAITALL(4, reqs, stats,
& ierr);
...
end do

Слайд 11

MPI

Тупиковые ситуации (deadlock):

процесс 0:
RECV(1)
SEND(1)

процесс 1:
RECV(0)
SEND(0)

процесс 0:
SEND(1)
RECV(1)

процесс 1:
SEND(0)
RECV(0)

MPI Тупиковые ситуации (deadlock): процесс 0: RECV(1) SEND(1) процесс 1: RECV(0) SEND(0)

Слайд 12

MPI

Разрешение тупиковых ситуаций:
1.

процесс 0:
SEND(1)
RECV(1)

процесс 1:
RECV(0)
SEND(0)

2. Использование неблокирующих операций
3. Использование функции MPI_SENDRECV

MPI Разрешение тупиковых ситуаций: 1. процесс 0: SEND(1) RECV(1) процесс 1: RECV(0)

Слайд 13

MPI

MPI_SENDRECV(SBUF, SCOUNT, STYPE, DEST, STAG, RBUF, RCOUNT, RTYPE, SOURCE, RTAG, COMM, STATUS,

MPI MPI_SENDRECV(SBUF, SCOUNT, STYPE, DEST, STAG, RBUF, RCOUNT, RTYPE, SOURCE, RTAG, COMM,
IERR)
SBUF(*), RBUF(*)
INTEGER SCOUNT, STYPE, DEST, STAG, RCOUNT, RTYPE, SOURCE, RTAG, COMM, STATUS(MPI_STATUS_SIZE), IERR

Слайд 14

MPI

Совмещенные прием и передача сообщений с блокировкой. Буферы передачи и приема не

MPI Совмещенные прием и передача сообщений с блокировкой. Буферы передачи и приема
должны пересекаться. Тупиковой ситуации не возникает!
Сообщение, отправленное операцией MPI_SENDRECV, может быть принято обычным образом, и операция MPI_SENDRECV может принять сообщение, отправленное обычной операцией.

Слайд 15

MPI

MPI_SENDRECV_REPLACE(BUF, COUNT, DATATYPE, DEST, STAG, SOURCE, RTAG, COMM, STATUS, IERR)
BUF(*)
INTEGER COUNT,

MPI MPI_SENDRECV_REPLACE(BUF, COUNT, DATATYPE, DEST, STAG, SOURCE, RTAG, COMM, STATUS, IERR) BUF(*)
DATATYPE, DEST, STAG, SOURCE, RTAG, COMM, STATUS(MPI_STATUS_SIZE), IERR
Совмещенные прием и передача сообщений с блокировкой через общий буфер BUF.

Слайд 16

MPI

prev = rank - 1
next = rank + 1
if (rank .eq. 0)

MPI prev = rank - 1 next = rank + 1 if
prev = numtasks - 1
if (rank .eq. numtasks - 1) next = 0
call MPI_SENDRECV(
& sbuf(1), 1, MPI_REAL, prev, tag2,
& rbuf(1), 1, MPI_REAL, next, tag2,
& MPI_COMM_WORLD, status1, ierr)
call MPI_SENDRECV(
& sbuf(2), 1, MPI_REAL, next, tag1,
& rbuf(2), 1, MPI_REAL, prev, tag1,
& MPI_COMM_WORLD, status1, ierr)

Слайд 17

MPI

MPI_BARRIER(COMM, IERR)
INTEGER COMM, IERR
Работа процессов блокируется до тех пор, пока все оставшиеся

MPI MPI_BARRIER(COMM, IERR) INTEGER COMM, IERR Работа процессов блокируется до тех пор,
процессы коммуникатора COMM не выполнят эту процедуру. Все процессы должны вызвать MPI_BARRIER, хотя реально исполненные вызовы различными процессами коммуникатора могут быть расположены в разных местах программы.

Слайд 18

MPI

Специальное значение MPI_PROC_NULL для несуществующего процесса. Операции с таким процессом завершаются немедленно

MPI Специальное значение MPI_PROC_NULL для несуществующего процесса. Операции с таким процессом завершаются
с кодом завершения MPI_SUCCESS.
next=rank+1
if(rank .EQ. size-1) next=MPI_PROC_NULL
call MPI_SEND (buf, 1, MPI_REAL, next,
& tag, MPI_COMM_WORLD, ierr)
Имя файла: Введение-в-параллельные-вычисления.-Технология-программирования-MPI-(день-четвертый).pptx
Количество просмотров: 107
Количество скачиваний: 0