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