Введение в параллельные вычисления. Технология программирования MPI (день пятый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.

Презентация:



Advertisements
Похожие презентации
КОЛЛЕКТИВНЫЕ ВЗАИМОДЕЙСТВИЯ ПРОЦЕССОВ Барьерная синхронизация всех процессов группы. Широковещательная передача (broadcast) от одного процесса всем остальным.
Advertisements

Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции. Редукционные операции параллельное программирование Часть2.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции параллельное программирование.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 8 Томский политехнический университет.
Основы параллельного программирования с использованием MPI Лекция 5 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Введение в параллельные вычисления. Технология программирования MPI (день третий) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного.
Введение в параллельные вычисления. Технология программирования MPI (день шестой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
Интерфейс передачи сообщений: MPI. Базовые архитектуры Массивно-параллельные системы (MPP) Симметричные мультипроцессорные системы (SMP) Системы с неоднородным.
Нижегородский государственный университет им. Н.И.Лобачевского Факультет Вычислительной математики и кибернетики Раздел 4_2. Параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Передача упакованных данных Параллельное программирование.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 4 Томский политехнический университет.
Кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Производные типы данных Параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Создание групп и коммуникаторов Параллельное программирование.
Технология программирования MPI Антонов Александр Сергеевич, к.ф.-м.н., с.н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ.
Транксрипт:

Введение в параллельные вычисления. Технология программирования MPI (день пятый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ

MPI В операциях коллективного взаимодействия процессов участвуют все процессы коммуникатора! Как и для блокирующих процедур, возврат означает то, что разрешен свободный доступ к буферу приема или посылки. Сообщения, вызванные коллективными операциями, не пересекутся с другими сообщениями.

MPI Нельзя рассчитывать на синхронизацию процессов с помощью коллективных операций. Если какой-то процесс завершил свое участие в коллективной операции, то это не означает ни того, что данная операция завершена другими процессами коммуникатора, ни даже того, что она ими начата (если это возможно по смыслу операции).

MPI MPI_BCAST(BUF, COUNT, DATATYPE, ROOT, COMM, IERR) BUF(*) INTEGER COUNT, DATATYPE, ROOT, COMM, IERR Рассылка сообщения от процесса ROOT всем процессам данного коммуникатора. Значения параметров COUNT, DATATYPE, ROOT и COMM должны быть одинаковыми у всех процессов.

MPI данные процесс ы

MPI MPI_GATHER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, ROOT, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, ROOT, COMM, IERR Сборка данных из массивов SBUF со всех процессов в буфере RBUF процесса ROOT. Данные сохраняются в порядке возрастания номеров процессов.

MPI На процессе ROOT существенными являются значения всех параметров, а на остальных процессах только значения параметров SBUF, SCOUNT, STYPE, ROOT и COMM. Значения параметров ROOT и COMM должны быть одинаковыми у всех процессов. Параметр RCOUNT у процесса ROOT обозначает число элементов типа RTYPE, принимаемых а от каждого процесса.

MPI данные процесс ы

MPI MPI_GATHERV(SBUF, SCOUNT, STYPE, RBUF, RCOUNTS, DISPLS, RTYPE, ROOT, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNT, STYPE, RCOUNTS(*), DISPLS(*), RTYPE, ROOT, COMM, IERR Сборка различного количества данных из массивов SBUF. Порядок расположения задает массив DISPLS.

MPI RCOUNTS – целочисленный массив, содержащий количество элементов, передаваемых от каждого процесса (индекс равен рангу адресата, длина равна числу процессов в коммуникаторе). DISPLS – целочисленный массив, содержащий смещения относительно начала массива RBUF (индекс равен рангу адресата, длина равна числу процессов в коммуникаторе).

MPI MPI_SCATTER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, ROOT, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, ROOT, COMM, IERR Рассыл ка данных из массива SBUF процесса ROOT в массивы RBUF всех процесс ов. Данные рассылаются в порядке возрастания номеров процессов.

MPI На процессе ROOT существенными являются значения всех параметров, а на всех остальных процессах только значения параметров RBUF, RCOUNT, RTYPE, SOURCE и COMM.. Значения параметров SOURCE и COMM должны быть одинаковыми у всех процессов.

MPI данные процесс ы

MPI real sbuf(SIZE, SIZE), rbuf(SIZE) if(rank.eq. 0) then do 1 i=1,SIZE do 1 j=1,SIZE 1 sbuf(i,j)=... end if if (numtasks.eq. SIZE) then call MPI_SCATTER(sbuf, SIZE, MPI_REAL, & rbuf, SIZE, MPI_REAL, & 0, MPI_COMM_WORLD, ierr) endif

MPI MPI_SCATTERV(SBUF, SCOUNTS, DISPLS, STYPE, RBUF, RCOUNT, RTYPE, ROOT, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNTS(*), DISPLS(*), STYPE, RCOUNT, RTYPE, ROOT, COMM, IERR Рассыл ка различного количества данных из массива SBUF. Начало порций рассылаемых задает массив DISPLS.

MPI SCOUNTS – целочисленный массив, содержащий количество элементов, передаваемых каждому процессу (индекс равен рангу адресата, длина равна числу процессов в коммуникаторе). DISPLS – целочисленный массив, содержащий смещения относительно начала массива SBUF (индекс равен рангу адресата, длина равна числу процессов в коммуникаторе).

MPI MPI_ALLGATHER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, COMM, IERR Сборка данных из массивов SBUF со всех процессов в буфере RBUF каждого процесса. Данные сохраняются в порядке возрастания номеров процессов.

MPI данные процесс ы

MPI MPI_ALLGATHERV(SBUF, SCOUNT, STYPE, RBUF, RCOUNTS, DISPLS, RTYPE, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNT, STYPE, RCOUNTS(*), DISPLS(*), RTYPE, COMM, IERR Сборка на всех процессах различного количества данных из SBUF. Порядок расположения задает массив DISPLS.

MPI MPI_ALLTOALL(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, COMM, IERR Рассылка каждым процессом различных данных всем другим процессам. J-й блок данных i-го процесса попадает в i-й блок j-го процесса.

MPI данные процесс ы

MPI MPI_ALLTOALLV(SBUF, SCOUNTS, SDISPLS, STYPE, RBUF, RCOUNTS, RDISPLS, RTYPE, COMM, IERR) SBUF(*), RBUF(*) INTEGER SCOUNTS(*), SDISPLS(*), STYPE, RCOUNTS(*), RDISPLS(*), RTYPE, COMM, IERR Рассылка со всех процессов различного количества данных всем другим процессам.

MPI MPI_REDUCE(SBUF, RBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERR) SBUF(*), RBUF(*) INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERR В ыполнение COUNT независимых глобальных операций OP н ад соответствующими элементами массивов SBUF. Результат получается в массиве RBUF процесса ROOT.

MPI Типы предопределенных глобальных операций: MPI_MAX, MPI_MIN – максимальное и минимальное значения; MPI_SUM, MPI_PROD – глобальная сумма и глобальное произведение; MPI_LAND, MPI_LOR, MPI_LXOR – логические И, ИЛИ, искл. ИЛИ; MPI_BAND, MPI_BOR, MPI_BXOR – побитовые И, ИЛИ, искл. ИЛИ

MPI MPI_ALLREDUCE(SBUF, RBUF, COUNT, DATATYPE, OP, COMM, IERR) SBUF(*), RBUF(*) INTEGER COUNT, DATATYPE, OP, COMM, IERR В ыполнение COUNT независимых глобальных операций OP н ад соответствующими элементами массивов SBUF. Результат получается в массиве RBUF каждого процесса.

MPI MPI_REDUCE_SCATTER(SBUF, RBUF, RCOUNTS, DATATYPE, OP, COMM, IERR) SBUF(*), RBUF(*) INTEGER RCOUNTS(*), DATATYPE, OP, COMM, IERR В ыполнение RCOUNTS(i) независимых глобальных операций OP н ад соответствующими элементами массивов SBUF.

MPI Сначала выполняются глобальные операции, затем результат рассылается по процессам. I-й процесс получает RCOUNTS(i) значений результата и помещает в массив RBUF.

MPI MPI_SCAN(SBUF, RBUF, COUNT, DATATYPE, OP, COMM, IERR) SBUF(*), RBUF(*) INTEGER COUNT, DATATYPE, OP, COMM, IERR В ыполнение COUNT независимых частичных глобальных операций OP н ад соответствующими элементами массивов SBUF.

MPI I-й процесс выполняет глобальную операцию над соответствующими элементами массива SBUF процессов 0…I и помещает результат в массив RBUF. Окончательный результат глобальной операции получается в массиве RBUF последнего процесса.

MPI MPI_OP_CREATE(FUNC, COMMUTE, OP, IERR) EXTERNAL FUNCTION LOGICAL COMMUTE INTEGER OP, IERR Создание пользовательской глобальной операции. Если COMMUTE=.TRUE., то операция должна быть коммутативной и ассоциативной. Иначе порядок фиксируется по увеличению номеров процессов.

MPI FUNCTION FUNC(INVEC(*), INOUTVEC(*), LEN, TYPE) INVEC(LEN), INOUTVEC(LEN) INTEGER LEN, TYPE Интерфейс пользовательской функции. MPI_OP_FREE(OP, IERR) INTEGER OP, IERR Уничтожение пользовательской глобальной операции.

MPI do i=1,n s(i)=0.0 end do do i=1,n do j=1,m s(i)=s(i)+a(i,j) end do call MPI_ALLREDUCE(s,r,n,REAL,MPI_SUM, & MPI_COMM_WORLD, IERR)