c++ - 如何使用 MPI 广播 boost vector ?

标签 c++ boost mpi broadcast openmpi

我正在尝试从我的管理器进程向其他进程广播 boost vector ,如下所示:

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

其中 b 定义为:

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

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

最佳答案

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

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

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

关于c++ - 如何使用 MPI 广播 boost vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55252648/

相关文章:

c++ - std::get 在切换到 Boost 1.64 时发生冲突

c - MPI_Gather 似乎不起作用

arrays - 二维数组的 MPI 数据类型

c++ - Qt 退出事件循环

c++ - boost 分词器 : Extra Space?

c++ - 使用相同的 key boost 访问许多 std::maps

c - 进程因信号 6 退出(已中止)

c++ - C++ 程序中存在大量杂散错误 - "error: stray ‘\210’”

c++ - 在 gdb 上格式化检查内存

c++ - 使用 FFmpeg 从音频和视频文件中混合