0

我在一个有 68 个内核和 4 个超线程/内核的 Knights Landing 节点上编程。我正在开发一个混合 MPI/OpenMP 应用程序。我的问题是这 4 个超线程是否打算用作 OpenMP 线程,或者我该如何使用它们?当我使用以下方案运行我的程序时:

export OMP_NUM_THREADS=1
mpirun -np 68 ./app

它的运行速度比我使用该方案时快得多:

export OMP_NUM_THREADS=4
mpirun -np 68 ./app

也许问题在于某个 MPI 的线程彼此不接近。但是,我不知道该怎么做。

总之,我可以将 4 个超线程/核心用作 OpenMP 线程吗?

谢谢。

4

1 回答 1

0

由于您可能正在使用英特尔 MPI 和 OpenMP 运行时,请允许我向您转发一些链接,其中包含用于将 MPI 和 OpenMP 线程固定到处理器内核/线程中的有价值信息。进程/线程绑定是当今实现高性能的必要条件。即使操作系统尽力做到最好,将一个进程/线程从一个核心/线程移动到另一个位置也意味着数据也需要传输。为此,请查看Running an MPI/OpenMP Program and Environment Variables for Process Pinning。例如,如果您使用 68 个 MPI 等级运行,那么您可能开始将每个 MPI 等级放置到不同的核心中。您可以通过设置 I_MPI_DEBUG 环境变量(如此处所述)来仔细检查 mpirun 是否满足您的请求

于 2017-10-24T09:29:58.657 回答