我正在尝试在具有四个NUMA节点的Intel Xeon CPU E5-4669 v3-系统上运行一些简单的omp并行循环。但是,由于某种原因,该代码始终使用所有线程,但仅使用四个NUMA节点之一(随机一个)。在单节点系统上,一切正常。我的代码非常简单,只是一个简单的openmp并行for循环,例如:
#pragma omp parallel for
for (int i = 0; i < NP; i++)
{
// ... some code
}
由于代码仅在一个节点上运行,但是可以清楚地访问所有节点(当我多次启动它时,它随机地在任何一个节点上启动),因此我认为有一个简单的解决方法,但是,我的研究做了没有给我任何有关如何解决此问题的知识,我发现的所有信息都是关于如何控制亲和力和优化性能的,这还不是我的问题。有人遇到过这个问题吗?我还尝试将KMP_AFFINITY环境变量设置为“ spread”,但这不能解决此问题。
OpenMP 2.0版(Visual Studio 2017 Open MP支持/ openmp)