【问题标题】:Bitonic Sorting Network vs Thrust::sort_by_key双调排序网络 vs Thrust::sort_by_key
【发布时间】:2011-10-27 02:01:44
【问题描述】:

我实现了一个使用排序的算法。我尝试了 Thrust::sort_by_key 大约需要 0.4 秒来对包含 10^7 个元素的数组进行排序。

我认为双音排序网络应该比 Thrust::sort_by_key 更快。但是,双调排序需要大约 2.5 秒才能对上述相同的数组进行排序。我使用了 SDK 提供的双音排序网络。我只是稍微修改了原来的双音排序。

你能告诉我为什么吗?或者给我一些建议?

谢谢,

2011 年 8 月 15 日

【问题讨论】:

    标签: sorting cuda thrust sorting-network


    【解决方案1】:

    简短的回答是 CUDA SDK 提供的双音排序示例主要用于教学。它根本不如 Thrust 的排序实现优化,后者基于 Merrill 提供的非常有效的基数排序。

    两种算法的asymptotic performance也不同。双调排序网络的复杂度为O(n lg^2 n),而Thrust 使用的基数排序的复杂度更像O(#bits n),其中#bits 表示表示输入数据所需的位数。换句话说,基数排序比双调排序需要的全局内存读写次数渐进地少。

    您可能会发现,对于较小的工作负载,双调排序表现更好。

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 2012-11-20
      • 1970-01-01
      • 2013-12-01
      • 2017-06-30
      • 2016-11-07
      • 2012-08-10
      • 2015-03-31
      • 2015-10-01
      相关资源
      最近更新 更多