2017-10-21 96 views
0

我编程上的骑士登陆,其具有68芯和4个超线程/核心节点。我正在研究混合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的线程?

谢谢。

+0

在绝大多数的应用程序,也就会跑这么多线程,同时运行在每个核心的MPI排名没有用。英特尔MPI的默认设置应该是将本地线程放置在线程中,但首先验证您的OpenMP在单个MPI等级上显示增益,使用2或4个内核,然后尝试可能的等级和线程数组合。 – tim18

+0

关于如何设置亲和力的细节因​​MPI实现而异,但针对KNL的MPI应包含该功能。 – tim18

+0

我还没有足够的经验与knl说,一个应用程序使用多于1个线程每个内核有效可能会在所有内核使用前达到峰值。在knc上,mpi可能会保持核心繁忙的消息传递以及另一个正在运行的os和mpi。 – tim18

回答

0

正如你可能使用英特尔MPI和OpenMP运行时,请允许我转发你提供有价值的信息的一些链接的钉扎MPI和OpenMP线程到处理器核心/线程。过程/线程绑定是当今实现高性能所必需的。即使操作系统试图尽最大努力,将一个进程/线程从一个内核/线程移动到另一个位置也意味着数据也需要传输。对于这个问题,看看Running an MPI/OpenMP ProgramEnvironment Variables for Process Pinning。例如,如果您以68个MPI排名运行,那么您可能会开始将每个MPI排名放入不同的核心。您可以通过设置I_MPI_DEBUG环境变量(如here所述)来仔细检查mpirun是否正在履行您的请求。