听不懂MPI_Bcast
Can't understand MPI_Bcast
我用MPI_Bcast函数编写了简单的MPI程序,但我不明白为什么我的程序没有完成。
这是代码
#include "mpi.h"
int main(int argc, char* argv[]) {
int ProcNum, ProcRank, RecvRank;
MPI_Status Status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);
MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);
RecvRank = ProcRank;
MPI_Bcast(&RecvRank, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Recv(&RecvRank, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &Status);
MPI_Finalize();
return 0;
}
您的代码存在死锁。在MPI_Bcast
之后,你有一个没有匹配MPI_Send
的MPI_Recv
,这会导致你的代码挂起。我假设从你提问的方式来看,你认为你需要一个MPI_Recv
来接收通过MPI_Bcast
发送的信息,但这是不正确的。MPI_Bcast
命令本身(之后没有MPI_Recv
)将实现您想要的。
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- MPI突然停止了对多个核心的操作
- 设置 Visual Studio for MPI: 找不到标识符错误
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 重载 MPI 中的运算符 ()
- MPI:检查是否有任何进程已终止
- 使用 pybind11 共享 MPI 通信器
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- 在具有 MPI 的超立方体中广播
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 使用 MPI 的 C++ 中的并行 for 循环
- 如何将 OpenMP 和 MPI 导入到大型 CLion CMake 项目中?
- 如何通过Boost.MPI发送2d Boost.MultiArray的子阵列?
- HDF5 构建了并行支持,但找不到特定于 mpi 的功能
- MPI 集合通信中的指针分配
- 仅特定内核计数上的 MPI 内存损坏
- 使用动态分配的 Bcast、分散和收集时出现 MPI 隔离错误
- structs的std::vector的MPI BCast(广播)
- 具有线程支持和Bcast调用的MPI