In MPI-3.1, it is valid to call MPI_Cancel on send requests. This is hard to implement efficiently. For example, some MPI implementations are required to send additional information (such as a sequence number) with each operation to allow for operations to be potentially cancelled. The original reason to add cancel capability for send operations was for symmetry with receive operations. But that reason is no longer true since cancel operations are not support for nonblocking collective communication, RMA or file I/O operations.
-Proposal:* Make the usage of cancel for send requests undefined. Implementations are free to implement it if they like, but the user cannot rely on it functioning correctly. Specifically, calling MPI_Cancel on send requests is valid (not erroneous), but the implementation is free to return unsuccessful cancelation irrespective of the state of the request. The above is the de facto state of MPI implementations today. Some (though very few) implementations implement it correctly. Users do not use it since most implementations cannot implement it correctly.
-Changes to the text:*
MPI-3.1 standard, page 72, lines 9--10:
-A call to MPI_CANCEL marks for cancellation a pending, nonblocking communication operation (send or receive).*
should change to
-_A call to MPICANCEL marks for cancellation a pending, nonblocking send or receive operation.*
MPI-3.1 standard, page 72, lines 25--29:
-If a send is marked for cancellation, then it must be the case that either the send completes normally, in which case the message sent was received at the destination process, or that the send is successfully cancelled, in which case no part of the message was received at the destination. Then, any matching receive has to be satisfied by another send.*
should change to:
-It is valid (not erroneous) to cancel nonblocking send requests. However, the MPI implementation is not required to attempt a cancellation for such requests. If a send cancellation is successful, the receiver will not observe the message, for example, through a receive, probe, or buffer manipulation.*
-Impact on Implementations:* Joy and celebration.
-Impact on Users:* Huh? Send cancellation was allowed earlier?
-References:*
Ticket #478: clarify MPI_Cancel for send requests (aimed for MPI-3.1 errata)
Ticket #479: Update MPI_Cancel to be undefined for send requests (aimed for MPI-3.2)
Ticket #480: Update MPI_Cancel to be erroneous for send requests (aimed for MPI-4)
Originally by balaji on 2015-06-05 11:19:39 -0500
In MPI-3.1, it is valid to call MPI_Cancel on send requests. This is hard to implement efficiently. For example, some MPI implementations are required to send additional information (such as a sequence number) with each operation to allow for operations to be potentially cancelled. The original reason to add cancel capability for send operations was for symmetry with receive operations. But that reason is no longer true since cancel operations are not support for nonblocking collective communication, RMA or file I/O operations.
-Proposal:* Make the usage of cancel for send requests undefined. Implementations are free to implement it if they like, but the user cannot rely on it functioning correctly. Specifically, calling MPI_Cancel on send requests is valid (not erroneous), but the implementation is free to return unsuccessful cancelation irrespective of the state of the request. The above is the de facto state of MPI implementations today. Some (though very few) implementations implement it correctly. Users do not use it since most implementations cannot implement it correctly.
-Changes to the text:*
MPI-3.1 standard, page 72, lines 9--10:
-A call to MPI_CANCEL marks for cancellation a pending, nonblocking communication operation (send or receive).*
should change to
-_A call to MPICANCEL marks for cancellation a pending, nonblocking send or receive operation.*
MPI-3.1 standard, page 72, lines 25--29:
-If a send is marked for cancellation, then it must be the case that either the send completes normally, in which case the message sent was received at the destination process, or that the send is successfully cancelled, in which case no part of the message was received at the destination. Then, any matching receive has to be satisfied by another send.*
should change to:
-It is valid (not erroneous) to cancel nonblocking send requests. However, the MPI implementation is not required to attempt a cancellation for such requests. If a send cancellation is successful, the receiver will not observe the message, for example, through a receive, probe, or buffer manipulation.*
-Impact on Implementations:* Joy and celebration.
-Impact on Users:* Huh? Send cancellation was allowed earlier?
-References:*