【问题标题】:C++ Message Passing Library like MPI [closed]C++ 消息传递库,如 MPI [关闭]
【发布时间】:2016-03-22 16:25:06
【问题描述】:

我目前正在实施基于消息分配的实施,以将计算密集型工作卸载到另一个配备 GPU 的节点。 所以我得到了一个主/从模型,主机生成数据并希望在从属(+附加的 GPU)上计算它。 到目前为止,我已经使用 OpenMPI 实现了这一点,我在这两个节点上启动我的程序并通过消息传递发送数据。 我现在要做的是更改从属设备的实现,使其永久运行并等待数据,直到某些主机连接到它。该主机可能是 Windows 或 linux 主机。 所以我不想用 mpirun 启动主从,而只是正常的主机,并希望它在运行时连接到我的从机。 另一个要求是我使用在编译时我不知道大小的模板类。我开始创建一个简单的 TCP 协议,它只是一个带有消息标签(无符号短)和有效负载/数据(作为联合)的结构。这是我无法在联合中使用模板类的问题(这是有道理的)。

所以,为了解决我的问题,我正在寻找一个具有最佳 MPI 类语法的消息传递高级库。有没有办法做到这一点? 喜欢使用 MPI 而不是 mpirun,而是在运行时连接到其他进程。

【问题讨论】:

  • zeromq 浮现在脑海中
  • @David, Severin:zeromq 的创建者发布了它的替代品 nanomsg
  • @BenVoigt 谢谢,很高兴知道

标签: c++ mpi message-passing


【解决方案1】:

MPI 确实提供了连接服务器/客户端进程的工具。这在the standard 的第 10.4 节中进行了讨论,一个用例是:

服务器想要接受来自多个客户端的连接。客户端和服务器都可以是并行程序。

基本上这涉及到,MPI_Open_port / MPI_Comm_accept 在服务器上,MPI_Comm_connect 在客户端。有一些(名称发布)用于建立连接。

但是,这似乎是一个很少使用的功能,我不确定不同的实现如何处理它。甚至标准警告,这并不是一个特别强大的解决方案。

虽然 Boost.MPI 似乎不直接支持这一点,但当您与 C 接口建立连接时,应该仍然可以使用 Boost.MPI 进行实际通信。

【讨论】:

  • Open MPI 实现了它。问题是MPI_Comm_accept 是一个阻塞调用,并且没有与select(2) 等效的调用。这意味着服务器必须一个接一个地处理客户端或线程化。使用 MPI 进行多线程处理,尤其是在 MPI_THREAD_MULTIPLE 上,是另一种蠕虫。
猜你喜欢
  • 2013-01-28
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
相关资源
最近更新 更多