Здавалка
Главная | Обратная связь

MPI_RECV (buf, count, datatype, source, tag, comm, status)



buf начальный адрес буфера процесса-получателя (альтернатива)
count число элементов в принимаемом сообщении (целое)
datatype тип данных каждого элемента сообщения (дескриптор)
source номер процесса-отправителя (целое)
tag тэг сообщения (целое)
comm коммуникатор (дескриптор)
status параметры принятого сообщения (статус)

Буфер получения состоит из накопителя, содержащего последова­тельность элементов, размещенных по адресу buf.

Тип элементов указан в поле datatype. Длина получаемого сообщения должна быть равна или меньше длины буфера получения, в противном случае будет иметь место ошибка переполнения. Если сообщение меньше размера буфера получения, то в нем модифицируются только ячейки, соответствующие длине сообщения.

Прием сообщения осуществляется, если его атрибуты соответствуют значениям источника, тэга и коммуникатора, которые указаны в операции приема. Процесс-получатель может задавать значение MPI_ANY_SOURCE для отправителя и/или значение MPI_ANY_TAG для тэга, определяя, что любой отправитель и/или тэг разрешен. Нельзя задать произвольное значение для comm. Следовательно, сообщение может быть принято, если оно адресовано дан­ному получателю и имеет соответствующий коммуникатор.

Тэг сообщения задается аргументом tag операции приема. Аргумент отправителя, если он отличен от MPI_ANY_SOURCE, задается как номер внутри группы процессов, связанной с тем же самым коммуникатором. Следовательно, диапазон значений для аргумента от­правителя есть {0,...,n-1}U{MPI_ANY_SOURCE}, где n есть количество процессов в этой группе.

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

Допускается ситуация, когда имена источника и получателя совпадают, то есть процесс может посылать сообщение самому себе.

Возвращаемая статусная информация

Источник или тэг принимаемого сообщения могут быть неизвестны, если в операции приема были использованы значения типа ANY.

Иногда может потребоваться возвратить различные коды ошибок для каждого запроса. Эта информация возвращается с помощью аргумента status операции MPI_RECV.

Тип аргумента status определяется MPI. Статусные переменные размещаются пользователем явно, то есть они не являются системны­ми объектами.

В языке С statusесть структура, которая содержит три поля, называемые MPI_SOURCE, MPI_TAGи MPI_ERROR.Следовательно, status.MPI_SOURCE, status.MPI_TAGи status.MPI_ERRORсодержат источник, тэг и код ошибки принятого сообщения.

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







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.