1

如果使用的 MPI 是 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)

我认为可以有

  • 情况1:

只会使用 6 个 tcp 连接;在 COMM1 和 MPI_COMM_WORLD 中发送的数据将混合在单个 tcp 连接中。

  • 案例二:

8 个 tcp 连接:MPI_COMM_WORLD 中的 6 个(全对所有 = 全网格)+ 1 <-> 2COMM1 中的 1 个 + 3 <-> 4COMM2中的 1 个

  • 我没有想到的其他变体。
4

2 回答 2

3

使用哪些通信器不会影响已建立的 TCP 连接数。对于--with-device=ch3:nemesis:tcp(默认配置),您将在通过点对点 MPI 例程直接通信的每对进程之间使用一个双向 TCP 连接。在您的示例中,这意味着 6 个连接。如果您使用集体,那么可能会在后台建立额外的连接。连接只会在需要时才建立,但一旦建立,它们将保持建立状态,直到MPI_Finalize(有时也MPI_Comm_disconnect)被调用。

在我的脑海中,我不知道每个进程为 PMI 使用了多少个连接,尽管我相当确定每个 MPI 进程应该有一个连接到hydra_pmi_proxy进程,再加上一些其他数量(可能是对数)的连接hydra_pmi_proxympiexec进程之间。

于 2011-12-05T19:01:24.703 回答
0

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

于 2011-12-04T21:49:58.467 回答