3

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

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

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

虽然我不熟悉现代 GPU,但我怀疑 1GB 的合并排序将花费 0.2 秒甚至更少,因为典型的 GPU 内存带宽约为 150GB/s,如 AMD/ATI 58xx(参见,例如http://en .wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units#Evergreen_.28HD_5xxx.29_series

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

我怀疑由于多于 2 路合并排序或某种适用于 GPU 的排序,速度会更快。

4

1 回答 1

3

你看过推力吗?

从项目页面:

Thrust 是一个类似于 C++ 标准模板库 (STL) 的并行算法库。Thrust 的高级接口极大地提高了开发人员的工作效率,同时实现了 GPU 和多核 CPU 之间的性能可移植性。与现有技术(如 CUDA、TBB 和 OpenMP)的互操作性有助于与现有软件的集成。使用 Thrust 快速开发高性能应用程序!

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

于 2013-01-29T23:17:58.107 回答