我应该在openMP并行区域(for循环,任务)内使用gnu并行模式函数吗?

Should I use gnu parallel mode function inside openMP parallel region(for-loop, tasks)

本文关键字:并行 gnu 函数 模式 任务 区域 openMP for 循环 我应该      更新时间:2023-10-16

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

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

平凡的(也是最好的)答案:基准测试并发布您的发现。

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