E N D
Параллельные вычисления Лекция № 7Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SPMD модель параллельного программирования. 3. Группа процессов в коммуникаторе. 4. Передача/прием сообщений между отдельными процессами
MPI MPI_ISEND(BUF, COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST, IERR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST, IERR Неблокирующая посылка сообщения. Возврат из функциипроисходит сразу после инициализации передачи.Переменная REQUEST идентифицирует пересылку.
MPI Модификации функции MPI_ISEND: MPI_IBSEND —передача сообщения с буферизацией. MPI_ISSEND —передача сообщения с синхронизацией. MPI_IRSEND —передача сообщения по готовности.
MPI MPI_IRECV(BUF, COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERR) <type> BUF(*) INTEGER COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERR Неблокирующий прием сообщения. Возврат из функциипроисходит сразу после инициализации передачи.Переменная REQUEST идентифицирует пересылку.
MPI Сообщение, отправленное любой из функций MPI_SEND, MPI_ISEND и любой из трех их модификаций, может быть принято любой из процедур MPI_RECV и MPI_IRECV. До завершения неблокирующей операции неследует записывать в используемый массив данных!
MPI MPI_IPROBE(SOURCE, MSGTAG, COMM, FLAG, STATUS, IERR) LOGICAL FLAG INTEGER SOURCE, MSGTAG, COMM, IERR, STATUS(MPI_STATUS_SIZE) Получение информации о структуре ожидаемого сообщения без блокировки.FLAG возвращает значение.TRUE., если сообщение с подходящими атрибутами уже может быть принято.
MPI MPI_WAIT(REQUEST, STATUS, IERR) INTEGER REQUEST, IERR, STATUS(MPI_STATUS_SIZE) Ожидание завершения асинхронной операции, ассоциированной с идентификатором REQUEST. Для неблокирующего приема определяется параметр STATUS.REQUESTустанавливается в значение MPI_REQUEST_NULL.
MPI MPI_WAITALL(COUNT, REQUESTS, STATUSES, IERR) INTEGER COUNT, REQUESTS(*), STATUSES(MPI_STATUS_SIZE,*), IERR Ожидание завершенияCOUNT асинхронных операций, ассоциированных с идентификаторамиREQUESTS. Для неблокирующих приемов определяются параметры в массиве STATUSES.
MPI prev = rank - 1 next = rank + 1 if (rank .eq. 0) prev = numtasks - 1 if (rank .eq. numtasks - 1)next = 0 call MPI_IRECV(buf(1), 1, MPI_INTEGER, & prev, tag1, MPI_COMM_WORLD, reqs(1), & ierr) call MPI_IRECV(buf(2), 1, MPI_INTEGER, & next, tag2, MPI_COMM_WORLD, reqs(2), & ierr)
MPI call MPI_ISEND(rank, 1, MPI_INTEGER, & prev, tag2, MPI_COMM_WORLD, reqs(3), & ierr) call MPI_ISEND(rank, 1, MPI_INTEGER, & next, tag1, MPI_COMM_WORLD, reqs(4), & ierr) call MPI_WAITALL(4, reqs, stats, ierr);
MPI MPI_WAITANY(COUNT, REQUESTS, INDEX, STATUS, IERR) INTEGER COUNT, REQUESTS(*), INDEX, STATUS(MPI_STATUS_SIZE), IERR Ожидание завершенияодной из COUNT асинхронных операций, ассоциированных с идентификаторамиREQUESTS. Для неблокирующего приема определяется параметр STATUS.
MPI Если к моменту вызова завершились несколько из ожидаемых операций, то случайным образом будет выбрана одна из них. Параметр INDEXсодержит номер элемента в массиве REQUESTS, содержащего идентификатор завершенной операции.
MPI MPI_WAITSOME(INCOUNT, REQUESTS, OUTCOUNT, INDEXES, STATUSES, IERR) INTEGER INCOUNT, REQUESTS(*), OUTCOUNT, INDEXES(*), IERR, STATUSES(MPI_STATUS_SIZE,*) Ожидание завершенияхотя бы одной из INCOUNT асинхронных операций, ассоциированных с идентификаторамиREQUESTS.
MPI Параметр OUTCOUNTсодержит число завершенных операций, а первые OUTCOUNTэлементов массива INDEXES содержат номера элементов массива REQUESTSс их идентификаторами. Первые OUTCOUNT элементов массива STATUSES содержат параметры завершенных операций (для неблокирующих приемов).
MPI MPI_TEST(REQUEST, FLAG, STATUS, IERR) LOGICAL FLAG INTEGER REQUEST, IERR, STATUS(MPI_STATUS_SIZE) Проверка завершенности асинхронной операции, ассоциированной с идентификатором REQUEST. В параметре FLAG возвращается значение .TRUE.,если операция завершена.
MPI MPI_TESTALL(COUNT, REQUESTS, FLAG, STATUSES, IERR) LOGICAL FLAG INTEGER COUNT, REQUESTS(*), STATUSES(MPI_STATUS_SIZE,*), IERR Проверка завершенностиCOUNT асинхронных операций, ассоциированных с идентификаторамиREQUESTS.
MPI MPI_TESTANY(COUNT, REQUESTS, INDEX, FLAG, STATUS, IERR) LOGICAL FLAG INTEGER COUNT, REQUESTS(*), INDEX, STATUS(MPI_STATUS_SIZE), IERR В параметре FLAG возвращается значение .TRUE.,еслихотя бы одна из операций асинхронного обмена завершена.
MPI MPI_TESTSOME(INCOUNT, REQUESTS, OUTCOUNT, INDEXES, STATUSES, IERR) INTEGER INCOUNT, REQUESTS(*), OUTCOUNT, INDEXES(*), IERR, STATUSES(MPI_STATUS_SIZE,*) АналогMPI_WAITSOME,но возврат происходит немедленно. Если ни одна из операций не завершилась, то значение OUTCOUNT будет равно нулю.