c - MPI_Isend请求参数

标签 c mpi

使用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/

相关文章:

c++ - apple cpp 破坏宏参数粘贴

c - PathFindExtensionW 始终返回 "."而不是完整扩展名

cuda - 什么会导致 nvprof 不返回数据?

c - MPI_Send 或 MPI_Recv 的限制?

c++ - MPI 段错误

c - MPI创建的进程的共享内存访问控制机制

c - 以编程方式并行化 C 程序的一部分

C_(视觉)_调试错误_运行时检查失败#2 -S

c - 在C中实现字符串复制函数

linux - 如何在 Centos 7 中使用 firewalld 启用 MPI mpirun