【问题标题】:Efficient way to sort large vectors in-memory在内存中对大型向量进行排序的有效方法
【发布时间】:2015-04-21 11:32:54
【问题描述】:

我需要根据一些用户定义的功能,一次又一次地在 64GB RAM 高性能计算 (HPC) 机器上对内存中 32GB 大小的用户定义数据类型的大向量进行排序。我正在使用 std::sort 相同的。然而,事实证明 std::sort 花费了大量的时间 > 1 小时。是否有其他一些我可以使用的函数比 std::sort 排序更快。

我在我的系统上使用以下 gcc 版本: gcc (Ubuntu/Linaro 4.6.4-6ubuntu2) 4.6.4

【问题讨论】:

  • 您是否使用分析器计算出时间花在了哪里?它可以是例如operator
  • @TonyD 你能推荐一些免费的 Linux 开源分析器吗
  • @StegVerner:(也是题外话),但是是的 - gprof、valgrind 是流行的选择。

标签: c++ sorting gcc


【解决方案1】:

您可能希望混合使用 std::sort() (使用快速排序算法)和合并排序并在此处应用多线程。

例如,在 CPU 中有一定数量的核心,拆分数据,同时在核心上按 std::sort 对每个部分进行排序,然后像合并排序合并排序数组一样合并它们可能是合理的。

问候

【讨论】:

  • std::sort() 不需要使用任何特定的排序算法。但是,在 GCC 的情况下,它使用 introsort。
  • @chbaker0 好吧,introsort 是某种快速排序,不是吗?无论如何,这不是重点
  • @AndrewLavq 你知道是否有一些已经存在的图书馆可以为我做这件事
  • @StegVerner 不幸的是,我不确定是否有这样的库。这是一种一般的方法,也许它需要自己的实现
  • @AndrewLavq 如果你有一个示例实现..你能和我分享一下吗
猜你喜欢
  • 2016-07-31
  • 2016-07-07
  • 2018-07-23
  • 2017-05-09
  • 2011-01-19
  • 2019-11-20
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
相关资源
最近更新 更多