数据密集型算法中的Thrust与CUDA
一、引言
通用图形处理器单元(GPGPU)编程能显著加速各种算法,受到了包括数据库领域在内的广泛研究关注。与传统基于CPU的顺序算法相比,许多应用的速度提升甚至可达两个数量级。然而,在数据库应用中,GPU处理面临两个难题:一是GPU的单指令多数据(SIMD)处理模型要求所有数据具有统一的大小和结构,任何偏差或不确定性都会显著降低性能;二是每个线程需遵循相同的执行路径,这使得GPU仅适用于底层和简单结构的数据处理。
在数据密集型应用中,GPU线程通常将单个线程与单个数据记录或一组记录绑定,这可能导致大量线程执行和调度机制的高利用率。此外,数据密集型应用常受限于内存带宽,减缓了处理器与内存之间的通信速度。要隐藏内存延迟,处理器需在内存读写和算术运算之间切换。高效的GPU编程还需合理组织内存访问,以实现合并内存访问并避免共享内存存储体冲突,而当数据记录大小动态变化时,这些任务并不容易完成。
幸运的是,越来越多的库可以解决上述问题。高级库让程序员能专注于算法,避免处理繁琐的细节,还具有硬件独立性和一次编写到处运行的优势。本文旨在评估高级库在数据密集型算法中的应用,并检验其在不同平台上的效率,选择了类似于C++ STL库的Thrust库作为高级GPU编程的新兴标准。实验任务选择了排列生成,它虽不是纯粹的数据库问题,但涵盖了数据库系统的重要方面:
1. 大量的内存读写操作
2. 海量数据
3. 多种适合GPU的实现方式
4. 线程或迭代次数不固定
二、任务描述
生成给定集合的所有排列是一个难题,即使对于小集合,其复杂度也超出了计算机的能力。因此,将GPU以及底层和高级
超级会员免费看
订阅专栏 解锁全文
2139

被折叠的 条评论
为什么被折叠?



