MPI 中的非阻塞通信和 MPI 等待问题.并非所有信息都正确传递
Non Blocking communication in MPI and MPI Wait Issue. Not all information is passed correctly
我注意到并非所有MPI_Isend/MPI_IRecv都被执行。我认为这可能是我发送和接收的顺序,或者代码不会等到所有命令都执行的事实。我已经从下面的代码中复制了摘录。你能建议我做错了什么吗?
谢谢!
MPI_Status status[8];
MPI_Request request[8];
....
....
if ((my_rank) == 0)
{
MPI_Isend(eastedge0, Rows, MPI_DOUBLE, my_rank+1, 0, MPI_COMM_WORLD, &request[0]);
MPI_Irecv(westofwestedge0, Rows, MPI_DOUBLE, my_rank+1, MPI_ANY_TAG, MPI_COMM_WORLD, &request[6]);
MPI_Wait(&request[6], &status[6]);
}
if ((my_rank) == 1)
{
MPI_Irecv(eastofeastedge1, Rows, MPI_DOUBLE, my_rank-1, MPI_ANY_TAG, MPI_COMM_WORLD, &request[0]);
MPI_Wait(&request[0], &status[0]);
MPI_Isend(westedge1, Rows, MPI_DOUBLE, my_rank-1, 0, MPI_COMM_WORLD, &request[6]);
}
在此代码块执行后,等级 0 或 1 仍可能发送数据(因为您不等待发送请求对象)。如果在数据完成发送之前修改数据,这可能会导致问题。
对于这个特定的例子,也许MPI_Sendrecv有用?
对于对非阻塞 MPI 调用的每个调用,都必须有相应的等待。每个进程缺少一个等待。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- MPI突然停止了对多个核心的操作
- 如何设置一个范围来提取我想要获得的信息
- 设置 Visual Studio for MPI: 找不到标识符错误
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- 为什么 gcovr 会生成空覆盖率统计信息?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 重载 MPI 中的运算符 ()
- MPI:检查是否有任何进程已终止
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 我有 12 个 CPU,1 个插槽,每个插槽 6 个内核,每个内核 2 个线程 - 这些信息如何对应于 MPI 和 Op
- 使用 MPI 时"Top"输出哪些信息
- MPI 中的非阻塞通信和 MPI 等待问题.并非所有信息都正确传递