我应该在openMP并行区域内使用gnu并行模式函数(for-loop,tasks)

时间:2015-05-31 03:32:09

标签: c++ multithreading openmp

我有一个由openMP加速的程序,在并行区域内,调用std::nth_elementstd::sortstd::partition等函数。实际上,这些函数用于处理每个openmp-thread对应的数组部分。

最近,我发现g ++已经实现了上述函数的并行版本,所以我想我应该在__gnu_parallel::nth_element#pragma omp task区域内使用#pragma omp for这样的函数吗?如果我使用并行模式,总线程是否会超过omp_set_num_threads()设置的限制并导致更快的加速?

1 个答案:

答案 0 :(得分:0)

琐碎(和最佳)答案:基准并发布您的发现。

不太明确:根据我的经验,大多数算法的并行版本效率低于可比较的串行版本,而是依靠多个并行处理器来补偿壁挂时间。关于线程数量,我不认为OMP会在极限情况下产生新线程。我确实记得嵌入的#pragma omp for区域实际上并没有导致每个外部线程产生更多的内部线程"没有特定的旗帜(我不记得我的头脑)。