14. 变换、Hough 变换、颜色空间转换等[21]。另外,2010 年 9 月,Graz 大学的研究人员发布
了专用于图像边缘分割的 GPU4Vision 库,用 GPU 实现图像分割算法的加速[22]。NVIDIA
主导的 OpenVIDIA 项目在 2010 年 6 月发布了 CUDA VisionWorkbench v 1.3.1.0,里面使用
OpenGL,Cg,CUDA-C 等语言,而且支持 OpenCL 和 DirectCompute 的例子会于近期添加,
该项目实现了立体视觉、光流法、特征跟踪的一些算法[23]。
在特征提取领域,瑞典的 Marten Bjorkman 和美国北卡罗来纳大学的 Wu 等实现了基于
CUDA 的 SIFT(Lowe's Scale Invariant Feature Transform,尺度不变特征)的提取[24];北卡
罗来纳州立大学的 Christopher Zach 等则在 GPU 上实现 KLT 算法用于视频中的特征跟踪。
在机器学习领域, 斯坦福大学的 Rajat Raina 等在 GPU 上实现了大规模深度无监督算法 DBNs
(Deep Belief Networks)和稀疏编码(Sparse Coding)算法;谷歌上的开源项目 multisvm
则基于 CUDA 实现了 SVM(Support Vector Machine,支持向量机)的多分类器,实验表明
加速效果明显[25]。
另外值得一提的是, 医学成像是最早利用 GPU 计算加快性能的应用之一, GPU 通用计
算在这一领域的应用日趋成熟,当前许多医学成像领域的算法已在 GPU 上实现。Digisens
和 Acceleware AxRecon 已经分别开发出能够利用 GPU 进行计算的用于 X 线 CT 和电子断层
摄影术的 3D 成像软件和在无损图像质量的情况下可实时重建图像的软件。Techniscan 的开
发人员在其新一代全乳房超声波成像系统中将其专有的逆向散射算法在 CUDA 平台上实
现,获得很高的加速比。东京大学 Takeyoshi Dohi 教授与他的同事则在其实时医疗成像的裸
眼立体成像系统中使用 GPU 加速体绘制过程和后期文件格式转换。另外,比利时安特卫普
大学,通用电气医疗集团,西门子医疗,东芝中风研究中心和纽约州立大学水牛城分校的都
针对 GPU 加速 CT 重建进行了各自的研究,不仅如此,西门子医疗用 GPU 实现了加速 MRI
中的 GRAPPA 自动校准,完成 MR 重建,快速 MRI 网格化,随机扩散张量磁共振图像
(DT-MRI)连通绘图等算法。其他的一些研究者则把医学成像中非常重要的二维与三维图
像中器官分割(如 Level Set 算法) ,不同来源图像的配准,重建体积图像的渲染等也移植到
GPU 上进行计算。
3.4 数据库与数据挖掘
面对当前海量增加的数据,搜索数据库并找到有用信息已经成为一个巨大的计算难题。
学术界以及微软、Oracle、SAP 等公司的研究人员正在研究利用 GPU 的强大计算能力来找
到一款可扩展的解决方案。
加利福尼亚大学的 Santa Cruz 等 (现任职于 Oracle) 比较早地提出把 GPU 强大的运算能
力应用于数据库技术。 2009 年 Oracle 的 Blas, Tim Kaldewey 在 IEEE Spectrum 上著文分析为
什么图形处理器将彻底改变数据库处理(Why graphics processors will transform database
processing) 在另一篇文章中他们探索了利用 GPU 实现并行的搜索算法[27],
, 如并行二分搜
索和 P-ary 搜索; 更多的研究者如深圳先进技术研究院和香港中文大学的 S. Chen, A. Heng, P.
加州伯克利大学的 Nadathur Satish[28],微软研究院的 Naga K. Govindaraju 等[29],瑞典的
Erik Sintorn 等[30]则研究了在 GPU 上实现高效率的并行排序算法。香港科技大学的
Bingsheng He 等研究了使用 GPU 进行查询协同处理[31]。
在数据挖掘领域,HP 实验室的 Wu,Zhang,Hsu 等研究了使用 GPU 对商业智能分析进
行加速[32]。福尼吉亚理工大学的 Sean P. Ponce 在其硕士论文中应用算法转换于临时数据挖
掘,使其数据并行化,更适合在 GPU 上实现加速[33]。北卡罗来纳州立大学的 Y. Zhang 和
美国橡树岭国家实验室的 X. Cui 联合研究了利用 CUDA 加速文本挖掘,开发了优化的文本
搜索算法[34]。马里兰大学的 Schatz,Trapnel 等开发的 Cmatch 和 MUMmerGPU[35][36],
在 GPU 上实现了高效的的后缀树算法,能够对一系列查询字符串及其子串进行并行搜索,
15. 从而进行快速准确的字符串匹配。香港科技大学的 Fang 和微软亚洲研究院的 He 等开发了
一个小工具 GPUMiner,实现了 K-均值聚类算法和先验频率模式挖掘算法,用 CPU 对控制
数据 I/O 和 CPU 与 GPU 之间的数据传输,用 CPU 和 GPU 联合实现并行算法并提供可视化
界面[26]。
另有一些研究者正在研究将 Map-Reduce 架构扩展到 GPU 上实现。香港科技大学的
Bingsheng He 和 Wenbin Fang 在单 GPU 上开发的 Mars,目前已经包含字符串匹配,矩阵乘
法,倒序索引,字词统计,网页访问排名,网页访问计数,相似性评估和 K 均值等 8 项应
用,能够在 32 与 64 位的 linux 平台下运行[37]。德克萨斯大学的 Alok Mooley 等也在分布
式的 GPU 网络上实现了功能类似的系统 DisMaRC[38]。加州伯克利大学的 Bryan Catanzaro
等则在基于 CUDA 实现的 Map-Reduce 框架下实现了 SVM(Support Vector Machine,支持
向量机)的训练和分类。
4、总结和展望
GPU 拥有超高的计算密度和显存带宽, CPU+GPU 混合架构凭借其高性能、 低功耗等优
势在许多领域有优异的表现。巨大的运算能力让人们对 GPU 充满期待,似乎在一夜之间,
GPU 用于通用计算(General Purpose GPU)及其相关方面的问题成为一个十分热门的话题。
视频编解码应用、矩阵运算及仿真、医疗行业应用、生命科学研究等需要大量重复的数据集
运算和密集的内存存取,纷纷利用 GPU 实现了比 CPU 强悍得多的计算能力[39]。
展望未来 GPU 发展,以下几个问题是必须解决的。首先是分支预测能力,GPU 需要拥
有更好的分支能力,才能运行更多复杂程序,更好的利用 cache 来掩盖分支的延迟;然后是
更大的缓存和 Shared memory(AMD 称之为 LDS ,Local Data Share),这种共享寄存器负
责共享数据和临时挂起线程,容量越大,线程跳转和分支能力就越强;线程粒度同样重要,
粒度越细能够调用并行度来进行指令延迟掩盖的机会越大,性能衰减越小,而细化粒度对
GPU 的线程仲裁机制要求很大。
GPU 发展到今天,已经突破了无数技术屏障,最初因图形处理而诞生的硬件发展成为
今天大规模并行计算领域的明星。我们完全可以相信 GPU 的架构还会不断优化,并被越来
越多的大型计算所采用。
参考文献:
[1] 张舒,褚艳丽等著, GPU 高性能计算之 CUDA, 中国水利水电出版社, 2009
[2] John D. Owens, Mike Houston,et al,GPU Computing, Proceedings of the IEEE, Vol. 96, No. 5,
May 2008
[3] GPGPU website, http://gpgpu.org/
[4] 10 年 GPU 通用计算回顾, http://vga.zol.com.cn/172/1721480.html
[5] Programming Guide:ATI Stream Computing,
http://developer.amd.com/gpu/ATIStreamSDK/assets/ATI_Stream_SDK_CAL_Programming_
Guide_v2.0%5B1%5D.pdf
[6] Fermi Compute Architecture White Paper
http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architect
ure_Whitepaper.pdf
[7] John D. Owens1, David Luebke, et al, A Survey of General-Purpose Computation on Graphics
Hardware, COMPUTER GRAPHICS forum, Volume 26 (2007), number 1 pp. 80–113
16. [8] NVIDIA CUDA Programming Guide
http://developer.download.nvidia.com/compute/cuda/2_0/docs/NVIDIA_CUDA_Programmin
g_Guide_2.0.pdf
[9] OpenCL Website, http://www.khronos.org/opencl/
[10] 维基百科 OpenCL Website, http://en.wikipedia.org/wiki/OpenCL
[11] 百度百科 DirectCompute Website, http://baike.baidu.com/view/3245449.html?fromTaglist
[12] Technical Overview:ATI Stream Computing,
http://developer.amd.com/gpu_assets/Stream_Computing_Overview.pdf
[13] 维基百科 GPGPU Website, http://en.wikipedia.org/wiki/GPGPU
[14] Matlab Parallel Computing, http://www.mathworks.com/products/parallel-computing/
[15] Jacket Website, http://www.accelereyes.com/
[16] http://www.nvidia.com/object/builtforadobepros.html
[17] AMAX GPU 集群开创高性能计算新纪元, http://server.zol.com.cn/189/1891144.html
[18] Announcing Cluster GPU Instances for Amazon EC2, http://aws.amazon.com/ec2/
[19] GPU VSIPL: High-Performance VSIPL Implementation for GPUs
http://gpu-vsipl.gtri.gatech.edu/
[20] NVIDIA Performance Primitives (NPP) Library
http://developer.nvidia.com/object/npp_home.html
[21] CUDA Vision and Imaging Library, http://www.cuvilib.com/
[22] GPU4Vision, http://gpu4vision.icg.tugraz.at/
[23] OpenVIDIA: Parallel GPU Computer Vision
http://openvidia.sourceforge.net/index.php/OpenVIDIA
[24] SiftGPU: A GPU Implementation of Scale Invariant Feature Transform (SIFT)
http://www.cs.unc.edu/~ccwu/siftgpu/
[25] Multisvm Website, http://code.google.com/p/multisvm/
[26] GPUMiner Website, http://code.google.com/p/gpuminer/
[27] Parallel Search On Video Cards
http://www.usenix.org/event/hotpar09/tech/full_papers/kaldeway/kaldeway.pdf
[28] Nadathur Satis, et al, Designing Efficient Sorting Algorithms for Manycore GPUs, 23rd IEEE
International Parallel and Distributed Processing Symposium, May 2009
http://mgarland.org/files/papers/gpusort-ipdps09.pdf
[29] Naga K. Govindaraju, et al, GPUTeraSort:High Performance Graphics Coprocessor Sorting
for Large Database Management, Microsoft Technical Report 2005
http://research.microsoft.com/pubs/64572/tr-2005-183.pdf
[30] Erik Sintorn, et al, Fast Parallel GPU-Sorting Using a Hybrid Algorithm,
http://www.cse.chalmers.se/~uffe/hybridsort.pdf
[31] GPUQP: Query Co-Processing Using Graphics Processors, http://www.cse.ust.hk/gpuqp/
[32] Ren Wu, et al, GPU-Accelerated Large Scale Analytics, HP Laboratories
http://www.hpl.hp.com/techreports/2009/HPL-2009-38.pdf
[33] Sean P. Ponce, Towards Algorithm Transformation for Temporal Data Mining on GPU,
Master Thesis of Sean P. Ponce, Virginia Polytechnic Institute and State University
http://scholar.lib.vt.edu/theses/available/etd-08062009-133358/unrestricted/ponce-thesis.pdf
[34] Yongpeng Zhang, Frank Mueller, et al, GPU-Accelerated Text Mining, EPHAM’09
http://moss.csc.ncsu.edu/~mueller/ftp/pub/mueller/papers/epham09.pdf
17. [35] Cmatch: Fast Exact String Matching on the GPU,http://www.cbcb.umd.edu/software/cmatch/
[36] MUMmerGPU: High-throughput sequence alignment using Graphics Processing Units
http://sourceforge.net/apps/mediawiki/mummergpu/index.php?title=MUMmerGPU
[37] Mars: A MapReduce Framework on Graphics Processors
http://www.cse.ust.hk/gpuqp/Mars.html
[38] DisMaRC: A Distributed Map Reduce framework on CUDA
http://www.cs.utexas.edu/~karthikm/dismarc.pdf
[39] NVIDIA 行业软件解决方案,http://www.nvidia.cn/object/vertical_solutions_cn.html