代码之家  ›  专栏  ›  技术社区  ›  Kentzo

GPU有排序字符串数组的算法吗?

  •  7
  • Kentzo  · 技术社区  · 14 年前

    要排序的数组大约有一百万个字符串,其中每个字符串的长度最多可达一百万个字符。

    我正在寻找任何GPU排序算法的实现。

    我有一个大小约为1MB的数据块,我需要构造 suffix array . 现在您可以看到,在非常小的内存量中有一百万个字符串是怎么可能的。

    1 回复  |  直到 14 年前
        1
  •  4
  •   RD1    14 年前

    GPU排序技术的现状并不是特别令人鼓舞。

    对于32位整数的排序,下面这篇来自2009年的论文(两位作者是Nvidia的研究人员)只声称GTX280上的最佳CUDA排序比4核Yorkfield上的最佳CPU排序提高了23%。

    http://www.mgarland.org/files/papers/gpusort-ipdps09.pdf

    这在GPU上使用基数排序,在CPU上使用合并排序。为了构造后缀数组,您需要一个基于比较的排序,因此本文中最好的排序方法不是GPU基数排序,而是GPU合并排序,它实现了GPU基数排序(具有100万个密钥)速度的一半,即比CPU合并排序慢40%。

    总的来说,如果您的目的是构建一个高效的系统,我建议您使用CPU实现来解决这个问题,因为这样会更快更容易编写。

    但是,如果您的目的是为了试验或只是为了了解GPU,那么您可以从CUDA SDK中的论文中找到合并排序的CUDA实现:

    http://developer.download.nvidia.com/compute/cuda/sdk/website/Data-Parallel_Algorithms.html