代码有数千行,所以我无法粘贴它们,但功能流看起来有点像:
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_1
和Func_2
并要求main()
从DLL调用这些函数而不是将它们全部构建在一起使用main()
,然后一切正常。
答案 0 :(得分:0)
当我尝试设置不同于导出所需的线程数时,我遇到了这个错误。即在开始申请之前,您必须
export OMP_NUM_THREADS 4
检查此位置的线程数是否与您在omp_set_num_threads()中使用的线程数不同;
希望这会有所帮助。