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

时间:2012-11-12 15:26:47

标签: c++ mpi

我想做的事情如下:

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

mpirun -np 3 ./client < a.fifo

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

通过dynamic process management命令可以在MPI-2中动态添加和删除MPI任务到通信器,但我从未使用它们,我不确定它们有多实用。根据您的目的,zeromq可能是更好的选择。它可以轻松地将数据广播和收集到变量并动态更改任务数量。