如何使用 MPI 广播提升向量?

Posted

技术标签:

【中文标题】如何使用 MPI 广播提升向量?【英文标题】:How to broadcast a boost vector using MPI? 【发布时间】:2019-08-10 16:01:53 【问题描述】:

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

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

其中 b 定义为:

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

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

【问题讨论】:

也许是 b.data() 或 &b[0] ?基本上,如果向量的大小是第一个然后是数据,你会得到垃圾。 @SeverinPappadeux .data() 不起作用,但是 &b[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);

【讨论】:

以上是关于如何使用 MPI 广播提升向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在自制软件上使用 mpi 支持来构建提升?

MPI在C ++中发送具有向量属性的结构

All to All 广播实现和 MPI

当某些进程找到解决方案时,MPI 结束程序与广播

MPI_ERR_TRUNCATE:广播

mpi4py 在函数之间广播 numpy 数组