SlideShare a Scribd company logo
1 of 18
Download to read offline
Семинар 10
Стандарт MPI (часть 3)
Михаил Курносов
E-mail: mkurnosov@gmail.com
WWW: www.mkurnosov.net
Цикл семинаров «Основы параллельного программирования»
Институт физики полупроводников им. А. В. Ржанова СО РАН
Новосибирск, 2015 CC-BY
Коммуникационные режимы блокирующих обменов
 Стандартный режим (Standard communication mode, local/non-local) –
реализация определяет будет ли исходящее сообщение буферизовано:
a) сообщение помещается в буфер, вызов MPI_Send завершается до вызова
советующего MPI_Recv
b) буфер недоступен, вызов MPI_Send не завершится пока не будет вызван
соответствующий MPI_Recv (non-local)
 Режим с буферизацией (Buffered mode, local) – завершение MPI_Bsend не зависит
от того, вызван ли соответствующий MPI_Recv; исходящее сообщение помещается
в буфер, вызов MPI_Bsend завершается
 Синхронный режим (Synchronous mode, non-local + synchronization) – вызов MPI_Ssend
завершается если соответствующий вызова MPI_Recv начал прием сообщения
 Режим с передачей по готовности (Ready communication mode) – вызов MPI_Rsend
может начать передачу сообщения если соответствующий MPI_Recv уже вызван
(позволяет избежать процедуры “рукопожатия” для сокращения времени обмена)
Неблокирующие функции Send/recv (non-blocking)
 Возврат из функции происходит сразу после инициализации процесса
передачи/приема
 Буфер использовать нельзя до завершения операции
 Передача
 MPI_Isend(..., MPI_Request *request)
 MPI_Ibsend(..., MPI_Request *request)
 MPI_Issend(..., MPI_Request *request)
 MPI_Irsend(..., MPI_Request *request)
 Прием
 MPI_Irecv(..., MPI_Request *request)
Ожидание завершения неблокирующей операции
 Блокирующее ожидание завершения операции
 int MPI_Wait(MPI_Request *request, MPI_Status *status)
 int MPI_Waitany(int count, MPI_Request array_of_requests[], int *index,
MPI_Status *status)
 int MPI_Waitall(int count, MPI_Request array_of_requests[],
MPI_Status array_of_statuses[])
 Блокирующая проверка состояния операции
 int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
 int MPI_Testany(int count, MPI_Request array_of_requests[], int *index,
int *flag, MPI_Status *status)
 int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
MPI_Status array_of_statuses[])
Совмещение обменов и вычислений (overlaping)
Waiting Computations
MPI_Send
User code
MPI lib.
User code
MPI lib.
MPI_Wait
t
t
MPI_Isend MPI_Test
Использование блокирующих функций
Использование неблокирующих функций MPI_Isend(buf, count, MPI_INT, 1, 0,
MPI_COMM_WORLD, &req);
do {
//
// Вычисления (не использовать buf)
MPI_Test(&req, &flag, &status);
} while (!flag)
Ring example
 Двусторонние обмены (point-to-point communication)
✔
Один процесс инициирует передачу сообщения (send), другой его
принимает (receive)
✔
Изменение памяти принимающего процесса происходит при его явном
участии
✔
Обмен совмещен с синхронизацией процессов
 Односторонние обмены (one-sided communication, remote memory access)
✔
Только один процесс явно инициирует передачу/прием сообщения из
памяти удаленного процесса
✔
Синхронизация процессов отсутствует
Неблокирующая проверка сообщений
int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag,
MPI_Status *status)
 В параметре flag возвращает значение 1, если сообщение с подходящими
атрибутами уже может быть прочитано и 0 в противном случае
 В параметре status возвращает информацию об обнаруженном сообщении
(если flag == 1)
Постоянные запросы (persistent)
 Постоянные функции привязывают аргументы к дескриптору запроса
(persistent request), дальнейшие вызовы операции осуществляется
по дескриптору запроса
 Позволяет сократить время выполнения запроса
 int MPI_Send_init(const void* buf, int count, MPI_Datatype datatype,
int dest, int tag, MPI_Comm comm, MPI_Request *request)
 int MPI_Recv_init(void* buf, int count, MPI_Datatype datatype, int source,
int tag, MPI_Comm comm, MPI_Request *request)
 Запуск операции (например, в цикле)
 int MPI_Start(MPI_Request *request)
 int MPI_Startall(int count, MPI_Request array_of_requests[])
Коллективные обмены (collective communications)
Трансляционный обмен (One-to-all)
 MPI_Bcast
 MPI_Scatter
 MPI_Scatterv
Коллекторный обмен (All-to-one)
 MPI_Gather
 MPI_Gatherv
 MPI_Reduce
Трансляционно-циклический обмен (All-to-all)
 MPI_Allgather
 MPI_Allgatherv
 MPI_Alltoall
 MPI_Alltoallv
 MPI_Allreduce
 MPI_Reduce_scatter
 Участвуют все
процессы коммуникатора
 Коллективная функция должна
быть вызвана каждым процессом
коммуникатора
 Коллективные и двусторонние
обмены в рамках одного
коммуникатора используют
различные контексты
MPI_Bcast
int MPI_Bcast(void *buf, int count, MPI_Datatype datatype,
int root, MPI_Comm comm)
Элементы
A
Элементы
A
A
A
A
MPI_Bcast
 MPI_Bcast – рассылка всем процессам сообщения buf
 Если номер процесса совпадает с root, то он отправитель, иначе – приемник
Рассылка всем
одинакового сообщения
ПроцессыПроцессы
Процессы
MPI_Scatter
int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype,
void *recvbuf, int recvcnt, MPI_Datatype recvtype,
int root, MPI_Comm comm)
Элементы
A0 A1 A2 A3
Элементы
A0
A1
A2
A3
MPI_Scatter
 Размер sendbuf = sizeof(sendtype) * sendcnt * commsize
 Размер recvbuf = sizeof(sendtype) * recvcnt
Рассылка всем
разных сообщений
Процессы
Процессы
MPI_Gather
int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm)
Элементы
A0 A1 A2 A3
Элементы
A0
A1
A2
A3
MPI_Gather
 Размер sendbuf: sizeof(sendtype) * sendcnt
 Размер recvbuf: sizeof(sendtype) * sendcnt * commsize
Прием от всех
разных сообщений
Процессы
Процессы
MPI_Alltoall
int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcnt, MPI_Datatype recvtype,
MPI_Comm comm)
Элементы
A0 A1 A2 A3
B0 B1 B2 B3
C0 C1 C2 C3
D0 D1 D2 D3
Элементы
A0 B0 C0 D0
A1 B1 C1 D1
A2 B2 C2 D2
A3 B3 C3 D3
MPI_Alltoall
 Размер sendbuf: sizeof(sendtype) * sendcount * commsize
 Размер recvbuf: sizeof(recvtype) * recvcount * commsize
В каждом процессе
собираются сообщения
всех процессов
Процессы
Процессы
All-to-all
int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
MPI_Comm comm)
int MPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int *recvcounts,
int *displs,
MPI_Datatype recvtype,
MPI_Comm comm)
int MPI_Allreduce(void *sendbuf, void *recvbuf,
int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm)
MPI_Reduce
int MPI_Reduce(void *sendbuf, void *recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, int root,
MPI_Comm comm)
1 2 3 1 7
Rank 0 (root) Rank 1 Rank 2
+ + +
recvbuf
 Размер sendbuf: sizeof(datatype) * count
 Размер recvbuf: sizeof(datatype) * count
Формирование в процессе root массива значений,
полученных применением операции op
4 5 6 1 3 7 8 9 9 3
12 15 18 11 13
Операции MPI_Reduce
int MPI_Op_create(MPI_User_function *function,
int commute, MPI_Op *op)
 MPI_MAX
 MPI_MIN
 MPI_MAXLOC
 MPI_MINLOC
 MPI_SUM
 MPI_PROD
 MPI_LAND
 MPI_LOR
 MPI_LXOR
 MPI_BAND
 MPI_BOR
 MPI_BXOR
 Операция пользователя должна быть ассоциативной
A * (B * C) = (A * B) * C
 Если commute = 1, то операция коммутативная
A * B = B * A
Барьерная синхронизация
int MPI_Barrier(MPI_Comm comm)
 Блокирует работу процессов коммуникатора, вызвавших данную функцию,
до тех пор, пока все процессы не выполнят эту процедуру
Задание
 Разработать на MPI параллельную программу численного интегрирования
методом прямоугольников (семинар 2, пример 1_integrate)
 Провести анализ эффективности параллельной программы

More Related Content

What's hot

Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Mikhail Kurnosov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusMikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 FinLiudmila Li
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMikhail Kurnosov
 
О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"Yandex
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1Liudmila Li
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5Technopark
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Alexey Paznikov
 
Introduction in CUDA (1-3)
Introduction in CUDA (1-3)Introduction in CUDA (1-3)
Introduction in CUDA (1-3)Alexander Mezhov
 

What's hot (20)

Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk Plus
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 Fin
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
 
О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
 
Introduction in CUDA (1-3)
Introduction in CUDA (1-3)Introduction in CUDA (1-3)
Introduction in CUDA (1-3)
 

Viewers also liked

Лекция 9. Программирование GPU
Лекция 9. Программирование GPUЛекция 9. Программирование GPU
Лекция 9. Программирование GPUMikhail Kurnosov
 
Лекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиЛекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаMikhail Kurnosov
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очередиMikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Mikhail Kurnosov
 
Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиMikhail Kurnosov
 
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Mikhail Kurnosov
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеMikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Mikhail Kurnosov
 
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Mikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...Mikhail Kurnosov
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 

Viewers also liked (20)

Лекция 9. Программирование GPU
Лекция 9. Программирование GPUЛекция 9. Программирование GPU
Лекция 9. Программирование GPU
 
Лекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиЛекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимости
 
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поиска
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)
 
Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачи
 
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графе
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 

Similar to Семинар 10. Параллельное программирование на MPI (часть 3)

Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)Mikhail Kurnosov
 
20090721 hpc exercise2
20090721 hpc exercise220090721 hpc exercise2
20090721 hpc exercise2Michael Karpov
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"Yandex
 
Функции передачи сообщений MPI
Функции передачи сообщений MPIФункции передачи сообщений MPI
Функции передачи сообщений MPIAleximos
 
Введение в MPI
Введение в MPIВведение в MPI
Введение в MPIAleximos
 
Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...Mikhail Kurnosov
 
РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)Dmitry Evteev
 
Bgp методякоби
Bgp методякобиBgp методякоби
Bgp методякобиMichael Karpov
 
В поисках эффективного middleware
В поисках эффективного middlewareВ поисках эффективного middleware
В поисках эффективного middlewareAlexander Gerasiov
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Roman Tsisyk
 
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...Iosif Itkin
 

Similar to Семинар 10. Параллельное программирование на MPI (часть 3) (15)

Prezent
PrezentPrezent
Prezent
 
Prezent
PrezentPrezent
Prezent
 
Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)
 
20090721 hpc exercise2
20090721 hpc exercise220090721 hpc exercise2
20090721 hpc exercise2
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"
 
Функции передачи сообщений MPI
Функции передачи сообщений MPIФункции передачи сообщений MPI
Функции передачи сообщений MPI
 
Введение в MPI
Введение в MPIВведение в MPI
Введение в MPI
 
Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...
 
РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)
 
Bgp методякоби
Bgp методякобиBgp методякоби
Bgp методякоби
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
 
В поисках эффективного middleware
В поисках эффективного middlewareВ поисках эффективного middleware
В поисках эффективного middleware
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
 
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
 

More from Mikhail Kurnosov

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Mikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовMikhail Kurnosov
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Mikhail Kurnosov
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаMikhail Kurnosov
 
Лекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыЛекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыMikhail Kurnosov
 

More from Mikhail Kurnosov (15)

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 
Лекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыЛекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицы
 

Семинар 10. Параллельное программирование на MPI (часть 3)

  • 1. Семинар 10 Стандарт MPI (часть 3) Михаил Курносов E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Цикл семинаров «Основы параллельного программирования» Институт физики полупроводников им. А. В. Ржанова СО РАН Новосибирск, 2015 CC-BY
  • 2. Коммуникационные режимы блокирующих обменов  Стандартный режим (Standard communication mode, local/non-local) – реализация определяет будет ли исходящее сообщение буферизовано: a) сообщение помещается в буфер, вызов MPI_Send завершается до вызова советующего MPI_Recv b) буфер недоступен, вызов MPI_Send не завершится пока не будет вызван соответствующий MPI_Recv (non-local)  Режим с буферизацией (Buffered mode, local) – завершение MPI_Bsend не зависит от того, вызван ли соответствующий MPI_Recv; исходящее сообщение помещается в буфер, вызов MPI_Bsend завершается  Синхронный режим (Synchronous mode, non-local + synchronization) – вызов MPI_Ssend завершается если соответствующий вызова MPI_Recv начал прием сообщения  Режим с передачей по готовности (Ready communication mode) – вызов MPI_Rsend может начать передачу сообщения если соответствующий MPI_Recv уже вызван (позволяет избежать процедуры “рукопожатия” для сокращения времени обмена)
  • 3. Неблокирующие функции Send/recv (non-blocking)  Возврат из функции происходит сразу после инициализации процесса передачи/приема  Буфер использовать нельзя до завершения операции  Передача  MPI_Isend(..., MPI_Request *request)  MPI_Ibsend(..., MPI_Request *request)  MPI_Issend(..., MPI_Request *request)  MPI_Irsend(..., MPI_Request *request)  Прием  MPI_Irecv(..., MPI_Request *request)
  • 4. Ожидание завершения неблокирующей операции  Блокирующее ожидание завершения операции  int MPI_Wait(MPI_Request *request, MPI_Status *status)  int MPI_Waitany(int count, MPI_Request array_of_requests[], int *index, MPI_Status *status)  int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[])  Блокирующая проверка состояния операции  int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)  int MPI_Testany(int count, MPI_Request array_of_requests[], int *index, int *flag, MPI_Status *status)  int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag, MPI_Status array_of_statuses[])
  • 5. Совмещение обменов и вычислений (overlaping) Waiting Computations MPI_Send User code MPI lib. User code MPI lib. MPI_Wait t t MPI_Isend MPI_Test Использование блокирующих функций Использование неблокирующих функций MPI_Isend(buf, count, MPI_INT, 1, 0, MPI_COMM_WORLD, &req); do { // // Вычисления (не использовать buf) MPI_Test(&req, &flag, &status); } while (!flag)
  • 6. Ring example  Двусторонние обмены (point-to-point communication) ✔ Один процесс инициирует передачу сообщения (send), другой его принимает (receive) ✔ Изменение памяти принимающего процесса происходит при его явном участии ✔ Обмен совмещен с синхронизацией процессов  Односторонние обмены (one-sided communication, remote memory access) ✔ Только один процесс явно инициирует передачу/прием сообщения из памяти удаленного процесса ✔ Синхронизация процессов отсутствует
  • 7. Неблокирующая проверка сообщений int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status)  В параметре flag возвращает значение 1, если сообщение с подходящими атрибутами уже может быть прочитано и 0 в противном случае  В параметре status возвращает информацию об обнаруженном сообщении (если flag == 1)
  • 8. Постоянные запросы (persistent)  Постоянные функции привязывают аргументы к дескриптору запроса (persistent request), дальнейшие вызовы операции осуществляется по дескриптору запроса  Позволяет сократить время выполнения запроса  int MPI_Send_init(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)  int MPI_Recv_init(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request)  Запуск операции (например, в цикле)  int MPI_Start(MPI_Request *request)  int MPI_Startall(int count, MPI_Request array_of_requests[])
  • 9. Коллективные обмены (collective communications) Трансляционный обмен (One-to-all)  MPI_Bcast  MPI_Scatter  MPI_Scatterv Коллекторный обмен (All-to-one)  MPI_Gather  MPI_Gatherv  MPI_Reduce Трансляционно-циклический обмен (All-to-all)  MPI_Allgather  MPI_Allgatherv  MPI_Alltoall  MPI_Alltoallv  MPI_Allreduce  MPI_Reduce_scatter  Участвуют все процессы коммуникатора  Коллективная функция должна быть вызвана каждым процессом коммуникатора  Коллективные и двусторонние обмены в рамках одного коммуникатора используют различные контексты
  • 10. MPI_Bcast int MPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) Элементы A Элементы A A A A MPI_Bcast  MPI_Bcast – рассылка всем процессам сообщения buf  Если номер процесса совпадает с root, то он отправитель, иначе – приемник Рассылка всем одинакового сообщения ПроцессыПроцессы Процессы
  • 11. MPI_Scatter int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) Элементы A0 A1 A2 A3 Элементы A0 A1 A2 A3 MPI_Scatter  Размер sendbuf = sizeof(sendtype) * sendcnt * commsize  Размер recvbuf = sizeof(sendtype) * recvcnt Рассылка всем разных сообщений Процессы Процессы
  • 12. MPI_Gather int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) Элементы A0 A1 A2 A3 Элементы A0 A1 A2 A3 MPI_Gather  Размер sendbuf: sizeof(sendtype) * sendcnt  Размер recvbuf: sizeof(sendtype) * sendcnt * commsize Прием от всех разных сообщений Процессы Процессы
  • 13. MPI_Alltoall int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, MPI_Comm comm) Элементы A0 A1 A2 A3 B0 B1 B2 B3 C0 C1 C2 C3 D0 D1 D2 D3 Элементы A0 B0 C0 D0 A1 B1 C1 D1 A2 B2 C2 D2 A3 B3 C3 D3 MPI_Alltoall  Размер sendbuf: sizeof(sendtype) * sendcount * commsize  Размер recvbuf: sizeof(recvtype) * recvcount * commsize В каждом процессе собираются сообщения всех процессов Процессы Процессы
  • 14. All-to-all int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) int MPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, MPI_Comm comm) int MPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
  • 15. MPI_Reduce int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) 1 2 3 1 7 Rank 0 (root) Rank 1 Rank 2 + + + recvbuf  Размер sendbuf: sizeof(datatype) * count  Размер recvbuf: sizeof(datatype) * count Формирование в процессе root массива значений, полученных применением операции op 4 5 6 1 3 7 8 9 9 3 12 15 18 11 13
  • 16. Операции MPI_Reduce int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op)  MPI_MAX  MPI_MIN  MPI_MAXLOC  MPI_MINLOC  MPI_SUM  MPI_PROD  MPI_LAND  MPI_LOR  MPI_LXOR  MPI_BAND  MPI_BOR  MPI_BXOR  Операция пользователя должна быть ассоциативной A * (B * C) = (A * B) * C  Если commute = 1, то операция коммутативная A * B = B * A
  • 17. Барьерная синхронизация int MPI_Barrier(MPI_Comm comm)  Блокирует работу процессов коммуникатора, вызвавших данную функцию, до тех пор, пока все процессы не выполнят эту процедуру
  • 18. Задание  Разработать на MPI параллельную программу численного интегрирования методом прямоугольников (семинар 2, пример 1_integrate)  Провести анализ эффективности параллельной программы