c++ - MPI如何使在根进程中初始化的变量在其他进程中可见

标签 c++ parallel-processing mpi

我有几个初始化数组 a0 的测试方法,但每个方法的数组大小不同。这些数组在进程 rank==0 中初始化。现在在其他文件中,我有一个方法的实现,该方法使用该表中的值进行一些计算(它不修改它们)。 它看起来有点像这样(伪代码):

res=0;
x=0;
for(i=mystart;i<myend;++i)
  for(j=0;j<length;++j)
    x+= a[j] * multiplier;

MPI_Reduce(&x,&res,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);

我有一个要求,即这些计算只能由 root 以外的进程处理,但由于它们看不到 a[] 持有什么值,所以它不起作用。我尝试了 MPI_Bcast(a, ?, MPI_DOUBLE, 0, MPI_COMM_WORLD),但我无法获得大小的值,因为它随每个方法调用而不同。整个代码有点大,但如果有人想看一下,我可以在某个地方发布它......

是否有一种简单的方法可以使这些字段对其他进程可见?

编辑: 按照建议我上传了代码: 主要功能:http://pastebin.com/tREeHMZM 计算和类声明的方法:http://pastebin.com/BBedJ7bA

划分循环工作正常,只是那些不起作用,我不确定如何让这些进程相互通信。

最佳答案

为什么不首先广播要广播的数组的大小?

关于c++ - MPI如何使在根进程中初始化的变量在其他进程中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35399167/

相关文章:

concurrency - 并行编程入门

python - 使用 PyCUDA 后无输出

c - C 语言中的 MPI 逐行矩阵乘法

c++ - 可变参数模板的声明点

c++ - Lua 比 C/C++ 更适合的示例用法

python - 在 python 2.4 中并行化循环

c++ - 调用 MPI_Win_create 时窗口如何匹配

c++ - 大型项目的 MPI 编码实践 multiple MPI_Finalize();或者只有一个?

c++ - 如何设置用户只能输入 4 位代码的限制?

c++ - 如何通过引用返回一个 vector ,隐含地期望一个空 vector 作为输入?