我正尝试通过经理进程向其他进程广播增强向量,如下所示:
MPI_Bcast(&b, N, MPI_DOUBLE, 0, MPI_COMM_WORLD);
其中b定义为:
boost::numeric::ublas::vector<double> b(N);
向量b由管理器进程初始化,然后广播到工作进程,但是,如果我打印出向量b,对于不是管理器进程的所有进程,我仍然会得到随机结果。我播放不正确吗? (要清楚,所有进程都在MPI_Bcast上调用,而不仅仅是管理器进程。)
答案 0 :(得分:1)
广播呼叫需要访问原始数据。 Boost uBLAS向量是不透明的数据结构,它不能保证原始数据在向量的开头(它可能是长度,指针或任何开发人员认为适合制作uBLAS向量的东西),或者它是否不会改变顺序在BOOST版本之间。同样适用于STL向量的典型技巧是获取向量的第一个元素并获取其地址
boost::numeric::ublas::vector<double> b(N);
MPI_Bcast(&b[0], N, MPI_DOUBLE, 0, MPI_COMM_WORLD);