Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Processes - Metodicka (edited) with MPI - last....doc
Скачиваний:
61
Добавлен:
22.12.2018
Размер:
1.59 Mб
Скачать
      1. Прием и передача данных. Общие замечания.

Прежде чем перейти к рассмотрению функций, непосредственно относящихся к организации обмена сообщениями между ветвями, остановимся на некоторых важных общих моментах, таких как атрибуты сообщения и поддержка типизации данных в MPI.

Сообщения и их атрибуты.

Каждое сообщение MPI обладает следующим набором атрибутов:

  • Номер ветви-отправителя

  • Номер или номера ветвей-получателей

  • Коммуникатор, т.е. описатель коммуникационного контекста, в котором данное сообщение передается

  • Тип данных, образующих тело сообщения

  • Количество элементов указанного типа, составляющих тело сообщения

  • Тэг, или бирка сообщения

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

Тэг сообщения представляет собой целое число, аналог типа сообщения в механизме очередей сообщений IPC. Интерпретация этого атрибута целиком возлагается на саму программу.

Поддержка типов данных в mpi.

В отличие от других средств межпроцессного взаимодействия, рассмотренных нами ранее, в MPI требуется явное указание типа данных, образующих тело сообщения. Причина этого заключается в том, что библиотека MPI берет на себя заботу о корректности передачи данных в случае использования ее в гетерогенной (т.е. состоящей из разнородных узлов) среде. Одни и те же типы данных на машинах разных архитектур могут иметь различное представление (к примеру, в архитектуре Intel представление целых чисел характеризуется расположением байт от младшего к старшему, в то время как в процессорах Motorola принято обратное расположение; кроме того, на разных машинах один и тот же тип может иметь разную разрядность и выравнивание). Очевидно, что в такой ситуации передача данных как последовательности байт без соответствующих преобразований приведет к их неверной интерпретации. Реализация MPI производит необходимые преобразования данных в теле сообщения перед его посылкой и после получения, однако для этого необходима информация о типе данных, образующих тело сообщения.

Для описания типов данных в MPI введен специальный тип – MPI_Datatype. Для каждого стандартного типа данных Си в заголовочном файле библиотеки описана константа типа MPI_Datatype; ее имя состоит из префикса MPI_ и имени типа, написанного большими буквами, например, MPI_INT, MPI_DOUBLE и т.д. Кроме этого, MPI предоставляет широкие возможности по конструированию описателей производных типов, однако их рассмотрение выходит за рамки данного пособия.

Параметр типа MPI_Datatype, описывающий тип данных, образующих тело сообщения, присутствует во всех функциях приема и передачи сообщений MPI.

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

      1. Коммуникации «точка-точка». Блокирующий режим.

Библиотека MPI предоставляет возможности для организации как индивидуального обмена сообщениями между парой ветвей – в этом случае у каждого сообщения имеется единственный получатель – так и коллективных коммуникаций, в которых участвуют все ветви, входящие в определенный коммуникационный контекст.

Рассмотрим сначала функции MPI, используемые для отправки и получения сообщений между двумя ветвями – такой способ обмена в литературе часто носит название коммуникации «точка-точка».

Библиотека MPI предоставляет отдельные пары функций для реализации блокирующих и неблокирующих операций приема и посылки данных. Заметим, что они совместимы друг с другом в любых комбинациях, например, для отправки сообщения может использоваться блокирующая операция, а для приема этого же сообщения – неблокирующая, и наоборот.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]