我应该在openMP并行区域(for循环,任务)内使用gnu并行模式函数吗?
Should I use gnu parallel mode function inside openMP parallel region(for-loop, tasks)
我有一个由openMP
加速的程序,在并行区域内调用std::nth_element
、std::sort
、std::partition
等函数。实际上,这些函数是用来处理每个openmp线程对应的数组部分的。
最近,我发现g++已经实现了上述函数的并行版本,所以我想知道我应该在#pragma omp task
或#pragma omp for
区域内使用__gnu_parallel::nth_element
这样的函数吗?如果我使用并行模式,线程总数会超过omp_set_num_threads()
设置的限制并导致更差的加速吗?
平凡的(也是最好的)答案:基准测试并发布您的发现。
不确定:根据我的经验,的并行版本大多数算法的效率低于可比较的串行版本,而是依赖于多个并行处理器来补偿壁时间。关于线程的数量,我不认为OMP将产生新的线程,如果在限制。我确实记得,嵌入的#pragma omp for
区域实际上并不会导致每个外部线程产生更多的"内部线程",而没有特定的标志(我不记得我的头的顶部)。
相关文章:
- C++17中的并行执行策略
- 并行用于C++17中数组索引范围内的循环
- 如何在Elixir中调用递归函数并行
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 遍历并行数组以确定C++中的最大数字
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 并行标准::复制复杂性
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 如何在 C++17 STL 并行算法中处理调度?
- OpenMP 与有序和关键指令并行
- 并行gnu通过shell脚本传递参数
- GNU Radio没有来自与我自己的OOT块并行的其他块的输出
- GNU 使 -j8 不并行运行
- 为什么GNU并行快速排序比归并排序慢?
- 我应该在openMP并行区域(for循环,任务)内使用gnu并行模式函数吗?