Thank you for the detailed explanation. The described intent makes sense, but I am not sure how this statement follows from the standard: 2015-11-02 15:41 GMT+01:00 William Gropp <[email protected]>:
However, note that if the cancel fails, then the communication is not marked for cancellation, and an MPI_Wait could then wait until the message is received.
The standard says that "[a] call to MPI_CANCEL marks for cancellation a pending, nonblocking communication operation". It does not say that the cancellation has to suceed, but it does say that MPI_Cancel marks the operation for cancellation -- unconditionally, as far as I can see (unless an error occurs, of course -- but that wasn't what you meant by the cancel failing, or was it?). From this and the statement I cited previously ("[i]f a communication is marked for cancellation, then a MPI_WAIT call for that communication is guaranteed to return, irrespective of the activities of other processes (i.e., MPI_WAIT behaves as a local function)") it follows by modus ponens that MPI_Wait for a request on which MPI_Cancel has been called must behave as a local function. Am I interpreting this incorrectly? Once again, thank you for your time. Marek Tomáštík