繁体   English   中英

来自不同终端的不同进程与 MPI 通信

[英]Different processes from different terminals communicating with MPI

我想要做的是如下:

我想在一个服务器进程和多个客户端进程之间建立一种客户端 - 服务器类型的关系。 但我的问题是,这些客户端进程将在不同的终端窗口中运行,并且需要标准输入。 因此,使用相同的mpirun调用运行 MPI 程序对我不起作用,例如:

mpirun -np 2 --stdin 1 ./server : -np 3 ./client

在这个例子中,标准输入也只针对一个进程,这对我来说当然是另一个缺点。

最后一点是,我希望能够随时创建一个新的客户端进程,它也可以与正在运行的服务器进程通信。

那么,我需要遵循什么样的方法来完成这些? 我一直在寻找几天,每次阅读不同的教程时,我只会变得更加困惑。

背景信息,如有必要:我在 Ubuntu 12.04 上运行并使用 Boost MPI。 尽管如此,欢迎提出有关任何平台/MPI 实施的建议。

您可以做的一件事是设置一个fifo。 它看起来像这样:在一个终端中,执行以下操作:

mkfifo a.fifo
tee a.fifo | mpirun -np 2 ./server

然后在另一个终端中,执行:

mpirun -np 3 ./client < a.fifo

不过,这不是最优雅的解决方案。 此外,这仅处理标准输入部分,而不是使它们成为同一通信器的一部分。

在 MPI-2 中可以通过动态进程管理命令动态地向通信器添加和删除 MPI 任务,但我从未使用过它们,我不确定它们的实用性。 根据您尝试执行的操作, zeromq可能是更好的选择。 它可以轻松地将数据广播和收集设置为可变且动态变化的任务数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM