首页 > 解决方案 > 操纵 MPI 认为我在两个节点上运行

问题描述

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

我在 Linux 机器上使用 Intel MPI

标签: fortranmpihpc

解决方案


MPI 中的“节点”(通常称为“等级”)不必匹配物理计算节点。事实上,每个物理节点运行多个 MPI 进程(“等级”)甚至是有益的。AMD EPYC的HPC 调优指南以他们的 CPU 为例,英特尔 MPI 使用该-ppn选项来配置每个节点的进程数

话虽这么说:如果您只需要在主机上的两个 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子网映射到您的 localhost 并结合-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必须指定解决最新 Intel MPI 中的问题

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


推荐阅读