MPI_RECV (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 Все права принадлежат авторам размещенных материалов.
|