MPI_Probe (source, tag, comm, status)
IN sourceномер источника или MPI_ANY_SOURCE IN tagзначение тэга или MPI_ANY_TAG IN commкоммуникатор OUT statusстатус (статус)
Функция MPI_Probeявляется блокирующей и заканчивается после того, как соответствующее сообщение было найдено. Функция MPI_Iprobe –является не блокирующей. Она просматривает всю очередь пришедших сообщений и возвращает значение flag = true, если сообщение с заданными в функции атрибутами, соответствующими аргументам source, tag и commдоставлено. В этом случае поля структуры status,которая является аргументом функции, инициализируются значениями, в соответствии с пробованным сообщением. В противном случае вызов возвращает flag = false, и оставляет status неопределенным. Все пришедшие сообщения выстраиваются в очередь до тех пор, пока не будет вызвана функция приема MPI_Recv, которая выбирает из очереди по заданным в функции атрибутам соответствующее сообщение. Сообщение принимается и системные ресурсы, используемые для данного обмена, освобождаются. Если в функциях MPI_Probeи MPI_Iprobe используются MPI_ANY_SOURCE и MPI_ANY_TAG, будет получена информация о первом пришедшем сообщении. Определить номер процесса-отправителя, значение tagи длины сообщенияможно, обращаясь к полям структуры status.Прииспользовании MPI_ANY_SOURCE и tagбудет получена информация о первом пришедшем сообщении с данным значением tag.Прииспользовании MPI_ANY_TAG и source будет получена информация о первом пришедшем сообщении от процесса с номером source. Аргумент status также возвращает информацию о длине принятого сообщения. Однако, эта информация не содержится как поле структуры status; чтобы получить значение длины принятого сообщения необходимо вызвать функцию MPI_GET_COUNT. MPI_GET_COUNT(status, datatype, count)
Операция MPI_Cancelмаркирует для отменыждущие выполнения не блокирующие операции обмена по указанному в параметре дескриптору запроса. MPI_Cancel (request) IN request -коммуникационный запрос (дескриптор)
Вызов MPI_Cancelзаканчивается немедленно. После маркировки отмены операции обмена необходимо ее завершить, используя вызов MPI_Waitили MPI_Test(или любые производные операции). Если обмен отмечен для отмены, то вызов MPI_Waitдля этой операции гарантирует ее завершение. Если используется буферизующий обмен (MPI_Ibsend), будет освобожден буфер, выделенный для обмена.
Отмена операции обмена и выполнение обмена одновременно выполняться не могут, либо выполняется обмен, либо выполняется его отмена. Если операция была отменена, то информация о произведенном действии будет возвращена в аргументе status той операции, которая выполняет обмен. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|