如何使用MPI广播增强矢量?

问题描述 投票:2回答:1

我试图从我的经理过程向其他进程广播一个boost向量,如下所示:

MPI_Bcast(&b, N, MPI_DOUBLE, 0, MPI_COMM_WORLD);

其中b定义为:

boost::numeric::ublas::vector<double> b(N);

向量b由管理器进程初始化,然后广播到工作进程,但是,如果我打印向量b,我仍然得到所有不是管理器进程的进程的随机结果。我播放不正确吗? (要清楚,所有进程都在调用MPI_Bcast,而不仅仅是管理器进程。)

c++ boost mpi broadcast openmpi
1个回答
1
投票

广播呼叫需要访问原始数据。提升uBLAS向量是不透明的数据结构,它不保证原始数据在向量的开头(它可能是长度,或指针,或任何开发人员认为制作uBLAS向量的好处),或者它是否不会改变顺序在BOOST版本之间。对STL向量起作用的典型技巧是获取向量的第一个元素并获取其地址

boost::numeric::ublas::vector<double> b(N);

MPI_Bcast(&b[0], N, MPI_DOUBLE, 0, MPI_COMM_WORLD);
© www.soinside.com 2019 - 2024. All rights reserved.