MPI_Isend请求参数

时间:2012-06-04 13:58:36

标签: c mpi

使用MPI_Isend时,MPI_Request参数是否为空指针(发件人在发送后不关心该消息)?

1 个答案:

答案 0 :(得分:26)

简短回答是否定的 - 请求句柄参数不能是NULL

MPI_Isend()启动异步发送操作。所有异步操作都有一个请求句柄,必须在以下方法之一中对其进行操作:

  • 阻止并等待操作完成MPI_Wait()和朋友
  • 使用MPI_Test()和朋友测试完成操作,直到测试结果为正
  • 使用MPI_Request_free()
  • 释放句柄

等待和测试功能一旦完成,就会释放请求。您可以在MPI_Isend()返回后立即释放它。这不会取消操作,而是在完成后立即标记删除请求。您将无法获得发送操作的状态。

如果您不关心异步操作的结果(例如完成状态,消息接收状态,错误代码等),正确的做法如下:

MPI_Request req;
...
MPI_Isend(..., &req);
MPI_Request_free(&req);
...

警告:这适用于异步发送,因为可以设计另一种方法来验证发送操作是否已完成,例如:目标进程可能在收到消息后响应。但是,永远不应该释放异步接收请求,并且应该等待或测试完成,因为无法知道操作何时完成。