【问题标题】:Manipulate MPI to think I am running on two nodes操纵 MPI 认为我在两个节点上运行
【发布时间】:2020-02-11 21:09:21
【问题描述】:

我正在开发一个需要花费一些时间的应用程序 在两个节点上运行时的其他操作。 由于我自己的计算机显然被视为节点,我想知道我是否可以操纵 MPI 以相信我在两个节点上运行,例如每个节点有两个内核。这让我在在集群上测试之前在自己的计算机上测试和调试我的应用程序变得更容易一些。

我在 Linux 机器上使用 Intel MPI

【问题讨论】:

  • 你的应用使用MPI_Comm_split_type()吗?如果不是,它目前如何确定它在两个不同的节点上运行?
  • 取决于您使用的 MPI 发行版(例如:MPICH、OpenMPI...),语法不同,但概念是:配置一个您指定“localhost 有 2 个插槽”的主机文件.您将使用“localhost”填充您的主机文件。哪个分布?我们说的是 linux 主机,不是吗?
  • 我正在使用这个 Yes 并使用 MPI_COMM_TYPE_SHARED 作为类型拆分。我在 Linux 上运行并使用英特尔的发行版。
  • 在这种情况下,我只需重写 MPI_Comm_split_type() 以返回两个通信器并欺骗您的应用程序使其相信它运行在两个节点上。
  • 我同意 Gilles - 但可能会将其作为拆分例程的包装器,然后根据硬件平台执行适当的操作

标签: fortran mpi hpc


【解决方案1】:

MPI 中的“节点”(通常称为“等级”)不必与物理计算节点匹配。事实上,每个物理节点运行多个 MPI 进程(“等级”)甚至是有益的。 HPC Tuning Guide for AMD EPYC 以他们的 CPU 为例给出了一些指导方针,英特尔 MPI 使用 -ppn 选项到 configure number of processes per node

话虽如此:如果您只需要在主机上的两个 MPI 等级上运行您的应用程序,那么它通常就像运行一样简单

$ mpirun -n 2 your-app.x

在您的本地机器上获得两个等级(因为大多数 MPI 实现预先配置的插槽等于您主机上的物理 CPU 的数量)。它们是否是本地的对您来说并不重要,MPI 实现将为这两个进程选择适当的通信方式。

如果mpirun 明确需要主机,请使用:

$ mpirun -host localhost -n 2 your-app.x

使用mpirun 的附加选项(请参阅参考文档),您甚至可以将 MPI 进程固定到特定的 CPU,尽管 MPI 实现和操作系统通常将它们分布得足够好以进行测试运行。

如果您确实需要让mpirun 将您的单个主机作为两个节点来处理,您可以使用在 Linux 上完整的127.0.0.x 子网映射到您的本地主机并结合-host-ppn 选项这一事实。使用默认的 MPI helloworld 程序如下所示:

$ FI_PROVIDER=tcp mpiexec -ppn 2 -hosts 127.0.0.1,127.0.0.2 ./helloworld
Hello world from processor myhost, rank 1 out of 4 processors
Hello world from processor myhost, rank 3 out of 4 processors
Hello world from processor myhost, rank 0 out of 4 processors
Hello world from processor myhost, rank 2 out of 4 processors

不幸的是,内部主机名解析始终为您提供相同的处理器名称,但您在为每个节点请求 2 个处理器时获得 4 个等级这一事实表明这可以按要求工作。

我必须指定FI_PROVIDER 以解决issue in the latest Intel MPI

顺便说一句,这不是 Fortran 特定的。

【讨论】:

  • 但我并不是在问如何在 linux 上运行 mpi。我在问如何操纵 MPI 来“思考”,例如例如,等级 1 到 4 关联到节点 1,等级 5-8 关联到节点 2。我认为@Gilles Gouaillardet 最后的评论是最好的方法
  • 我不明白为什么你会想要代码,这取决于你是否真的有两个不同的节点,而不仅仅是两个等级,因为这是 HPC 集群应该能够抽象出来的。但是,尽管如此,我还是用一个示例更新了答案,表明您确实可以将本地节点视为多个节点。
猜你喜欢
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 2021-07-10
  • 1970-01-01
  • 2013-02-10
  • 2020-09-27
  • 2015-09-07
相关资源
最近更新 更多