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