如果使用的 MPI 是 MPICH2,MPI 程序将使用多少 tcp 连接来发送数据?如果您还知道 pmi 连接,请单独计算它们。
例如,如果我有 4 个进程和另外 2 个通信器(COMM1 用于第一个和第二个进程,COMM2 用于第三个和第四个进程);数据在每对可能的进程之间发送;在每一个可能的沟通者中。
我使用最近的 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 连接中混合。
- 案例 2:
8 个 tcp 连接:MPI_COMM_WORLD 中的 6 个(所有到所有 = 全网状)+ 1 个用于 1 <-> 2
在 COMM1 + 1 中表示 3 <-> 4
在 COMM2
- 我没有想到的其他变体。
最佳答案
正在使用的通信器不会影响已建立的 TCP 连接数。对于 --with-device=ch3:nemesis:tcp
(默认配置),您将在每对通过点对点 MPI 例程直接通信的进程之间使用一个双向 TCP 连接。在您的示例中,这意味着 6 个连接。如果您使用集体,那么在引擎盖下可能会建立额外的连接。连接将延迟建立,仅在需要时才建立,但一旦建立,它们将保持建立状态,直到调用 MPI_Finalize
(有时还有 MPI_Comm_disconnect
)。
我不知道每个进程为 PMI 使用了多少个连接,尽管我很确定它应该是每个连接到 hydra_pmi_proxy
进程的 MPI 进程一个,加上 hydra_pmi_proxy
和 mpiexec
进程之间的一些其他连接数(可能是对数)。
关于tcp - MPI程序使用的tcp连接数(MPICH2+nemesis+tcp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359682/