C MPI_Isend请求参数
当使用C MPI_Isend请求参数,c,mpi,C,Mpi,当使用MPI\u Isend时,MPI\u请求参数是否可以是空指针(当发送方不关心发送后的消息)?简短回答是否-请求句柄参数不能是null MPI_Isend()启动异步发送操作。所有异步操作都有一个请求句柄,以后必须通过以下方式之一对其进行操作: 使用MPI\u wait()和friends()阻止并等待操作完成 使用MPI\u test()和朋友测试操作是否完成,直到测试结果为阳性 使用MPI\u Request\u free()释放句柄 等待和测试功能都会在请求完成后释放请求。您还可以
MPI\u Isend
时,MPI\u请求
参数是否可以是空指针(当发送方不关心发送后的消息)?简短回答是否-请求句柄参数不能是null
MPI_Isend()
启动异步发送操作。所有异步操作都有一个请求句柄,以后必须通过以下方式之一对其进行操作:
- 使用
和friends()阻止并等待操作完成MPI\u wait()
- 使用
和朋友测试操作是否完成,直到测试结果为阳性MPI\u test()
- 使用
MPI\u Request\u free()释放句柄
MPI\u Isend()
返回后立即释放它。这不会取消操作,而是在完成后立即标记删除请求。但是,您将无法获取发送操作的状态
如果您不关心异步操作的结果(例如,完成状态、消息接收状态、错误代码等),正确的做法如下:
MPI_Request req;
...
MPI_Isend(..., &req);
MPI_Request_free(&req);
...
警告:这适用于异步发送,因为可以设计另一种方法来验证发送操作是否已完成,例如,目标进程可能在收到消息后响应。但是,不应该释放异步接收请求,而应该等待或测试完成,因为无法知道操作何时完成。试试看?如果不能,应该给出一个segfault。好的,我试过了,答案是否定的:MPI检查请求指针是否为空,否则会打印一个错误。这是正确的。我只想补充一点,一个人必须以某种方式完成一个
MPI\u请求
。MPI实现可以将发送消息的实际工作推迟到MPI_Wait
(或等效)调用。如果请求已启动但从未完成,则消息可能永远不会发送。谢谢!我扩展了“结果”一词,以更好地反映我的想法。