是否有用于对GPU进行排序的字符串数组的算法?
-
16-09-2020 - |
题
数组排序有大约一百万个字符串,其中每个字符串都可以长到一百万个字符。
我正在寻找任何用于GPU分类算法的实现。
我有一个大小约为1MB的数据块,我需要构造后缀数组。现在,您可以看到如何在真正少量的内存中拥有一百万个字符串。
解决方案
GPU排序中的技术状态并不特别令人鼓舞。
从2009年排序32位整数以下论文(有2名是NVIDIA的研究人员)只有4.与4核心约克菲尔德的最佳CPU排序相比,GTX280的最佳CUDA排序增加23%。
http://www.marland.org/files/papers/gpusort -ipdps09.pdf
这在GPU上使用了基数,并在CPU上合并排序。你需要一个基于比较的排序来构建后缀数组,所以而不是GPU Radix排序,其中纸张中最好的是GPU合并排序,这实现了GPU Radix Sort的速度大约一半(100万键) - 即比CPU合并排序慢的约40%。
添加变量长度键似乎可能导致扭曲中的线程将在GPU上脱离同步,因此可以减少GPU的性能超过CPU。
总的来说,如果您的目的是构建一个有效的系统,我建议您使用CPU实现此问题,因为它会更快更容易写入。
但是,如果您的目的是实验或只是为了了解GPU,那么您可以在CUDA SDK中找到从纸张中的合并分类的CUDA实现:http://developer.dowload.nvidia .com / compute / cuda / sdk /网站/ data-parallel_algorithms.html
不隶属于 StackOverflow