代码有数千行,所以我无法粘贴它们,但函数流程看起来像:
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
并要求从 DLL 调用这些函数,而不是与 DLL 一起构建它们,然后一切正常。Func_2
main()
main()