感觉在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,所以每个线程组的访问是序列化进行的,如图:
为了保证排序的稳定性,每个线程块依次处理连续的数据段,每个线程组也连续处理连续的数据块,这样就可以防止后面的数据出现在前方,这个是有之后的Prefix Sum决定的,后面讨论。

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

最低0.47元/天 解锁文章
3585

被折叠的 条评论
为什么被折叠?



