GPU加速排序(~1GB)和合并排序(~100GB)

时间:2013-01-29 23:09:58

标签: c++ sorting opencl gpu gpgpu

我要求一个c ++库进行GPU加速排序(大约1GB的数据)和合并排序(比如大约100GB的数据 - 但大小无关紧要,因为merge是一种流算法)。许可证必须是LGPL,BSD或类似的。由于可移植性,我非常喜欢OpenCL(但我也对CUDA库的链接感兴趣)。我很欣赏有关此主题的论文和博客文章的链接。

一些背景(如果我错了,请纠正我):

1路的2路合并排序(即128,000 000个8字节实体)将消耗大约log 2 (128 000 000)·1G = 27GB的内存带宽,即在现代CPU上大约1秒钟,顺序内存带宽约为30GB / s。 (任何非合并排序似乎需要更长的时间,因为非顺序内存访问速度在10-100次之内)。

虽然我不熟悉现代GPU,但我怀疑1GB的合并类型需要0.2秒甚至更少,因为典型的GPU内存带宽约为150GB / s,如AMD / ATI 58xx(例如参见{{ 3}})

这至少是加速的5倍。 (在16x PCI-E 2.0上传输1GB的时间约为0.125秒,但似乎可以将PCI传输与排序并行;但是,这可能需要2GB或3GB的视频卡内存而不是1GB)。

我怀疑由于超过双向合并排序或某种类型而适用于GPU的速度更快。

1 个答案:

答案 0 :(得分:3)

你看过Thrust吗?

从项目页面:

  

Thrust是一个类似于C ++的并行算法库   标准模板库(STL)。 Thrust的高级界面非常棒   在提高性能可移植性的同时提高开发人员   在GPU和多核CPU之间。与已建立的互操作性   技术(如CUDA,TBB和OpenMP)有助于集成   使用现有软件。快速开发高性能应用程序   与推力!

许可证是Apache,所以它应该适合你。