MPI主机文件与超线程技术

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主机文件中,最佳实践是什么?对于每个节点,我应该列出四个还是八个插槽?
谢谢。
2个回答

1
这取决于您的使用方式。 您可能需要尝试许多配置,但通常人们在使用MPI + OpenMP时(我假设您指的是线程库OpenMP,而不是标记为OpenMPI的MPI库,即使您的问题被标记为OpenMPI),每个节点有一个MPI进程和每个核心一个OpenMP线程。 我不确定超线程在这里的作用如何,但这是通常的做法。
如果确实在每处提到OpenMP时都是指Open MPI,则情况不同。 如果只使用MPI进程,则通常每个核心使用一个MPI进程。
最终,您需要使用一系列设置测试应用程序,并查看哪个对您的机器和应用程序最快。 没有银弹。

我相信OP在打上“openmpi”标签时是指Open MPI。 - Hristo Iliev

0

您可以在 mpirun 的命令行参数中运行 --use-hwthread-cpus

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接