在OpenMP中,如何使每个内核运行一个线程?

在OpenMP中,如何使每个内核运行一个线程?,openmp,Openmp,我三天前开始使用OpenMP。我想知道如何使用#pragma使每个内核运行一个线程。详情如下:- int-ncores=omp_get_num_procs() for(i=0;i

我三天前开始使用OpenMP。我想知道如何使用
#pragma
使每个内核运行一个线程。详情如下:-

int-ncores=omp_get_num_procs()

for(i=0;i

}

我希望这个for循环分布在我拥有的核心中,那么,我应该使用什么
#pragma

另一件事,那些
#pragmas
是什么意思

#pragma omp parallel

#pragma omp for

#pragma omp parallel for

我对那些
#pragmas


非常感谢……)

螺纹固定

我想知道如何使用#pragma使每一个核心运行一次 单线程

您使用哪种openmp实现?答案取决于此

固定不使用pragmas定义。您必须使用环境变量。使用gcc时,可以使用环境变量将线程固定到核心:

GOMP_CPU_AFFINITY="0-3" ./main
将第一个线程绑定到第一个核心,将第二个线程绑定到第二个核心,依此类推。有关更多信息,请参阅(第3节,环境变量)。我忘记了如何对PGI和其他编译器执行同样的操作,但是您应该能够使用流行的搜索引擎找到这些编译器的答案

OpenMP Pragmas


没有办法避免阅读文档。例如,见。我发现这个非常有用。

要补充上一个答案,英特尔OpenMP库中的等效环境变量是KMP_AFFINITY。类似于

GOMP_CPU_AFFINITY="0-3"
会是

KMP_AFFINITY="proclist=[0-3]"
KMP_关联语法和选项的完整详细信息如下:

新的OpenMP实现(3.0+)使您的生活更加轻松。只需将以下行添加到.bashrc或.bash_配置文件中即可

导出OMP\u PROC\u BIND=true