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

标签 tcp parallel-processing mpi mpich

如果使用的 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_proxympiexec 进程之间的一些其他连接数(可能是对数)。

关于tcp - MPI程序使用的tcp连接数(MPICH2+nemesis+tcp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359682/

相关文章:

python - 使用 Python 并行获取图像并异步保存它们

c - mpi 向随机选择的节点发送消息

java - 无法理解如何在 Android 和 Java 中将整数转换为 IP

php - 在php中检测TCP session 的MSS大小

c - 不断写入文件是否会损害程序的性能?

Eclipse PTP : Running parallel (MPI) applications on the local machine?

python - 在 boost.python 中包装 MPI

c++ - mpirun : Unrecognized argument mca

tcp - 非阻塞 TCP 写入(2)成功但未发送请求

python - 关闭扭曲的服务器