是否有算法来排序GPU的字符串数组?
要排序的数组大约有一百万个字符串,其中每个字符串的长度可以高达一百万个字符。
我正在寻找GPU的排序算法的任何实现。
我有一个大小约为1MB的数据块,我需要构建后缀数组。 现在你可以看到如何在真正少量的内存中有一百万个字符串。
GPU排序领域的技术水平并不特别令人鼓舞。
对于32位整数的排序,2009年的以下论文(有2位作者是Nvidia的研究人员)只比GTX280上最好的CUDA排序提高了23%,而4核心Yorkfield排名最好。
http://www.mgarland.org/files/papers/gpusort-ipdps09.pdf
这在GPU上使用了基数排序,并在CPU上合并排序。 您需要基于比较的排序才能构建后缀数组,因此,不是GPU基数排序,本文中最好的排序是GPU合并排序,它实现了GPU基数排序的一半速度(有100万键) - 比CPU合并类型慢大约40%。
添加可变长度密钥似乎可能会导致warp中的线程在GPU上不同步,因此会降低GPU上的性能而不是CPU。
总的来说,如果你的目的是构建一个高效的系统,我建议你使用CPU实现来解决这个问题,因为它会更快,更容易编写。
但是,如果您的目的是尝试或只是为了了解GPU,那么您可以从CUDA SDK中的论文中找到合并排序的CUDA实现:
http://developer.download.nvidia.com/compute/cuda/sdk/website/Data-Parallel_Algorithms.html
链接地址: http://www.djcxy.com/p/2081.html上一篇: Is there algorithm for sorting array of strings for GPU?