使用时MPI_Isend
,MPI_Request
参数是否可以为空指针(当发送方不关心消息发送后)?
问问题
15386 次
1 回答
30
简短的回答是否定的 - 请求句柄参数不能NULL
。
MPI_Isend()
启动异步发送操作。所有异步操作都有一个请求句柄,稍后必须通过以下方式之一对其进行操作:
- 阻止并等待操作完成与
MPI_Wait()
朋友 - 与朋友一起测试操作是否完成,
MPI_Test()
直到测试结果为阳性 - 释放手柄
MPI_Request_free()
一旦请求完成,等待和测试功能都会释放请求。您也可以在它返回后立即释放它MPI_Isend()
。这不会取消操作,而是在完成后立即标记删除请求。但是,您将无法获得发送操作的状态。
如果不关心异步操作的结果(如完成状态、消息接收状态、错误码等),正确的做法如下:
MPI_Request req;
...
MPI_Isend(..., &req);
MPI_Request_free(&req);
...
警告:这适用于异步发送,因为可以设计另一种方法来验证发送操作是否已完成,例如目标进程可能会在收到消息后响应。但是永远不应该释放异步接收请求,而是应该等待或测试完成,因为没有办法知道操作何时完成。
于 2012-06-04T15:08:34.180 回答