我有一个双套接字Xeon E5522 2.26GHZ机器(禁止超线程)在LinuxKern3.0上运行ubuntu服务器,支持NUMA。架构布局是每个套接字4个物理核心。OpenMP应用程序在这台机器上运行,我有以下问题:
发布于 2012-08-15 19:09:12
当前的OpenMP标准定义了一个布尔环境变量OMP_PROC_BIND,它控制OpenMP线程的绑定。如果设置为true,例如
shell$ OMP_PROC_BIND=true OMP_NUM_THREADS=12 ./app.x然后,OpenMP执行环境不应该在处理器之间移动线程。不幸的是,关于这些线程应该如何绑定,没有更多的讨论,这也是OpenMP语言委员会中的一个特别工作组现在正在讨论的问题。OpenMP 4.0将附带新的环境变量和子句,允许您指定如何分配线程。当然,许多OpenMP实现提供了自己的控制绑定的非标准方法。
不过,大多数OpenMP运行时都不了解NUMA。它们将很高兴地将线程分派到任何可用的CPU,并且您必须确保每个线程只访问属于它的数据。在这方面有一些一般性的暗示:
dynamic调度用于并行for (C/C++) / DO (Fortran)循环。for循环,则两个循环的static调度块0将由线程0、块1逐线程执行,等等。我的一些同事已经对不同OpenMP运行时的NUMA行为进行了彻底的评估,并专门研究了NUMA对英特尔实现的认识,但是这些文章还没有发表,所以我不能为您提供链接。
有一个名为ForestGOMP的研究项目,旨在为libgomp提供一个具有NUMA意识的接入替代。也许你该看看。
发布于 2018-10-07 11:34:27
您还可以使用一个新的工具来检查内存的放置和访问,该工具可以分析NUMA应用程序,现在还可以为Linux开放源代码: NUMAPROF:https://memtt.github.io/numaprof/。
https://stackoverflow.com/questions/11959906
复制相似问题