问题标签 [boost-mpi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
141 浏览

c++ - boost::mpi 和 boost::序列化错误

我使用 openmpi 和 linux mint,考虑以下示例:

编译:mpic++ -std=c++0x test.cc -lboost_serialization -lboost_mpi
运行:mpirun -np 2 ./a.out
输出:从属接收=3664010 msg=3664010
从属接收=3664012 msg=3664012
从属接收=3664012 msg= 3664012

只有当所有消息的长度相等时,才会重现错误。例如,如果第二条消息是“3664012andmore”,一切正常:
slave received=3664010 msg=3664010
slave received=3664010 msg=3664012andmore
slave received=3664010 msg=3664012andmore
slave received=3664010 msg=3664012andmore

看起来 dst 和 msg 使用相同的内存缓冲区。只有当字符串长度不同时,它们才会开始使用不同的内存缓冲区。我使用以下解决方法(msg = string()) 告诉编译器 msg 已更改:

它工作正常。有没有更好的解决方案?谢谢你。

0 投票
1 回答
156 浏览

multithreading - 提升 mpi MPI_THREAD_MULTIPLE

我使用带有 MPI_THREAD_MULTIPLE 支持的 mpich。来自 boost 文档:
对于可变长度数据,例如,序列化类型和打包存档,将通过 MPI_Send 发送两条消息:一条包含数据长度,第二条包含数据本身

将具有相同标签的序列化类型从不同线程发送到相同等级是否安全?Receive rank 只有一个线程用于接收消息

0 投票
3 回答
215 浏览

c++ - 是否可以强制 MPI 始终阻止发送?

有没有办法强制 MPI始终阻止发送?这在寻找分布式算法中的死锁时可能很有用,否则依赖于缓冲 MPI 可能选择在 send 上执行

例如,以下程序(使用 2 个进程运行)在我的机器上运行没有问题:

但是,如果我将缓冲区的大小更改为10000,它会无限期地阻塞。

0 投票
1 回答
205 浏览

c++ - 带有 boost::mpi::packed_oarchive 和 packed_iarchive 的未知子类的 MPI 传输

我正在尝试传输一类未知的子类,但已知的基类。

我相信这应该可以使用boost::serialization, BOOST_CLASS_EXPORT_GUIDboost::mpi,但总的来说我对 C++ 还是很陌生

这是我拥有的代码:

编译/运行:

这似乎运行得很好:

...直到到达“发送/接收未知操作类”,我得到运行时错误:

问题:

  1. 尽管问题被标记为boost,但是否有可能在有或没有提升的情况下传输一个未知的子类?我知道我可以通过字符串名称进行各种注册,以及一个控制反转的人来处理创建,但我认为这是BOOST_CLASS_EXPORT_GUID.
  2. 有没有办法用我所拥有的来完成这项工作?
  3. 是否有一个相当简单的替代方案(不使用boost)来使这项工作与常规的 ol' MPI 一起工作?
0 投票
1 回答
87 浏览

c++ - Boost.MPI recv 到现有向量的切片中

上述是否有效且可用于接收和更新向量的子集?

如果没有,除了 recv 和 copy 之外,还有其他等效的选择吗?

0 投票
1 回答
207 浏览

c++ - 如何使用 boost_mpi 发送字符串类型?

我正在尝试使用 boost mpi 传递更复杂的数据类型。我正在http://theboostcpplibraries.com/boost.mpi-simple-data-exchange中实现示例代码

首先,我尝试将字符串作为字符数组发送,该字符串适用于上述教程示例 47.5。代码是:

我可以使用以下命令编译并运行它:

mpic++ -std=c++0x 3.cpp -o 3 -lboost_mpi

mpiexec -np 3 ./3

然后,我尝试将类型更改为字符串(来自同一教程示例 47.5):

当我编译并链接此代码时,出现以下错误:

任何帮助将不胜感激。

0 投票
1 回答
506 浏览

c++ - 如何有效地使用 boost mpi 广播功能?

我正在尝试从根进程广播一个值并在所有其他进程中接收它。我已经以以下两种格式实现了它。1.我在所有进程(root和所有其他slave)中都使用了广播功能

2.我只从root调用广播,而从其他进程调用接收如下:

在这些示例中,两者的工作方式似乎相似,但我想知道这里在代码效率和性能方面是否有任何偏好。

谢谢!

0 投票
2 回答
88 浏览

c++ - 如何使用 boost MPI(我使用 MPICH 编译器)出现死锁场景?

我试图找出在什么情况下可能阻塞的 boost mpi“发送”实际上会阻塞并导致死锁。

但它运行得很好,并且按照这个顺序:

如果有人能给我一个我实际上陷入僵局的场景,我将不胜感激。潜在的阻塞提升 mpi 是如何工作的?

谢谢你。

0 投票
1 回答
281 浏览

c++ - 如何在实时流应用程序上使用 mpi?

我有 2 个进程,一个进程将数据包流式传输到另一个进程,直到内部中断停止该进程(发送的进程)。我希望有一种机制,其他进程可以接收,直到此通道上有任何消息要接收。

除了将停止命令也作为消息传输之外,还有什么方法可以做到这一点?我不希望将完成/中断作为另一条消息发送,因为在某些情况下中断可能会杀死发送方进程。

0 投票
0 回答
78 浏览

python - mpi.gather 不适用于 python 的 boost.mpi

我正在尝试在 boost.mpi 中为 python 使用 mpi.gather,如下所示。

当我使用以下命令运行程序时,

输出是

(数字的顺序可能会改变。)

但是,当我将valuempi.gather 中的参数设置为布尔类型以外的其他内容时,它会卡住。你知道为什么会这样吗?

我使用 mpich2(版本 3.0.4)、boost 1.61.0 和 python 3.5.1。提前致谢。

更新:不起作用的代码如下所示:

我用 运行了上面的程序mpirun -n 3 python mpi_test.py,得到了以下结果(同样,数字的顺序可能不同),

该程序也应该输出 0 但它卡住了。我尝试了几个要使用的进程,但它总是卡在未打印的根级别上。

似乎程序仅在value设置为False或时才结束True