我目前正在实施基于消息协议的实现,以便将计算密集型工作卸载到配备GPU的另一个节点。 所以我得到了一个主/从模型,其中主机生成数据并希望它在从机(+附加GPU)上计算。 到目前为止,我已经使用OpenMPI实现了这一点,我在这两个节点上启动程序并通过消息传递发送数据。 我现在要做的是更改从属的实现,使其永久运行并等待数据,直到主机连接到它。这个主机可能是Windows或Linux主机。 所以我不想用mpirun启动master& slave,而只是主机,并希望它在运行时连接到我的slave。 另一个要求是我使用的模板类在编译时我不知道。我开始创建一个简单的TCP协议,它只是一个带有消息标记(unsigned short)和有效负载/数据(作为联合)的结构。这是我无法在联合中使用模板化类的问题(这是有道理的)。
所以,为了解决我的问题,我正在寻找一个消息传递的高级库,它具有类似MPI的语法。有没有办法做到这一点? 喜欢使用MPI而不是mpirun,而是在运行时连接到其他进程。
答案 0 :(得分:1)
MPI确实提供了连接服务器/客户端进程的工具。这在the standard的10.4节中讨论,一个用例是:
服务器希望接受来自多个客户端的连接。客户端和服务器都可以是并行程序。
基本上,这涉及服务器上的MPI_Open_port
/ MPI_Comm_accept
和客户端上的MPI_Comm_connect
。有一些(名称发布)用于建立连接。
然而,它似乎是一个很少使用的功能,我不确定不同的实现有多好处理它。即使标准警告,这也不是一个特别强大的解决方案。
虽然Boost.MPI似乎不直接支持,但当您与C接口建立连接时,应该可以使用Boost.MPI进行实际通信。