omp_get_thread_num()返回错误号码?

时间:2013-01-01 09:51:57

标签: c++ c openmp intel

代码有数千行,所以我无法粘贴它们,但功能流看起来有点像:

void Func_1(double * x, int nx, NUM_THREADS)
{
  omp_set_num_threads(NUM_THREADS);
 //...
};



void Func_2(double *y, int ny, NUM_THREADS)
{ 

 omp_set_num_threads(NUM_THREADS);
   //...
  #pragma omp parallel for 
    for (int i=0; i<N; ++i)
    {
      int threadID=omp_get_thread_num();
       //...
     };

 };



int main (void)    
{

//...
  Func_1(x, nx, NUM_THREADS);
  Func_2(y, ny, NUM_THREADS);

//...

};

所以基本上我得到两个函数,每个函数调用omp_set_num_threads,问题是,现在如果我构建程序,那么运行时返回的threadID完全是废话,threadID变成一些非常大的int数,如16113312 ...远远超过NUM_THREADS

是否有人遇到类似Open MP(Intel ICC 13.0)的问题?

顺便说一句,可能的提示是,但是我在单独的DLL库中构建Func_1Func_2并要求main()从DLL调用这些函数而不是将它们全部构建在一起使用main(),然后一切正常。

1 个答案:

答案 0 :(得分:0)

当我尝试设置不同于导出所需的线程数时,我遇到了这个错误。即在开始申请之前,您必须

export OMP_NUM_THREADS  4

检查此位置的线程数是否与您在omp_set_num_threads()中使用的线程数不同;

希望这会有所帮助。