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的初学者,所以我很确定我一定犯了一些愚蠢的错误。
提前致谢
答案 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代码,相当于只有一个线程,即使您明确要求更多。