为什么我不能在特定进程的范围内使用MPI_Scatter()
why i am not able to use MPI_Scatter() in the scope of a particular process?
我知道,在处理openMpi时没有全局变量的概念/含义,因此当特定线程更改变量时,变量的值仍将设置为其他进程中的默认值。我知道MPI_Scatter()的功能。
当我使用这样的内容时,
1. if(rank==0) {
//call to MPI_Scatter()
MPI_Scatter(data,8,MPI_FLOAT,pdata,4,
MPI_FLOAT,0,MPI_COMM_WORLD);
}
从这段代码中,每个进程(4)应该接收数组pdata中的8个浮点数。但是发生的事情是只有根进程(包含MPI_Scatter的进程)正在接收,其他进程仍然在pdata中具有初始值。
2. if(rank==0) {
//create a buffer to be used in the MPI_Scatter which will be called outside the socpe
FOR(i,0,16) {
data[i]=i ;
}
}
MPI_Scatter(data,8,MPI_FLOAT,pdata,4,
MPI_FLOAT,0,MPI_COMM_WORLD);
由于data[]是一个全局变量,该值不能被其他进程访问。在这种情况下,我仍然能够以一种完美的方式完成这一点。
从内存结构的角度解释这两点是非常有用的。
在您的第一个示例中,所有进程必须调用MPI_Scatter
才能使其"如所宣传的那样"工作。在您的代码中,只有根进程调用它。
相关文章:
- 用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 内存损坏
- 如何在 Mac OS 上安装 boost-mpi 及其对 clang 的依赖关系?
- 从Visual Studio 2017运行MPI应用程序,每个进程在不同的cmd窗口中
- 在 MPI 中共享数组的一部分