如果使用的是MPICH2,那么通过MPI程序发送数据将使用多少tcp连接?如果您也知道pmi连接,那么分别计算它们。
例如,如果我有4个进程和另外2个通信器(COMM1用于第1和第2进程,COMM2为第3和第4);数据在每个可能的进程之间发送;在每个可能的通信器中。
我使用最近的MPICH2 + hydra +默认pmi。操作系统是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连接:6在MPI_COMM_WORLD (所有到所有=完全网格)+1用于1 <-> 2在COMM1中,1用于3 <-> 4在COMM2中。
发布于 2011-12-05 19:01:24
所使用的通信器不影响所建立的TCP连接的数量。对于--with-device=ch3:nemesis:tcp (默认配置),您将在每对进程之间使用一个双向TCP连接,这些进程通过点对点MPI例程直接通信。在您的示例中,这意味着6个连接。如果您使用集合,那么在引擎盖下可以建立额外的连接。连接将被懒散地建立,只在需要时才建立,但一旦建立,它们将一直保持建立,直到MPI_Finalize (有时也包括MPI_Comm_disconnect)被调用。
我不知道每个进程在PMI中使用了多少个连接,虽然我非常肯定每个进程应该使用一个连接到hydra_pmi_proxy进程的连接,再加上hydra_pmi_proxy和mpiexec进程之间的其他一些连接数(可能是对数)。
发布于 2011-12-04 21:49:58
我不能完全回答你的问题,但这里有一些需要考虑的问题。在MVAPICH2中,我们提出了一种基于树的连接机制。因此,每个节点在最大值时都有日志(n) TCP连接。由于打开套接字将使您受到大多数OSes上打开的文件描述符的限制,所以MPI库很可能会使用级别上的逻辑拓扑来限制TCP连接的数量。
https://stackoverflow.com/questions/8359682
复制相似问题