Кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование.

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



Advertisements
Похожие презентации
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции параллельное программирование.
Advertisements

Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Введение в параллельные вычисления. Технология программирования MPI (день третий) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 7 Томский политехнический университет.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 8 Томский политехнический университет.
Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Кафедра ЮНЕСКО по НИТ1 Передача упакованных данных Параллельное программирование.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 4 Томский политехнический университет.
Кафедра ЮНЕСКО по НИТ1 Создание групп и коммуникаторов Параллельное программирование.
КОЛЛЕКТИВНЫЕ ВЗАИМОДЕЙСТВИЯ ПРОЦЕССОВ Барьерная синхронизация всех процессов группы. Широковещательная передача (broadcast) от одного процесса всем остальным.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции. Редукционные операции параллельное программирование Часть2.
Кафедра ЮНЕСКО по НИТ1 Производные типы данных Параллельное программирование.
Основы параллельного программирования с использованием MPI Лекция 3 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Параллельные аппаратные архитектуры и модели программирования Традиционная архитектура фон Неймана Расширение традиционной архитектуры Сопроцессоры Многоядерные.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
Основы параллельного программирования с использованием MPI Лекция 5 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Введение в параллельные вычисления. Технология программирования MPI (день пятый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Кафедра ЮНЕСКО по НИТ1 Эффективность и ускорение параллельных программ параллельное программирование.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 9 Методы разработки параллельных программ при использования интерфейса передачи.
Транксрипт:

кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование

кафедра ЮНЕСКО по НИТ 2 Коммуникационные операции типа «точка-точка» К операциям этого типа относятся две представленные выше коммуникационные процедуры (MPI_Send, MPI_Recv). В коммуникационных операциях типа точка-точка всегда участвуют 2 процесса: передающий и принимающий. В MPI имеется множество функций, реализующих такой тип обмена. Многообразие объясняется возможностью организации таких обменов множеством способов. Описанные в предыдущем разделе функции реализуют стандартный режим с блокировкой.

кафедра ЮНЕСКО по НИТ 3 Блокирующие функции Блокирующие функции подразумевают полное окончание операции после выхода из процедуры, т.е. вызывающий процесс блокируется, пока операция не будет завершена.

кафедра ЮНЕСКО по НИТ 4 Неблокирующие функции Неблокирующие функции подразумевают совмещение операций обмена с другими операциями, поэтому неблокирующие функции передачи и приема по сути дела являются функциями инициализации соответствующих операций. Для опроса завершенности операции (и принудительного завершения) вводятся дополнительные функции.

кафедра ЮНЕСКО по НИТ 5 Коммуникационные операции типа «точка-точка» Из таблицы хорошо виден принцип формирования имен функций. К именам базовых функций Send/Recv добавляются различные префиксы. Способ связиС блокировкойБез блокировки Стандартная посылка MPI_SendMPI_Isend Синхронная посылка MPI_SsendMPI_Issend Буферизированная посылка MPI_BsendMPI_Ibsend Согласованная посылка MPI_RsendMPI_Irsend Прием информации MPI_RecvMPI_Irecv

кафедра ЮНЕСКО по НИТ 6 Коммуникационные операции типа «точка-точка» Префикс S (synchronous) – означает синхронный режим передачи данных. Операция передачи данных заканчивается только тогда, когда заканчивается прием данных. Префикс B (buffered) – означает буферизованный режим передачи данных. В адресном пространстве передающего процесса с помощью специальной функции (MPI_Buffer_attach) создается буфер обмена, который используется в операциях обмена. Операция посылки заканчивается, когда данные помещены в этот буфер. Префикс R (ready) – согласованный или подготовленный режим передачи данных. Операция передачи данных должна начинаться только тогда, когда принимающий процессор уже точно выставил признак готовности приема данных. Префикс I (immediate) – относится к неблокирующим операциям.

кафедра ЮНЕСКО по НИТ 7 MPI – Синхронная посылка Процессор-отправитель ожидает информацию о том, когда получатель примет сообщение. Пример, факс получатель присылает тег завершения приема. ok beep

кафедра ЮНЕСКО по НИТ 8 MPI – Буферизированная посылка или Несинхронная посылка Процессор-отправитель знает только когда сообщение ушло.

кафедра ЮНЕСКО по НИТ 9 MPI–посылки без блокировки Неблокирующие операции немедленно возвращают управление программе. Программа выполняет следующие действия. Для того, что бы спустя некоторое время убедиться, что неблокирующая функция передачи данных выполнена полностью, нужно вызвать функцию MPI_Test или MPI_Wait. ok beep non-blocking synchronous send

кафедра ЮНЕСКО по НИТ 10 Неблокирующие коммуникационные операции Использование неблокирующих коммуникационных операций более безопасно с точки зрения возникновения тупиковых ситуаций, а также может увеличить скорость работы программы за счет совмещения выполнения вычислительных и коммуникационных операций. Эти задачи решаются разделением коммуникационных операций на две стадии: инициирование операции и проверку завершения операции.

кафедра ЮНЕСКО по НИТ 11 Неблокирующие коммуникационные операции Неблокирующие операции используют специальный скрытый (opaque) объект "запрос обмена" (request) для связи между функциями обмена и функциями опроса их завершения. Для прикладных программ доступ к этому объекту возможен только через вызовы MPI-функций. Если операция обмена завершена, подпрограмма проверки снимает "запрос обмена", устанавливая его в значение MPI_REQUEST_NULL. Снять "запрос обмена" без ожидания завершения операции можно подпрограммой MPI_Request_free.

кафедра ЮНЕСКО по НИТ 12 Функция передачи сообщений MPI_Isend Входные параметры: int MPI_Isend( void *sbuf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request ) sbuf адрес начала расположения пересылаемых данных count число пересылаемых элементов datatype тип посылаемых элементов dest номер процесса-получателя в группе, связанной с коммуникатором comm tag идентификатор сообщения comm коммуникатор области связи Выходные параметры: request запрос обмена

кафедра ЮНЕСКО по НИТ 13 Функция приема сообщений MPI_Irecv Входные параметры: int MPI_Irecv( void *rbuf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request ) count число пересылаемых элементов datatype тип посылаемых элементов source номер процесса-отправителя tag идентификатор сообщения comm коммуникатор области связи Выходные параметры: rbuf адрес начала расположения принимаемого сообщения request запрос обмена

кафедра ЮНЕСКО по НИТ 14 MPI – Non-Blocking Examples 0 неблокирующая посылка MPI_Isend(...) Выполнение других операций MPI_Wait(...) 1 неблокирующий прием MPI_Irecv(...) Выполнение других операций MPI_Wait(...) = прекращается выполнение операций пока не завершится передача/прием

кафедра ЮНЕСКО по НИТ 15 Функция ожидания завершения неблокирующей операции MPI_Wait Входные параметры: int MPI_Wait ( MPI_Request *request, MPI_Status *status) request запрос обмена Выходные параметры: status атрибуты принятого сообщений

кафедра ЮНЕСКО по НИТ 16 Функция проверки завершения неблокирующей операции MPI_Test Входные параметры: int MPI_Test ( MPI_Request *request, int *flag, MPI_Status *status) request запрос обмена Выходные параметры: status атрибуты принятого сообщений flag признак завершенности проверяемой операции flag==0, если операция не завершена flag0, если операция завершена

MPI_Sendrecv – совмещение отправки и получения кафедра ЮНЕСКО по НИТ 17 int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status) Выходные параметры: recvbuf адрес начала расположения принимаемого сообщения status атрибуты принятого сообщения При использовании блокирующего режима передачи сообщений существует потенциальная опасность возникновения тупиковых ситуаций, в которых операции обмена данными блокируют друг друга. В ситуациях, когда требуется выполнить взаимный обмен данными между процессами, безопаснее использовать совмещенную операцию MPI_Sendrecv.

Нулевой процесс выполняет продолжительный цикл и после его выполнения посылает первому процессору значение вычислений цикла при помощи коммуникационной функции MPI_Send; A) Первый процесс засекает время t1, выполняет блокирующую функцию MPI_Recv, засекает время t2, выводит присланное значение и затраченное время на ожидание и прием посылки. B) Первый процесс засекает время t1, выполняет неблокирующую функцию MPI_Irecv, засекает время t2, выводит полученное значение и затраченное время на выполнение неблокирующей операции приема. C) Первый процессор засекает время t1, выполняет неблокирующую функцию MPI_Irecv, засекает время t2, выполняет операцию MPI_Wait, засекает время t3, выводит полученное значение и затраченное время на выполнение неблокирующей операции приема и ожидание получения посылки. кафедра ЮНЕСКО по НИТ 18 Задание1

кафедра ЮНЕСКО по НИТ 19 Задание2 Пересылка данных по кольцу Init my_rank 0 buf 0 s2s2 my_rank 1 buf 1 s0s0 my_rank 2 buf 2 s1s Каждый процессор помещает свой ранг в целочисленную переменную buf. Каждый процессор пересылает переменную buf соседу справа. Каждый процессор суммирует принимаемое значение в переменную s, а затем передаёт принятое значение соседу справа. Пересылки по кольцу прекращаются, когда каждый процессор получит то значение, с которого начал пересылки: т.е. каждый процессор просуммирует ранги всех процессоров. С целью исключения взаимоблокировки используются неблокирующие пересылки MPI_Isend. next = (my_id+1) % np; prev = (my_id-1+np) % np;

кафедра ЮНЕСКО по НИТ 20 Задание 3 Пересылка данных по кольцу 2 Замените в предыдущей задаче схему «Isend- Recv-Wait» на Sendrecv.