Bitonic Sorting Network vs Thrust :: sort_by_key

时间:2011-08-15 05:54:27

标签: sorting cuda thrust sorting-network

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

我认为bitonic排序网络应该比Thrust :: sort_by_key更快。然而,bitonic排序需要大约2.5秒才能对上面提到的相同阵列进行排序。我使用了SDK提供的bitonic排序网络。我刚刚修改了原来的bitonic排序。

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

谢谢,

2011年8月15日

1 个答案:

答案 0 :(得分:3)

简短的回答是,CUDA SDK提供的bitonic排序示例主要是教学法。它不像Thrust的排序实现那样优化,它基于Merrill提供的非常有效的基数排序。

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

您可能会发现,对于较小的工作负载,bitonic排序的效果会更好。