Parallel Radix Sort

本文探讨了在GPU上实现的平行基数排序算法。该算法分为三个阶段,基于GPU Gems III Broad-Phase Detection中的方法,使用16个线程块和16个线程组,以平衡排序趟数和有限的寄存器资源。为了保持排序稳定性,线程块和线程组顺序处理数据,并采用交织访问方式提高并行处理效率。

感觉在GPU上面写排序差不多现在都是这个,不知道Keplar3.5出了Dynamic Parallel Thread之后会不会出现那种排序网络的排序算法更高效,反正现在就是这个了,Fermi就能跑的并行排序。


Radix Sort算是一种外排序吧,大家都了解了估计,首先要算定一个Radix的长度,然后根据Radix的长度对每个可能值进行统计数目,然后根据统计的数目进行Prefix Sum,之后把数放到另一个数组里,根据刚才统计的位置


这个并行算法分三个阶段,根据GPU Gems III Broad-Phase Detection里面讲的,他使用了16(Num_Block_Num)个线程块,每个线程块还分成了16(Num_Group_Num)个线程组,这主要是权衡排序所需要的趟数和寄存器有限,具体请见GPU Gems III Broad-Phase Detection里面的具体情况。


第一个阶段,由于每个线程块中的线程组共享同样的Shared_memory,所以每个线程组的访问是序列化进行的,如图:


32fig11.jpg



为了保证排序的稳定性,每个线程块依次处理连续的数据段,每个线程组也连续处理连续的数据块,这样就可以防止后面的数据出现在前方,这个是有之后的Prefix Sum决定的,后面讨论。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值