使用MPI_Isend
时,MPI_Request
参数是否为空指针(发件人在发送后不关心该消息)?
答案 0 :(得分:26)
简短回答是否定的 - 请求句柄参数不能是NULL
。
MPI_Isend()
启动异步发送操作。所有异步操作都有一个请求句柄,必须在以下方法之一中对其进行操作:
MPI_Wait()
和朋友MPI_Test()
和朋友测试完成操作,直到测试结果为正MPI_Request_free()
等待和测试功能一旦完成,就会释放请求。您可以在MPI_Isend()
返回后立即释放它。这不会取消操作,而是在完成后立即标记删除请求。您将无法获得发送操作的状态。
如果您不关心异步操作的结果(例如完成状态,消息接收状态,错误代码等),正确的做法如下:
MPI_Request req;
...
MPI_Isend(..., &req);
MPI_Request_free(&req);
...
警告:这适用于异步发送,因为可以设计另一种方法来验证发送操作是否已完成,例如:目标进程可能在收到消息后响应。但是,永远不应该释放异步接收请求,并且应该等待或测试完成,因为无法知道操作何时完成。