next up previous contents
Next: Блокирующий прием Up: Операции блокирующей передачи и Previous: Данные в сообщении   Contents

Атрибуты сообщения

В дополнение к описанию данных сообщение несет информацию, которая используется, чтобы различать и выбирать сообщения. Эта информация состоит из фиксированного количества полей, которые в совокупности называются атрибутами сообщения (message envelope). Эти поля таковы: source, destination , tag , communicator (номер процесса-отправителя сообщения, номер процесса-получателя, тэг, коммуникатор).

Целочисленный аргумент тэг (tag) используется, чтобы различать типы сообщений. Диапазон значений тэга находится в пределах 0,... ,UB, где верхнее значение UB зависит от реализации. Оно может быть определено путем опроса значения атрибута MPI_TAG_UB, как описано в главе 7. MPI требует, чтобы UB было не менее, чем 32767.

Аргумент comm описывает коммуникатор (communicator), который используется в операции обмена. Коммуникаторы объясняются в главе 5, ниже дается краткое изложение их использования.

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

Коммуникатор также описывает ряд процессов, которые разделяют этот коммуникационный контекст. Эта группа процессов (process group) упорядочена и процессы определяются своим номером внутри этой группы. Вследствие этого диапазон значений для dest - 0, ... , n-1, где n - число процессов в группе. (Если коммуникатор является интеркоммуникатором, тогда процессы-получатели идентифицируются их номером в удаленной группе (cм. главу 5).

В MPI предопределен коммуникатор MPI_COMM_WORLD. Он разрешает обмен для всех процессов, которые доступны после инициализации MPI, и процессы идентифицируются их номером в группе MPI_COMM_WORLD.

Совет пользователям: Пользователям, которые знакомы с обозначениями для однородного пространства имен процессов и единственным коммуникационным контекстом (так сделано в большинстве существующих коммуникационных библиотек) нужно использовать только предопределенную переменную MPI_COMM_WORLD в качестве аргумента comm. Это позволяет производить обмен для всех процессов, доступных во время инициализации.

Как показано в главе 5, пользователь может определить новые коммуникаторы. Коммуникаторы обеспечивают важный инкапсуляционный механизм для библиотек и модулей. Они позволяют модулям иметь их собственное выделенное коммуникационное пространство и их собственную схему нумерации процессов.[]

Совет разработчикам: Желательно было бы кодировать атрибуты сообщения в формате фиксированной длины. Однако реальное кодирование зависит от реализации. Некоторая информация (например, имя источника или приемника) может быть неявной и не передаваться сообщением явно. Процессы также могут быть идентифицированы относительным, абсолютным номером и т.д.[]



Alex Otwagin 2002-12-10