2

我想要做的如下:

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

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

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

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

那么,我需要遵循什么样的方法来完成这些?我已经搜索了几天,每次阅读不同的教程时,我都会变得更加困惑。

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

4

1 回答 1

2

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

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

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

mpirun -np 3 ./client < a.fifo

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

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

于 2012-11-12T15:38:23.277 回答