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