集群节点之间如何通信?

时间:2018-10-13 19:53:43

标签: mpi hpc slurm

这不是关于特定集群环境的问题,而是关于在集群上的多个节点上分发软件的一般情况。

我了解到,大多数HPC群集使用某种工作负载管理器将作业分配到多个节点。根据我的有限研究,Slurm似乎是一个受欢迎的选择,但其他人也正在使用。

如果您要运行n个独立任务,我可以看到它的用处。但是,如果您想运行彼此通信的任务怎么办?

如果我正在开发一个应用程序,该应用程序分布在两台或更多台计算机上,那么我可以设计一个简单的协议(或使用现有协议),并通过诸如TCP / IP之类的协议发送/接收消息。如果事情真的很复杂,那么设计一个简单的消息总线或消息中心以容纳两台以上的机器就不会太困难。

首先,在HPC集群中使用TCP是否明智,或者出于性能原因通常不使用TCP?

第二,在非集群环境中,我事先知道所涉及机器的IP地址,但是在群集上,我将决定将我的软件部署到哪台物理机器上的决定交给Slurm等工作负载管理器。那么如何“连接”节点? MPI是如何实现这一目标的?或者它不使用TCP / IP来允许节点之间的通信?

很抱歉,如果这个问题对StackOverflow来说是开放式的,那么如果有合适的地方提出这样的问题,我很乐意将其移至其他位置。

1 个答案:

答案 0 :(得分:1)

  

如果我正在开发一个分为两个或多个的应用程序   机器,我可以设计一个简单的协议(或使用现有协议   一个),然后通过TCP / IP之类的消息发送/接收消息

因此MPI到来了,所以并不是每个人都会重新发明轮子(轮子是数千个小时的工程时间,它不是您的基本战车轮子,它已经走过了一些非常坎bump的道路…… )。
但这最终是MPI所做的(在您希望通过TCP进行通信的情况下,请参见OpenMPI TCP

  

首先,在HPC群集中使用TCP是否明智?   通常出于性能原因不使用?

它们是TCP以外的其他通信方式(共享内存,Myrinet,OpenFabrics通信,...)OpenMPI FAQ)。在HPC中,它们是市场上有关互连(请参见Top 500

的一些解决方案。
  

那么我如何“连接”节点? MPI如何实现这一目标?   不使用TCP / IP来允许节点之间的通信?

接线由工作量管理器管理(您可以查看slurm configurationloadleveler)。 MPI只会从该上下文“继承”,因为在HPC上下文中,您停止使用mpirunsrunrunjob(而不是像Specify the machines running program using MPI这样的事情) >