在c++中使用OpenMP和Timsort算法
Using OpenMP in C++ with Timsort Algorithm
我一直在寻找一种方法来实现多线程的c++ Timsort(在Github上找到的实现),我已经尝试在这个过程中使用。我确信我使用了正确的编译器标志,但是每当我尝试使用Timsort时,就像我下面所做的那样:
#pragma omp parallel shared(DataVector)
{
gfx::timsort(DataVector.begin(), DataVector.end(), comp_1);
}
注意:排序的数据是一个包含单个单词字符串的向量,我使用自己的比较器。
它似乎在不使用OpenMP的情况下运行所需的时间相同。使用适当的包括计时等,我计时的值平均在0.01秒内,在我的排序中徘徊在1.24秒左右。
是否有理由线程似乎不与我的排序方法工作,或者它是一个问题与我实现OpenMP的方式?
注意:我一直在使用__gnu_parallel::sort以及更好的结果,但我希望在实践中自己比较这些方法。
omp parallel
需要看到它将要并行化的循环。按照您声明的方式,omp将并行化一段代码,这不会带来任何好处。
检查你的文档关于omp parallel
的使用。
要执行for循环,您需要使用omp parallel for
和下面的for语句。你现在拥有它的方式,它将在你拥有的每个核心上运行你的时间排序。
认为openMP不够聪明…如果你想对gfx::timsort
做一个平行,你不能从外面做…您应该将此代码添加到函数gfx::timsort
#pragma omp parallel for
for(int i=0;i<num;i++)
...
此外,shared
是一个关键字,指示变量您不希望它被并行编辑
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有非整数边容量的最大流量的Dinic算法
- 到连接组件算法的问题(递归)
- STL算法函数在多个一维容器上的使用
- 读取最后一行代码算法 - c++ 时出现问题
- 括号更改 O(n) 算法
- std::unordered_map 搜索算法是如何实现的?
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 在c++中使用OpenMP和Timsort算法