在OpenMP中,我如何让每个核心运行一个线程?

Oma*_*ama 5 openmp

我3天前开始使用OpenMP.我想知道如何使用#pragma每个核心运行一个线程.更多细节: -

int ncores = omp_get_num_procs();

for(i = 0; i < ncores;i++){

....

}

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

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

#pragma omp parallel

#pragma omp for

#pragma omp parallel for

我对这些感到困惑 #pragmas

非常感谢 .. :)

evn*_*vnu 8

螺纹钉扎

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

您使用哪种openmp实现?答案取决于那个.

固定不是用pragma定义的.您将不得不使用环境变量.使用gcc时,可以使用环境变量将线程固定到核心:

GOMP_CPU_AFFINITY="0-3" ./main
Run Code Online (Sandbox Code Playgroud)

将第一个线程绑定到第一个核心,将第二个线程绑定到第二个核心,依此类推.有关更多信息,请参阅gomp文档(第3节,环境变量).我忘了如何用PGI和其他编译器做同样的事情,但你应该能够找到使用流行搜索引擎的编译器的答案.

OpenMP Pragma

没有办法避免阅读文档.例如,请参阅IBM网站的链接.我发现Blaise Barney教程非常有用.