我应该在 openMP 并行区域内使用 gnu 并行模式函数吗(for-loop,tasks)
Posted
技术标签:
【中文标题】我应该在 openMP 并行区域内使用 gnu 并行模式函数吗(for-loop,tasks)【英文标题】:Should I use gnu parallel mode function inside openMP parallel region(for-loop, tasks) 【发布时间】:2015-08-13 17:39:03 【问题描述】:我有一个由openMP
加速的程序,在并行区域内,调用了std::nth_element
、std::sort
、std::partition
等函数。实际上,这些函数用于处理每个openmp-thread对应的数组部分。
最近,我发现g++已经实现了上述函数的并行版本,所以我想知道我应该在#pragma omp task
或#pragma omp for
区域内使用__gnu_parallel::nth_element
这样的函数吗?如果我使用并行模式,线程总数是否会超过omp_set_num_threads()
设置的限制并导致更差的加速?
【问题讨论】:
【参考方案1】:简单(也是最佳)答案:基准测试并发布您的发现。
不太确定:根据我的经验,大多数算法的并行版本的效率低于可比较的串行算法,而是依靠多个并行处理器来补偿挂壁时间。关于线程数,我不认为 OMP 会在限制时产生新线程。我确实记得嵌入的#pragma omp for
区域实际上并不会导致每个外线程产生更多没有特定标志的“内线程”(我不记得了)。
【讨论】:
以上是关于我应该在 openMP 并行区域内使用 gnu 并行模式函数吗(for-loop,tasks)的主要内容,如果未能解决你的问题,请参考以下文章