Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемИван Талалыкин
1 кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование
2 кафедра ЮНЕСКО по НИТ 2 Коммуникационные операции типа «точка-точка» К операциям этого типа относятся две представленные выше коммуникационные процедуры (MPI_Send, MPI_Recv). В коммуникационных операциях типа точка-точка всегда участвуют 2 процесса: передающий и принимающий. В MPI имеется множество функций, реализующих такой тип обмена. Многообразие объясняется возможностью организации таких обменов множеством способов. Описанные в предыдущем разделе функции реализуют стандартный режим с блокировкой.
3 кафедра ЮНЕСКО по НИТ 3 Блокирующие функции Блокирующие функции подразумевают полное окончание операции после выхода из процедуры, т.е. вызывающий процесс блокируется, пока операция не будет завершена.
4 кафедра ЮНЕСКО по НИТ 4 Неблокирующие функции Неблокирующие функции подразумевают совмещение операций обмена с другими операциями, поэтому неблокирующие функции передачи и приема по сути дела являются функциями инициализации соответствующих операций. Для опроса завершенности операции (и принудительного завершения) вводятся дополнительные функции.
5 кафедра ЮНЕСКО по НИТ 5 Коммуникационные операции типа «точка-точка» Из таблицы хорошо виден принцип формирования имен функций. К именам базовых функций Send/Recv добавляются различные префиксы. Способ связиС блокировкойБез блокировки Стандартная посылка MPI_SendMPI_Isend Синхронная посылка MPI_SsendMPI_Issend Буферизированная посылка MPI_BsendMPI_Ibsend Согласованная посылка MPI_RsendMPI_Irsend Прием информации MPI_RecvMPI_Irecv
6 кафедра ЮНЕСКО по НИТ 6 Коммуникационные операции типа «точка-точка» Префикс S (synchronous) – означает синхронный режим передачи данных. Операция передачи данных заканчивается только тогда, когда заканчивается прием данных. Префикс B (buffered) – означает буферизованный режим передачи данных. В адресном пространстве передающего процесса с помощью специальной функции (MPI_Buffer_attach) создается буфер обмена, который используется в операциях обмена. Операция посылки заканчивается, когда данные помещены в этот буфер. Префикс R (ready) – согласованный или подготовленный режим передачи данных. Операция передачи данных должна начинаться только тогда, когда принимающий процессор уже точно выставил признак готовности приема данных. Префикс I (immediate) – относится к неблокирующим операциям.
7 кафедра ЮНЕСКО по НИТ 7 MPI – Синхронная посылка Процессор-отправитель ожидает информацию о том, когда получатель примет сообщение. Пример, факс получатель присылает тег завершения приема. ok beep
8 кафедра ЮНЕСКО по НИТ 8 MPI – Буферизированная посылка или Несинхронная посылка Процессор-отправитель знает только когда сообщение ушло.
9 кафедра ЮНЕСКО по НИТ 9 MPI–посылки без блокировки Неблокирующие операции немедленно возвращают управление программе. Программа выполняет следующие действия. Для того, что бы спустя некоторое время убедиться, что неблокирующая функция передачи данных выполнена полностью, нужно вызвать функцию MPI_Test или MPI_Wait. ok beep non-blocking synchronous send
10 кафедра ЮНЕСКО по НИТ 10 Неблокирующие коммуникационные операции Использование неблокирующих коммуникационных операций более безопасно с точки зрения возникновения тупиковых ситуаций, а также может увеличить скорость работы программы за счет совмещения выполнения вычислительных и коммуникационных операций. Эти задачи решаются разделением коммуникационных операций на две стадии: инициирование операции и проверку завершения операции.
11 кафедра ЮНЕСКО по НИТ 11 Неблокирующие коммуникационные операции Неблокирующие операции используют специальный скрытый (opaque) объект "запрос обмена" (request) для связи между функциями обмена и функциями опроса их завершения. Для прикладных программ доступ к этому объекту возможен только через вызовы MPI-функций. Если операция обмена завершена, подпрограмма проверки снимает "запрос обмена", устанавливая его в значение MPI_REQUEST_NULL. Снять "запрос обмена" без ожидания завершения операции можно подпрограммой MPI_Request_free.
12 кафедра ЮНЕСКО по НИТ 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 кафедра ЮНЕСКО по НИТ 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 кафедра ЮНЕСКО по НИТ 14 MPI – Non-Blocking Examples 0 неблокирующая посылка MPI_Isend(...) Выполнение других операций MPI_Wait(...) 1 неблокирующий прием MPI_Irecv(...) Выполнение других операций MPI_Wait(...) = прекращается выполнение операций пока не завершится передача/прием
15 кафедра ЮНЕСКО по НИТ 15 Функция ожидания завершения неблокирующей операции MPI_Wait Входные параметры: int MPI_Wait ( MPI_Request *request, MPI_Status *status) request запрос обмена Выходные параметры: status атрибуты принятого сообщений
16 кафедра ЮНЕСКО по НИТ 16 Функция проверки завершения неблокирующей операции MPI_Test Входные параметры: int MPI_Test ( MPI_Request *request, int *flag, MPI_Status *status) request запрос обмена Выходные параметры: status атрибуты принятого сообщений flag признак завершенности проверяемой операции flag==0, если операция не завершена flag0, если операция завершена
17 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.
18 Нулевой процесс выполняет продолжительный цикл и после его выполнения посылает первому процессору значение вычислений цикла при помощи коммуникационной функции MPI_Send; A) Первый процесс засекает время t1, выполняет блокирующую функцию MPI_Recv, засекает время t2, выводит присланное значение и затраченное время на ожидание и прием посылки. B) Первый процесс засекает время t1, выполняет неблокирующую функцию MPI_Irecv, засекает время t2, выводит полученное значение и затраченное время на выполнение неблокирующей операции приема. C) Первый процессор засекает время t1, выполняет неблокирующую функцию MPI_Irecv, засекает время t2, выполняет операцию MPI_Wait, засекает время t3, выводит полученное значение и затраченное время на выполнение неблокирующей операции приема и ожидание получения посылки. кафедра ЮНЕСКО по НИТ 18 Задание1
19 кафедра ЮНЕСКО по НИТ 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 кафедра ЮНЕСКО по НИТ 20 Задание 3 Пересылка данных по кольцу 2 Замените в предыдущей задаче схему «Isend- Recv-Wait» на Sendrecv.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.