В 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
может
привести к непредсказуемым результатам и настоятельно не рекомендуется.