使用MPI_Isend
时,MPI_Request
参数是否可以为空指针(发送方不关心消息发送后的情况)?
最佳答案
简短的回答是否定的 - 请求句柄参数不能为 NULL
。
MPI_Isend()
启动异步发送操作。所有异步操作都被赋予一个请求句柄,稍后必须通过以下方式之一对该句柄进行操作:
- 阻塞并等待操作完成
MPI_Wait()
和 friend - 使用
MPI_Test()
和 friend 测试操作是否完成,直到测试结果为正 - 使用
MPI_Request_free()
释放句柄
一旦请求完成,等待和测试功能都会释放请求。您也可以在 MPI_Isend()
返回后立即释放它。这不会取消操作,而是在完成后立即标记删除请求。不过,您将无法获得发送操作的状态。
如果您不关心异步操作的结果(例如完成状态、消息接收状态、错误代码等),正确的做法如下:
MPI_Request req;
...
MPI_Isend(..., &req);
MPI_Request_free(&req);
...
警告:这适用于异步发送,因为可以设计另一种方法来验证发送操作是否已完成,例如目标进程可能会在收到消息后做出响应。但是永远不要释放异步接收请求,而应该等待或测试完成,因为没有办法知道操作何时完成。
关于c - MPI_Isend请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10882581/