数组排序有大约一百万个字符串,其中每个字符串都可以长到一百万个字符。

我正在寻找任何用于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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top