- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
代码有几千行,所以我不能粘贴它们,但是函数流程看起来有点像:
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
变成一些非常大的整数,例如 16113312... 远远超过 NUM_THREADS
。
有没有人遇到过 Open MP(Intel ICC 13.0)的类似问题?
顺便说一句,一个可能的提示是,但是我在单独的 DLL 库中构建了 Func_1
和 Func_2
并要求 main()
调用它们DLL 中的函数,而不是将它们与 main()
一起构建,然后一切正常。
最佳答案
当我尝试设置与导出所需线程数不同的线程数时,我遇到了这个错误。即在开始您的应用程序之前,您必须
export OMP_NUM_THREADS 4
检查此位置的线程数是否与您在 omp_set_num_threads() 中使用的不同;
希望这对您有所帮助。
关于c++ - omp_get_thread_num() 返回有问题的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14109432/
代码有几千行,所以我不能粘贴它们,但是函数流程看起来有点像: void Func_1(double * x, int nx, NUM_THREADS) { omp_set_num_threads(
我刚开始使用英特尔 Fortran 编译器和 Visual Studio 2015 在 Fortran 中使用 OpenMP。在项目属性中,我将“Fortran -> 语言 -> 处理 OpenMP
我有一个这样的代码: thread_local CustomAllocator* ts_alloc = nullptr; struct AllocatorSetup { AllocatorSe
与查找变量值相比,调用 omp_get_thread_num() 的性能成本是多少? 如何避免在 simd openmp 循环中多次调用 omp_get_thread_num()? 我可以使用 #pr
我有一个使用 omp 进行并行化的 C++ 类库。我注意到我的问题,因为它总是用完我处理器上的所有内核,不管 omp_set_num_threads(threadCount) 有什么作为输入。 所以在
我了解到 OpenMP 使用线程池来重用物理线程。我的问题是从omp_get_thread_num 获取的线程号是否绑定(bind)到物理线程? 换句话说,omp_get_thread_num 到 g
我是一名优秀的程序员,十分优秀!