| |
Каждый вызов 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
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |