MPI程序使用的tcp连接数(MPICH2+;nemesis+;tcp)

MPI程序使用的tcp连接数(MPICH2+;nemesis+;tcp),tcp,parallel-processing,mpi,mpich,Tcp,Parallel Processing,Mpi,Mpich,如果使用的MPI是MPICH2,MPI程序将使用多少tcp连接来发送数据?如果您还了解pmi连接,请分别计算它们 例如,如果我有4个进程和另外2个通讯器(COMM1用于第一和第二个进程,COMM2用于第三和第四个进程);数据在每对可能的进程之间发送;在每一个可能的沟通 我使用最近的MPICH2+hydra+默认pmi。操作系统是linux,网络是交换式以太网。每个进程都在独立的PC上 因此,以下是数据路径(成对的进程): 12(在MPI\u COMM\u WORLD和COMM1中) 1 3(仅适

如果使用的MPI是MPICH2,MPI程序将使用多少tcp连接来发送数据?如果您还了解pmi连接,请分别计算它们

例如,如果我有4个进程和另外2个通讯器(COMM1用于第一和第二个进程,COMM2用于第三和第四个进程);数据在每对可能的进程之间发送;在每一个可能的沟通

我使用最近的MPICH2+hydra+默认pmi。操作系统是linux,网络是交换式以太网。每个进程都在独立的PC上

因此,以下是数据路径(成对的进程):

12(在MPI\u COMM\u WORLD和COMM1中)
1 3(仅适用于MPI_COMM_WORLD)
1 4(仅在MPI_COMM_WORLD中)
2 3(仅适用于MPI_COMM_WORLD)
2 4(仅适用于MPI_COMM_WORLD)
3 4(在MPI_COMM_WORLD和COMM2中)
我想可能会有

  • 案例1:
仅使用6个tcp连接;在COMM1和MPI_COMM_WORLD中发送的数据将在单个tcp连接中混合

  • 案例2:
8个tcp连接:6个在MPI_COMM_WORLD中(全部到全部=完全网状)+1个用于COMM1中的
12
,1个用于COMM2中的
34

  • 我没有想到的另一个变体

  • 我不能完全回答你的问题,但这里有一些事情要考虑。在PMI的MVAPICH2中,我们开发了一种基于树的连接机制。因此,每个节点的最大TCP连接数为log(n)。因为在大多数操作系统上打开套接字会受到打开文件描述符的限制,MPI库可能会使用列组上的逻辑拓扑来限制TCP连接的数量。

    正在使用的通讯器不会影响已建立的TCP连接的数量。对于
    --使用device=ch3:nemesis:tcp
    (默认配置),您将在通过点到点MPI例程直接通信的每对进程之间使用一个双向tcp连接。在您的示例中,这意味着6个连接。如果您使用集体,则发动机罩下可能会建立额外的连接。仅在需要时才延迟建立连接,但一旦建立连接,它们将保持建立状态,直到调用
    MPI\u Finalize
    (有时也调用
    MPI\u Comm\u disconnect


    我不知道每个进程在PMI中使用了多少个连接,尽管我相当确定每个MPI进程应该有一个连接到
    hydra\u PMI\u代理
    进程,再加上一些其他数字(可能是对数)
    hydra\u pmi\u proxy
    mpiexec
    进程之间的连接。

    我不明白,如果您将有100个(n=100)进程,并且每个进程之间都会有通信(100*99个单面或~100*50个双面对),那么如果n个进程中的每个进程只有log(n)~<10个连接,它们将如何完成,首先,我想知道的不是PMI连接,而是数据连接。关于你的答案——基于树的PMI机制是否在mpich2上游?我不知道它是否在mpich2上游。它位于MVAPICH2的MPIURSH中。关于日志(n)机制,如果没有直接连接,消息将通过其他列组路由。这仅适用于PMI还是也适用于数据?禁用此功能的最简单方法是设置环境变量
    MPICH\u no\u LOCAL=1
    。或者,如果您完全确定不想使用共享内存,则可以使用
    配置MPICH2启用nemesis dbg nolocal
    “如果您使用集体,则可以在引擎盖下建立其他连接。”-但如果我已经有了每个到每个插座(从一点到另一点),如果我使用集体例程,将不会有更多的连接?正确。给定
    p
    进程,最大可能的系统范围TCP连接数是
    p*(p-1)/2
    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)