Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемГлеб Долматов
1 Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного программирования. 3. Группа процессов в коммуникаторе. 4. Передача/прием сообщений между отдельными процессами Параллельные вычисления
2 MPI MPI - Message Passing Interface, интерфейс передачи сообщений. Стандарт MPI 1.1 : Более 120 функций. Префикс MPI_; include mpif.h SIMD-модель параллельного программирования. Процессы, посылка сообщений внутри группы процессов. Группы процессов, коммуникаторы. MPI_COMM_WORLD Каждый процесс может одновременно входить в разные коммуникаторы. Два основных атрибута процесса: коммуникатор (группа) и номер процесса в коммуникаторе (группе), от 0 до n – 1.
3 MPI Сообщение набор данных некоторого типа. Атрибуты сообщения: номер процесса-отправителя, номер процесса-получателя, идентификатор сообщения и др. Идентификатор сообщения - целое неотрицательное число в диапазоне от 0 до Для работы с атрибутами сообщений введен массив MPI_STATUS. В последнем аргументе (в Си – возвращаемое значение функции) большинство функций MPI возвращают информацию об успешности завершения. В случае успешного выполнения функция вернет значение MPI_SUCCESS, иначе код ошибки. Предопределенные значения, соответствующие различным ошибочным ситуациям, определены в файле mpif.h
4 MPI MPI_INIT(IERR) INTEGER IERR Инициализация параллельной части программы. Все другие функции MPI могут быть вызваны только после вызова MPI_INIT. Инициализация параллельной части для каждого приложения должна выполняться только один раз.
5 MPI MPI_FINALIZE(IERR) INTEGER IERR Завершение параллельной части приложения. Все последующие обращения к любым MPI- функциям, в том числе к MPI_INIT, запрещены. К моменту вызова MPI_FINALIZE каждым процессом программы все действия, требующие его участия в обмене сообщениями, должны быть завершены.
6 MPI Общая схема MPI-программы: PROGRAM EXAMPLE INCLUDE mpif.h INTEGER IERR … CALL MPI_INIT(IERR) … CALL MPI_FINALIZE(IERR) … END
7 MPI MPI_INITIALIZED(FLAG, IERR) LOGICAL FLAG INTEGER IERR В аргументе FLAG возвращает.TRUE., если вызвана из параллельной части приложения, и.FALSE. в противном случае. Единственная MPI-функция, которую можно вызвать до вызова MPI_INIT.
8 MPI MPI_COMM_SIZE(COMM, SIZE, IERR) INTEGER COMM, SIZE, IERR В аргументе SIZE возвращает число параллельных процессов в коммуникаторе COMM. MPI_COMM_RANK(COMM, RANK, IERR) INTEGER COMM, RANK, IERR В аргументе RANK возвращает номер процесса в коммуникаторе COMM в диапазоне от 0 до SIZE-1.
9 MPI DOUBLE PRECISION MPI_WTIME(IERR) INTEGER IERR Функция возвращает для каждого вызвавшего процесса астрономическое время в секундах (вещественное число), прошедшее с некоторого момента в прошлом. DOUBLE PRECISION MPI_WTICK(IERR) INTEGER IERR Функция возвращает разрешение таймера в секундах.
10 MPI PROGRAM EXAMPLE INCLUDE mpif.h INTEGER IERR, SIZE, RANK CALL MPI_INIT(IERR) CALL MPI_COMM_SIZE(MPI_COMM_WORLD, SIZE, & IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD, RANK, & IERR) PRINT *, PROCESS, RANK, SIZE, SIZE CALL MPI_FINALIZE(IERR) END
11 MPI MPI_SEND(BUF, COUNT, DATATYPE, DEST, MSGTAG, COMM, IERR) BUF(*) INTEGER COUNT, DATATYPE, DEST, MSGTAG, COMM, IERR Блокирующая посылка массива BUF с идентификатором MSGTAG, состоящего из COUNT элементов типа DATATYPE, процессу с номером DEST в коммуникаторе COMM.
12 MPI Модификации функции MPI_SEND: MPI_BSEND передача сообщения с буферизацией (не блокирующее!). MPI_SSEND передача сообщения с синхронизацией. MPI_RSEND передача сообщения по готовности.
13 MPI MPI_BUFFER_ATTACH(BUF, SIZE, IERR) BUF(*) INTEGER SIZE, IERR Назначение массива BUF размера SIZE для использования при посылке сообщений с буферизацией. В каждом процессе может быть только один такой буфер.
14 MPI MPI_BUFFER_DETACH(BUF, SIZE, IERR) BUF(*) INTEGER SIZE, IERR Освобождение массива BUF для других целей. Процесс блокируется до того момента, когда все сообщения уйдут из данного буфера.
15 MPI MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, MSGTAG, COMM, STATUS, IERR) BUF(*) INTEGER COUNT, DATATYPE, SOURCE, MSGTAG, COMM, IERR, STATUS(MPI_STATUS_SIZE) Блокирующий прием сообщения длины не более COUNT от процесс а с номером SOURCE с заполнением массива STATUS.
16 MPI Вместо аргументов SOURCE и MSGTAG можно использовать константы: MPI_ANY_SOURCE признак того, что подходит сообщение от любого процесса MPI_ANY_TAG признак того, что подходит сообщение с любым идентификатором.
17 MPI Параметры принятого сообщения всегда можно определить по соответствующим элементам массива STATUS : STATUS(MPI_SOURCE) номер процесса-отправителя. STATUS(MPI_TAG) идентификатор сообщения. STATUS(MPI_ERROR) код ошибки.
18 MPI Если один процесс последовательно посылает два сообщения, соответствующие одному и тому же вызову MPI_RECV, другому процессу, то первым будет принято сообщение, которое было отправлено раньше. Если два сообщения были одновременно отправлены разными процессами, то порядок их получения принимающим процессом заранее не определен.
19 MPI MPI_GET_COUNT(STATUS, DATATYPE, COUNT, IERR) INTEGER COUNT, DATATYPE, IERR, STATUS(MPI_STATUS_SIZE) По значению параметра STATUS функция определяет число COUNT уже принятых (после обращения к MPI_RECV) или принимаемых (после обращения к MPI_PROBE или MPI_IPROBE) элементов сообщения типа DATATYPE.
20 MPI MPI_PROBE(SOURCE, MSGTAG, COMM, STATUS, IERR) INTEGER SOURCE, MSGTAG, COMM, IERR, STATUS(MPI_STATUS_SIZE) Получение в массиве STATUS информации о структуре ожидаемого сообщения с блокировкой. Возврата не произойдет, пока сообщение с подходящим идентификатором и номером процесса-отправителя не будет доступно для получения.
21 MPI CALL MPI_COMM_SIZE(MPI_COMM_WORLD, SIZE, & IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD, RANK, & IERR) IF(MOD(RANK,2).EQ. 0) THEN IF(RANK+1.LT. SIZE) THEN CALL MPI_SEND(..., RANK+1, TAG, & MPI_COMM_WORLD, IERR) ENDIF ELSE CALL MPI_RECV(..., RANK-1, TAG, & MPI_COMM_WORLD, STATUS, IERR) ENDIF
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.