GPU版基数排序(radix sort)

本文探讨了如何将基数排序算法应用于GPU,详细解释了CPU和GPU版本的基数排序算法实现,并指出了GPU实现中需要注意的同步问题。通过分组compact方法,解决了排序数量限制,能对2^20个数字进行有效排序。文章最后提出了未来可能的优化方向。
摘要由CSDN通过智能技术生成

基数排序算法的思想很简单,但如何提高并行性,使得能用GPU进行高效的排序计算呢?本文介绍适合于GPU计算版本的排序算法。


为了说明GPU版的排序算法,我们先复习一下最初版本的排序算法:

基数排序算法

A picture is worth than a thousand words.

因此我们上图说话。
radix-sort-example
基数排序是从最低位看起,把这一位数字值相同的按照扫描顺序放入同一个桶里面,值小的桶在前面。当所有数字都扫描完,再使用高一位,循环上述步骤,直至达到所有数字所有的最高位数,最后输出的就是排序后的答案。

CPU版本迭代基数排序算法

input: unsigned int inputVals[n]
output: unsigned int outputVals[n]

for(i=0; i< numBins; i+= numBits)
    1. 计算inputVal中第i位值为0到numBins-1的各有多少个,其值分别放入binHistogram[numBins]2. 对binHistogram[numBins]进行scan计算,其值分别放入binScan[numBins]中,即
    binScan[k]=binHistogram[0]+···+binHistogram[k-1]
    3. 遍历inputVal数组,计算第j个量时,计算其值所属的桶bin的值
      outputVals[binScan[bin]] = vals_src[j];
      binScan[bin]++;   
    4. swap(inputVals,outputVals)
  • 其中numBins是数字由多少位表示的,比如int就是32个bit位表示。
  • numBits表示一次考虑多少位,比如可=1,2,…
  • binHistogram[k] 记录了第k个桶中的数目
  • binScan[k]记录了第k个桶中的应该起始的位置

GPU版本基数排序算法

GPU版本的排序算法与CPU在前两步都是类似的。


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值