next up previous contents
Next: Именование объектов Up: Внешние интерфейсы Previous: Примеры   Contents

Ассоциирование информации со статусом

В MPI-1 запросы были связаны с двухточечными операциями. В MPI-2 запросы могут быть также связаны с вводом-выводом или, через механизм обобщенных запросов, с определяемыми пользователем операциями. Все эти запросы можно сделать с помощью MPI_{TEST|WAIT}{ANY|SOME|ALL}, которые возвращают статус объекта с информацией о запросе. Статус содержит пять значений, из которых три являются доступными как поля и два, ``счетчик'' и ``отменен'', скрытыми. MPI-1 представляет функции доступа для восстановления этих скрытых полей. Соответственно, чтобы для MPI-2 обобщенные запросы могли работать, функция query_fn, введенная в предыдущей секции, должна иметь доступ к этим двум полям. Две подпрограммы, описанные в этой секции, обеспечивают эти функциональные возможности. Значения, явно не устанавливаемые, являются неопределенными.

MPI_STATUS_SET_ELEMENTS(status, datatype, count)

INOUT status Статус, связанный со счетчиком (статус)  
IN datatype Тип данных, связанный со счетчиком (указатель)  
IN count Число элементов, связанных со счетчиком (целое)  

int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count)

MPI_STATUS_SET_ELEMENTS (STATUS, DATATYPE, COUNT, IERROR) INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERROR void MPI::Status::Set_elements(const MPI::Datatype& datatype, int count)

Этот запрос изменяет скрытую часть статуса и вызов MPI_GET_ELEMENTS будет возвращать счетчик. MPI_GET_COUNT возвратит совместимое значение.

Объяснение: Число элементов устанавливается вместо счетчика типов данных, потому что последний может оперировать с нецелыми типами данных.

Последующий вызов MPI_GET_COUNT (status, datatype, count) или
MPI_GET_ELEMENTS (status, datatype, count) должен обрабатывать аргумент datatype, который имеет то же самое значение, что и аргумент datatype, который использовался при вызове
MPI_STATUS_SET_ELEMENTS.

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

MPI_STATUS_SET_CANCELLED(status, flag)

INOUT status Статус, связанный со счетчиком (статус)  
IN flag Если истинен, то показывает, что запрос отменен (логический )  

int MPI_Status_set_cancelled(MPI_Status *status, int flag)

MPI_STATUS_SET_CANCELLED(STATUS, FLAG, IERROR) INTEGER STATUS(MPI_STATUS_SIZE), IERROR LOGICAL FLAG

void MPI::Status::Set_cancelled(bool flag)

Если flag установлен в ``истину''(true), то последующий вызов MPI_TEST_CANCELLED(status,flag) также вернет flag=true, в противном случае он вернет false.

Совет пользователям: Пользователям мы советуем не использовать повторно поля статуса со значениями, отличными от тех, для которых они предназначены. Такие действия могут привести к неожиданным результатам при использовании статуса объекта. Например, вызывая MPI_GET_ELEMENTS можно спровоцировать ошибку, если значение входит из диапазона, кроме того, может быть невозможно обнаружить такую ошибку. Экстра-State аргумент, переданный обобщенному запросу, может использоваться для возврата информации, которая логически не принадлежит статусу. Кроме того, модификация значений в статусе - внутренняя задача MPI, например, MPI_RECV может привести к непредсказуемым результатам и настоятельно не рекомендуется.



Alex Otwagin 2002-12-10