C++ OpenMP开销占运行时间的很大比例

C++ OpenMP开销占运行时间的很大比例,c++,openmp,C++,Openmp,我使用openMP并行化for循环: #pragma omp parallel for for(unsigned int i = 0; i < selections.size(); ++i) { foo(selections[i]); } 计算机是八核的,我设置了环境变量OMP\u NUM\u THREADS=8。我如何改进这一点?是否foo()做了一些有用的事情?在此之前,100%必须分布在某个地方。它用一个向量进行大量计算,这部分只是程序的一部分。整个

我使用openMP并行化for循环:

#pragma omp parallel for
    for(unsigned int i = 0; i < selections.size(); ++i) {
        foo(selections[i]);
    }

计算机是八核的,我设置了环境变量
OMP\u NUM\u THREADS=8
。我如何改进这一点?

是否
foo()
做了一些有用的事情?在此之前,100%必须分布在某个地方。它用一个向量进行大量计算,这部分只是程序的一部分。整个程序超过1klines@HighPerformanceMark我从来没有调用过这个函数……是的,但是编译器需要知道为并行循环设置了多少线程。请尝试设置一个包含线程数的变量。将其显式地放在代码中,并在pragma omp parallel的末尾添加
num_threads(var)
。似乎并不是
omp_get_num_procs
太慢,而是探查器错误地将所有对OpenMP的调用识别为
omp_get_num_procs
 10554  97.8%  97.8%    10554  97.8% omp_get_num_procs
    66   0.6%  98.4%       85   0.8% __find (inline)