Каждый вызов MPI_RECV
включает аргумент status, в котором система
может возвращать подробности относительно полученного сообщения. Имеется
также ряд других вызовов MPI, особенно в MPI-2, где возвращен
status
. Объект типа MPI_STATUS
не является MPI
непрозрачным объектом; его структура объявлена в mpi.h
и mpif.h
, и
он существует в программе пользователя. Во многих случаях, прикладные
программы созданы так, что им не нужно исследовать поля status
. В этих
случаях пользователю не нужно разбирать объект состояния, и
это особенно расточительно для реализации MPI - заполнять поля в
этом объекте.
Чтобы справиться с этой проблемой, есть две предопределенные константы
MPI_STATUS_IGNORE
и MPI_STATUSES_IGNORE
, которые
при передаче в функции получить, ждать или проверить сообщают
реализации, что поля состояния не должны быть заполнены. Обратите внимание,
что MPI_STATUS_IGNORE
не является специальным типом объекта
MPI_STATUS
; скорее, это - специальное значение для аргумента. В Си можно было бы ожидать, что это будет NULL
, а не адрес специального
MPI_STATUS
.
MPI_STATUS_IGNORE
и массивная версия
MPI_STATUSES_IGNORE
может использоваться всюду, где аргумент
состояния передают в функцию получить, ждать или проверить.
MPI_STATUS_IGNORE
не может использоваться, когда состояние
является аргументом IN. Обратите внимание, что в языке ФОРТРАН MPI_STATUS_IGNORE
и MPI_STATUSES_IGNORE
являются
объектами подобными MPI_BOTTOM
(не пригодный для инициализации
или назначения). См. Раздел 2.5.4.
Вообще, эта оптимизация может обращаться ко всем функциям, для которых
status
или массив statuses
является аргументом OUT. Обратите
внимание, что это преобразовывает status
в аргумент INOUT. Функции,
которые могут передавать MPI_STATUS_IGNORE
, являются различными
формами MPI_RECV
, MPI_TEST
и MPI_WAIT
, а также
MPI_REQUEST_GET_STATUS
. Когда массив передается, как в функциях
ANY и ALL, отдельная константа, MPI_STATUSES_IGNORE
передается
для аргумента массива. Это возможно для функции MPI, чтобы возвратить
MPI_ERR_IN_STATUS
даже тогда, когда MPI_STATUS_IGNORE
или
MPI_STATUSES_IGNORE
переданы в эту функцию.
MPI_STATUS_IGNORE
и MPI_STATUSES_IGNORE
не требуют
иметь те же самые значения в языках Си и ФОРТРАН.
Они не позволяют иметь некоторые из состояний в массиве состояний для функций
_ANY
и _ALL
; установить MPI_STATUS_IGNORE
; один или
определяет игнорирование всех состояний в таком вызове с
MPI_STATUSES_IGNORE
, или ни в одном из них, передавая нормальные
состояния во всех позициях в массиве состояний.
Нет никаких привязок С++ для MPI_STATUS_IGNORE
или
MPI_STATUSES_IGNORE
. Чтобы позволять OUT или INOUT аргументу
MPI::Status
игнорироваться, все MPI привязки С++, которые
имеют OUT или INOUT параметры MPI::Status
, перегружены второй версией,
которая опускает OUT или INOUT параметр MPI::Status
.
Пример 4.6 Привязки С++ для MPI_PROBE
:
void MPI::Comm::Probe(int source, int tag, MPI::Status& status) const
void MPI::Comm::Probe(int source, int tag) const