3

我正在我大学的计算机实验室中跨节点运行一些小型 MPI 作业。没有安装排队系统,所以每次我想运行作业时我都必须自己生成 MPI 主机文件,然后像这样运行它们:

mpirun --hostfile mpi_hostfile -n 32 ./mpi_program

我使用 Open MPI,所以现在我的主机文件看起来像这样:

localhost slots=4
hydra13 slots=4
hydra14 slots=4
hydra2 slots=4
hydra22 slots=4
hydra24 slots=4
hydra26 slots=4
hydra1 slots=4

我的问题是:每个节点都有一个 Intel® Core™ i7-3770 处理器,它是四核的,但也是超线程的。什么是涉及超线程的 Open MPI 主机文件的最佳实践?我应该为每个节点列出四个还是八个插槽?

谢谢。

4

2 回答 2

1

这取决于您的使用情况。您可能想要对大量配置进行一些实验,但通常人们在使用 MPI+OpenMP 时会做什么(我假设您的意思是 OpenMP 线程库。不是 Open MPI,MPI 库,即使您的问题是标记为 OpenMPI。)是每个节点有一个 MPI 进程,每个核心有一个 OpenMP 线程。我不确定超线程在这里的重要性,但这是通常的做法。

如果确实,您在提到 OpenMP 的任何地方都指的是 Open MPI,那么情况就不同了。如果您只使用 MPI 进程,那么通常人们每个内核使用一个 MPI 进程。

最后,您需要使用一系列设置来测试您的应用程序,看看哪种设置最适合您的机器和您的应用程序。没有银弹。

于 2013-08-30T16:10:13.367 回答
0

您可以--use-hwthread-cpusmpirun.

在这种情况下,Open MPI 会将处理器视为超线程提供的线程。否则,它将处理器视为 CPU 内核,这是默认行为。

例如,在 Xeon Phi(Knights Landing 微架构)中,每个内核都有四个超线程线程,而不是两个。因此,如果您在 Xeon Phi 上运行 Open MPI --use-hwthread-cpus,它将为每个内核分配四个 Open MPI 处理器。

使用此选项时,Open MPI 会将超线程提供的线程称为“硬件线程”。使用这种技术,您不会超额订阅,并且如果某些 Open MPI 处理器将在虚拟机上运行,​​它将使用分配给该虚拟机的正确线程数。

于 2021-05-30T12:20:57.157 回答