我有一个由openMP
加速的程序,在并行区域内,调用std::nth_element
,std::sort
,std::partition
等函数。实际上,这些函数用于处理每个openmp-thread对应的数组部分。
最近,我发现g ++已经实现了上述函数的并行版本,所以我想我应该在__gnu_parallel::nth_element
或#pragma omp task
区域内使用#pragma omp for
这样的函数吗?如果我使用并行模式,总线程是否会超过omp_set_num_threads()
设置的限制并导致更快的加速?
答案 0 :(得分:0)
琐碎(和最佳)答案:基准并发布您的发现。
不太明确:根据我的经验,大多数算法的并行版本效率低于可比较的串行版本,而是依靠多个并行处理器来补偿壁挂时间。关于线程数量,我不认为OMP会在极限情况下产生新线程。我确实记得嵌入的#pragma omp for
区域实际上并没有导致每个外部线程产生更多的内部线程"没有特定的旗帜(我不记得我的头脑)。