Коммуникационные операции «точка-точка» параллельное программирование

Содержание

Слайд 2

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

кафедра ЮНЕСКО по НИТ

Коммуникационные операции типа «точка-точка»

К операциям этого типа относятся

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

кафедра ЮНЕСКО по НИТ Блокирующие функции Блокирующие функции подразумевают полное окончание

кафедра ЮНЕСКО по НИТ

Блокирующие функции

Блокирующие функции подразумевают полное окончание операции после

выхода из процедуры, т.е. вызывающий процесс блокируется, пока операция не будет завершена.
Слайд 4

кафедра ЮНЕСКО по НИТ Неблокирующие функции Неблокирующие функции подразумевают совмещение операций

кафедра ЮНЕСКО по НИТ

Неблокирующие функции

Неблокирующие функции подразумевают совмещение операций обмена с

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

кафедра ЮНЕСКО по НИТ Коммуникационные операции типа «точка-точка» Из таблицы хорошо

кафедра ЮНЕСКО по НИТ

Коммуникационные операции типа «точка-точка»

Из таблицы хорошо виден принцип

формирования имен функций. К именам базовых функций Send/Recv добавляются различные префиксы.
Слайд 6

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

кафедра ЮНЕСКО по НИТ

Коммуникационные операции типа «точка-точка»

Слайд 7

кафедра ЮНЕСКО по НИТ MPI – Синхронная посылка Процессор-отправитель ожидает информацию

кафедра ЮНЕСКО по НИТ

MPI – Синхронная посылка

Процессор-отправитель ожидает информацию о том,

когда получатель примет сообщение.
Пример, факс получатель присылает тег завершения приема.

ok

beep

Слайд 8

кафедра ЮНЕСКО по НИТ MPI – Буферизированная посылка или Несинхронная посылка

кафедра ЮНЕСКО по НИТ

MPI – Буферизированная посылка или Несинхронная посылка

Процессор-отправитель знает

только когда сообщение ушло.
Слайд 9

кафедра ЮНЕСКО по НИТ MPI–посылки без блокировки Неблокирующие операции немедленно возвращают

кафедра ЮНЕСКО по НИТ

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 Входные параметры: Выходные параметры:

кафедра ЮНЕСКО по НИТ

Функция передачи сообщений MPI_Isend

Входные параметры:

Выходные параметры:

Слайд 13

кафедра ЮНЕСКО по НИТ Функция приема сообщений MPI_Irecv Входные параметры: Выходные параметры:

кафедра ЮНЕСКО по НИТ

Функция приема сообщений MPI_Irecv

Входные параметры:

Выходные параметры:

Слайд 14

кафедра ЮНЕСКО по НИТ MPI – Non-Blocking Examples Выполнение других операций Выполнение других операций

кафедра ЮНЕСКО по НИТ

MPI – Non-Blocking Examples

Выполнение других операций

Выполнение других операций

Слайд 15

кафедра ЮНЕСКО по НИТ Функция ожидания завершения неблокирующей операции MPI_Wait Входные параметры: Выходные параметры:

кафедра ЮНЕСКО по НИТ

Функция ожидания завершения неблокирующей операции MPI_Wait

Входные параметры:

Выходные параметры:

Слайд 16

кафедра ЮНЕСКО по НИТ Функция проверки завершения неблокирующей операции MPI_Test Входные параметры: Выходные параметры:

кафедра ЮНЕСКО по НИТ

Функция проверки завершения неблокирующей операции MPI_Test

Входные параметры:

Выходные параметры:

Слайд 17

MPI_Sendrecv – совмещение отправки и получения кафедра ЮНЕСКО по НИТ Выходные

MPI_Sendrecv – совмещение отправки и получения

кафедра ЮНЕСКО по НИТ

Выходные параметры:

При использовании

блокирующего режима передачи сообщений существует потенциальная опасность возникновения тупиковых ситуаций, в которых операции обмена данными блокируют друг друга.
В ситуациях, когда требуется выполнить взаимный обмен данными между процессами, безопаснее использовать совмещенную операцию MPI_Sendrecv.
Слайд 18

Нулевой процесс выполняет продолжительный цикл и после его выполнения посылает первому

Нулевой процесс выполняет продолжительный цикл и после его выполнения посылает первому

процессору значение вычислений цикла при помощи коммуникационной функции MPI_Send;
A) Первый процесс засекает время t1, выполняет блокирующую функцию MPI_Recv, засекает время t2, выводит присланное значение и затраченное время на ожидание и прием посылки.
B) Первый процесс засекает время t1, выполняет неблокирующую функцию MPI_Irecv, засекает время t2, выводит полученное значение и затраченное время на выполнение неблокирующей операции приема.
C) Первый процессор засекает время t1, выполняет неблокирующую функцию MPI_Irecv, засекает время t2, выполняет операцию MPI_Wait, засекает время t3, выводит полученное значение и затраченное время на выполнение неблокирующей операции приема и ожидание получения посылки.

кафедра ЮНЕСКО по НИТ

Задание1

Слайд 19

кафедра ЮНЕСКО по НИТ Задание2 — Пересылка данных по кольцу Init

кафедра ЮНЕСКО по НИТ

Задание2 — Пересылка данных по кольцу

Init

0

1

2

Каждый процессор помещает

свой ранг в целочисленную переменную buf.
Каждый процессор пересылает переменную buf соседу справа.
Каждый процессор суммирует принимаемое значение в переменную s, а затем передаёт принятое значение соседу справа.
Пересылки по кольцу прекращаются, когда каждый процессор получит то значение, с которого начал пересылки:
т.е. каждый процессор просуммирует ранги всех процессоров.
С целью исключения взаимоблокировки используются неблокирующие пересылки MPI_Isend.

next = (my_id+1) % np;
prev = (my_id-1+np) % np;