openmp代码不能并行运行

时间:2015-10-16 01:02:37

标签: openmp

omp_set_num_threads( 8 );
#pragma omp parallel for
for( int tx = 0; tx < numThread; tx++ )
{
    cout<<"\nThread :"<<omp_get_num_threads()<<"\n";

}

我的理解是上面的代码应该打印8.但我得到的输出是

Thread :1

Thread :1

Thread :1

Thread :1

Thread :1

Thread :1

Thread :1

Thread :1

请告诉我这里出了什么问题。我是openmp的初学者,所以我很确定我一定犯了一些愚蠢的错误。

提前致谢

1 个答案:

答案 0 :(得分:1)

我不确定这里发生了什么。

可能是您使用存根OpenMP库编译的情况,该库提供了所有OpenMP库API,但仅表现为顺序模式(例如,参见this link对应的英特尔编译器开关)。 / p>

另一种可能性是,OMP_THREAD_LIMIT环境变量在您的环境中设置为1。例如,参见此代码:

#include <iostream>
#include <omp.h>

int main() {
    omp_set_num_threads(8);
    #pragma omp parallel
    #pragma omp single
    std::cout << "Number of threads in the current parallel region is " << omp_get_num_threads() << std::endl;

    return 0;
}

使用OpenMP支持编译并运行时,它会给我:

$ g++ -fopenmp nbthreads.cc -o nbthreads
$ ./nbthreads 
Number of threads in the current parallel region is 8
$ OMP_THREAD_LIMIT=1 ./nbthreads 
Number of threads in the current parallel region is 1

除了这两种可能性之外,我不知道。

编辑:感谢Z boson 评论,我很确定我已经掌握了这个谜团的关键。

使用与上面相同的代码,这是我所拥有的:

$ g++ -o nbthreads nbthreads.cc -lgomp
$ ./nbthreads 
Number of threads in the current parallel region is 1

因此,在编译/链接代码时,您只是错误地使用了-lgomp而不是-fopenmp。这为您提供了一个OpenMP代码,相当于只有一个线程,即使您明确要求更多。