2011-07-14 42 views
5

3天前我开始使用OpenMP。我想知道如何使用#pragma使每个单核运行一个线程。在更多的细节: -在OpenMP中,我怎样才能让每个单核心运行一个线程?

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

谢谢很多有点糊涂.. :)

回答

8

螺纹钉扎

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

您使用哪种openmp实现?答案依赖于此。

固定不是用编译指示定义的。你将不得不使用环境变量。当使用gcc,可以使用环境变量到管脚线程核心:

GOMP_CPU_AFFINITY="0-3" ./main 

结合第一线程到第一核心,所述第二线程的第二,等等。有关更多信息,请参见gomp documentation(第3节,环境变量)。我忘记了如何对PGI和其他编译器做同样的事情,但是您应该能够为使用流行搜索引擎的编译器找到答案。

OpenMP编译

有没有办法避免阅读文档。例如,请参阅this link to an IBM website。我发现tutorial by Blaise Barney相当有用。

1

新的OpenMP实现(3.0+)使你的生活变得更轻松。您可以简单地将以下行添加到.bashrc或.bash_profile中。

export OMP_PROC_BIND = true

相关问题