如果使用的MPI是MPICH2,MPI程序将使用多少tcp连接来发送数据?如果您也了解pmi连接,请单独计算。
例如,如果我有4个进程和另外2个Communicator(第一和第二进程的COMM1和第三和第四进程的COMM2);数据在每对可能的进程之间发送;在每一个可能的沟通者中。
我使用最近的MPICH2 + hydra +默认pmi。 OS是linux,网络是交换式以太网。分离的PC上的每个进程。
所以,这里是数据的一部分(成对的过程):
1 <-> 2 (in MPI_COMM_WORLD and COMM1)
1 <-> 3 (only in MPI_COMM_WORLD)
1 <-> 4 (only in MPI_COMM_WORLD)
2 <-> 3 (only in MPI_COMM_WORLD)
2 <-> 4 (only in MPI_COMM_WORLD)
3 <-> 4 (in MPI_COMM_WORLD and COMM2)
我认为可以有
仅使用6个tcp连接; COMM1和MPI_COMM_WORLD中发送的数据将在单个tcp连接中混合使用。
8个tcp连接:MPI_COMM_WORLD中的6个(全部到全部=全网格)+ COMM1中的1 <-> 2
为1 + COMM2中的3 <-> 4
为1 {/ p>
答案 0 :(得分:3)
正在使用哪些通信器不会影响已建立的TCP连接数。对于--with-device=ch3:nemesis:tcp
(默认配置),您将在通过点对点MPI例程直接通信的每对进程之间使用一个双向TCP连接。在您的示例中,这意味着6个连接。如果您使用集体,那么可以建立额外的连接。只会根据需要懒惰地建立连接,但一旦建立,它们将保持建立状态,直到MPI_Finalize
(有时也称MPI_Comm_disconnect
)被调用。
我不知道PMI的每个进程使用了多少个连接,尽管我很确定它应该是每个连接到hydra_pmi_proxy
进程的MPI进程的一个,加上一些hydra_pmi_proxy
和mpiexec
进程之间的其他数量(可能是对数)连接。
答案 1 :(得分:0)
我无法完全回答你的问题,但这里需要考虑的事情。在用于PMI的MVAPICH2中,我们开发了一种基于树的连接机制。因此,每个节点最多都有log(n)TCP连接。由于打开套接字会使您在大多数操作系统上受到开放文件描述符限制,因此MPI库可能会使用队列上的逻辑拓扑来限制TCP连接的数量。