许建平
(海军装备研究院 北京 100161)
随着近年来计算机图形处理单元(Graphic Processing Units,GPU)工艺的飞速发展,GPU的内存带宽、浮点运算能力已大大超过了同期的通用处理器。2003年SIGGRAPH大会提出了GPGPU(General-purpose computing on GPU)的概念,GPU逐渐从由专用的固定功能单元组成的专用并行处理器向以通用计算资源为主,固定功能单元为辅的架构转变。这使得基于GPU的通用计算成为近几年人们关注的一个研究热点。
计算统一设备架构(Compute Unified Device Architecture,CUDA)是NVIDIA公司于2007年推出的针对其G80核心以后的GPU的并行计算框架[1]。在CUDA架构下,一个程序分为Host端和Device端。Host端是指在CPU上执行的部份,而Device端则是在GPU上执行。Device端的程序又称为“Kernel”。CUDA程序经过NVCC编译器编译后,一部分代码被标准C/C++编译器编译后在CPU上执行,另一部分则首先转换成PTX代码,然后才转换成GPU指令。
CUDA实际上只是程序和GPU硬件资源间的接口,代码的执行效率依赖于GPU的硬件资源。NVIDIA的GPU是由若干个纹理处理器集群(Texture Processor Cluster,TPC)组成。不同规格的GPU的TPC数量不同。每个TPC由一个纹理单元和两个流式多处理器(Streaming multiprocessor,SM)组成。每个SM包括一个用于读取、解码和发射指令的前端和一个包括八个流处理器(Streaming Processor,SP)、两个超级函数单元的后端组成。CUDA程序在GPU上执行时,采用单指令多线程的执行方式,在一个指令周期内可以并行执行上千个线程。图1为CUDA程序执行框架。
图1 CUDA程序执行框架
CUDA架构下的内存访问模型如图2所示。每个SM具有四种片内存储器:1)每个SP都有一组本地32位寄存器;2)共享内存(Shared Memory),同一Block内的线程共享同一片Shared Memory;3)只读高速缓存(Constant Cache);4)只读纹理高速缓存(Texture Cache),用于加速纹理内存的读取。本地内存(Local Memory)和全局内存(Global Memory)为设备内存的读写区域,且无高速缓存。GPU利用大量并行化执行的方式来隐藏内存访问的延迟。此外,还可以通过合并(coalesce)连续内存访问操作来加速全局内存的操作。
图2 CUDA架构下的内存访问模型
由于GPU的通用特性和CUDA提供的方便的开发环境,CUDA技术已被广泛用于科学计算、光线模拟等数据密集型应用中。以下将对CUDA技术的应用现状进行简要的阐述。
凭借GPU的强大并行计算能力以及CUDA的良好编程接口,CUDA在许多领域获得了大量的应用,用以代替CPU的串行计算模式。目前,CUDA的应用主要集中在以下五个方面:图形图像处理、数学计算、物理学、生物医学、通信。
以下将对CUDA在这几个方面的应用情况分别进行介绍。
GPU最初专门用于图形图像处理,因此,CUDA用于图形图像处理加速是十分自然的。图形图像处理方面的应用集中于光线追踪和实时渲染方面。
全局光照绘制由于其绘制的真实感,已大量应用于电影制作、三维游戏等领域。不过,由于需要计算物体之间光的相互反射等间接光照效果,因而绘制速度较慢。其最大计算量来自可见性的判断和最后间接光照的收集。Zhou等人利用CUDA技术实现快速的kD树建立和遍历,取得了比CPU快一个数量级的求解计算速度[2]。Wang等人利用kD树结构及自适应的间接光照收集过程实现了交互的全局光照效果[3]。Ritschel等人将间接光照收集点离散后组织成层次点结构,并利用BRDF的重要性采样和微绘制技术快速地收集间接光照[4]。Hughes等人提出了并行的无栈遍历算法Kd-Jump用于快速等值面的光线追踪算法。该算法无需全局内存(栈),只需要少量只读内存保存矩阵,因而加快了遍历效率[5]。
国内学者吴向阳等人提出基于形状因子采样的实时全局光照算法,在视点改变、光照改变和材质改变的情况下,对静态场景能获得逼近真实的实时全局光照绘制[6]。史可鉴等人提出基于Shortstack-kD算法的雷达光线跟踪方法,经过GPU加速不仅能对不同种类的场景都能获得明显性能提升,还可以根据场景不同情况控制栈长度,以达到算法的最高性能和最大灵活性[7]。黄梦成等人提出基于CUDA渲染器的顺序独立透明现象的单遍高效绘制算法,采用CUDA语言实现了一个图形流水管线系统[8],从而在单遍场景中实现了透明现象的高效绘制[9]。
此外,CUDA还被用于视频编解码[10]、目标特征提取[11~12]等图像处理应用。
数值计算方面的应用主要是利用CUDA加速经典数学理论问题的求解过程。典型应用有:
1)多重网格算法:Goddeke等人采用GPU加速多重网格算法中的循环约化三对角方程求解,获得了1个数量级的加速效果[13]。
2)粒子滤波:Chao等人实现了并行粒子滤波算法,对经典的跟踪算法测试结果显示,该算法在CUDA上的执行速度提高了5.73倍[14]。
3)奇异值分解:Lahabar等人采用CUDA加速奇异值分解算法,相对于MATLAB中的算法提高了60倍,比Intel双核处理器上的LAPACK算法提高了8倍[15]。
4)模糊神经网络:Juang等人提出了模糊神经网络的并行化算法,相对于CPU实现的速度提高了30倍[16]。
5)NP问题求解:Islam等人提出了基于CUDA的高度可伸缩的SAT问题求解方法,求解速度相对于CPU提高了188倍,而且解的数量同GPU的内核数量成线性关系[17]。
6)密码破解:周林等人利用CUDA技术加速MDx系列Hash算法的攻击算法。以攻击MD5的差分攻击算法为例,利用多消息修改方法改进了MD5隧道差分攻击算法,通过减少分支判断指令在CUDA上获得了10倍的加速效果[18]。
CUDA在物理学上的应用包括流体力学、电磁学、分子动力学、核物理等领域的加速。
陈曦等人在大规模流体场景模拟过程中,提出一种基于平滑粒子流体力学(SPH)进行流体场景模拟的算法,通过引入一种三维空间网格划分算法和改进的并行基数排序算法,从而实现实时的流体计算和模拟,并能模拟出丰富的细节效果[19]。三维磁流体力学数值模拟是研究日冕和太阳风最常用的方法之一,其中日冕偏振亮度是进行观测对比的重要方法。江雯倩等人提出了日冕偏振亮度并行计算模型,利用CUDA技术达到了近实时模拟与观测数据比对的计算要求[20]。
时域有限差分(Finite-difference time domain,FDTD)被应用于数值模拟中,不过其计算复杂度相当大。Nagaoka等人采用GPU加速电磁仿真中的3DFDTD方法,为减少CPU与GPU间的数据交换延迟,所有内存都在GPU中分配,该方法中能分配的内存总量受GPU内存总量限制,不适合于大规模仿真[21]。Webb等人建立了边界丢失和情况下的3D-FDTD框架,在最新的FERMI处理器上获得了80倍的加速效果[22]。Junkin则对适形FDTD框架进行了加速[23]。
分子动力学(molecular dynamics,MD)模拟的计算复杂度一直是制约该领域发展的瓶颈。目前,已有一些基于CUDA的 MD模拟实例[24~25]等,发挥GPU性能达到CPU单核性能的几十到上百倍之间。但完全在GPU上进行、并且采用大量GPU并行或针对多项系统的MD模拟研究则较少。中国科学院的陈飞国等人利用CUDA技术和MPI协议,实现了多相纳微流动在GPU上的并行MD模拟,在主流的GPU上可发挥20~60倍于主流CPU的计算能力。不过,该方法目前只考虑了分子间的LJ势,实际应用中的库伦力和化学键等仍然需要深入研究[26]。
此外,Gorbunov等人利用GPU加速ALICE高级触发系统中的重离子碰撞事件跟踪,实现实时蒙特卡罗事件的跟踪[27]。
随着生物医学工程领域研究的不断深入和发展,该领域涉及到的运算复杂也越来越高,不少学者逐渐将CUDA技术运用到该领域。
Li等人采用GPU集群系统来加速3D生物分子成像工具软件EMAN。针对EMAN中的瓶颈过程—RTFAlign算法的特性,设计基于CUDA的渗透编程方法,实现内存对齐访问,并隐藏片外内存访问延迟。图3以calcMCF函数为例说明渗透编程方法的实施过程[28]。Shi等人将CUDA技术用于加速高吞吐短测DNA序列片段的错误校正获得了10~19倍的加速效果[29]。Zhuo等人采用CUDA技术加速交互式场补偿MR图像重建,获得两个数量级的加速效果,并保证了场补偿精度[30]。Boyer等人采用CUDA加速白细胞的跟踪与监测,获得了200倍的加速效果[31]。Espenshade等人采用GPU加速流式细胞术的分割算法,在Tesla处理器上分割速度提高了一到两个数量级[32]。Liu等人对蛋白质序列数据库的浏览工具BLASTP进行加速,获得了10倍左右的加速度[33]。Chalkidis对生物通路中的混合函数Petri网模拟算法进行CUDA加速,获得了18倍的加速效果[34]。
国内学者林江等人利用CUDA加速Smith-Waterman算法以精确高效地进行生物序列比对。该算法使用菱形数据布局以充分利用GPU的并行计算能力,在NVIDIA GeForce GTX 285显卡上最高可获得120倍以上的性能提升[35]。张繁等人搭建GPU集群系统来加速计算基于量子化学的蛋白质分子场,提出并实现了集群系统结点中GPU和多核CPU协同计算的并行加速架构优化设计,在保持较高计算精度的前提下大大提高了系统的计算性能[36]。
图3 渗透编程实例
CUDA在通信领域的应用主要集中在雷达和卫星信号处理上。
Song等人采用CUDA框架加速卫星图像的信源信道解码过程中的逆离散小波变换。在进行水平变换时,将输入信号通过对齐的方式从全局内存预取至共享内存中加速变换。在进行垂直变换时,则先对输入信号进行矩阵转置,然后按照水平变换的方式实现变换。该系统可以实现1024×1024的卫星图像90帧/秒的解码[37]。Park等人将用GPU实现超宽带(UWB)雷孔径雷达的信号处理,提出并行异步脉冲重建算法,然后在NVIDIA的CUDA和ATI的Brook+平台上分别实现该算法,结果表明前者的信号处理速度更好[38]。Chang等人在GPU上加速LDPC码解码器的log-SPA算法,同CPU上的单线程实现相比速度提高了270倍[39]。
国内学者程俊仁等人提出了一种由GPU完成信号搜索计算的快速实现方法。该方法以基于FFT的码相位并行搜索算法为基础,通过CUDA编程实现了信号搜索在GPU上的并行计算。测试结果表明该方法的捕获速度显著提高,冷启动条件下搜索全部32颗卫星只需1.653秒,为GPS软件接收机的实时化提供了重要保证[40]。
除了以上领域,CUDA还在地震信号分析[41]、工业控制[42]、潜艇声纳信号处理[43]等领域获得了一定的应用。特别是美国GE公司推出的加固型6U OpenVPX单板计算机以及MotionDSP公司的IkenaISR无人机视频采集软件等产品在美军装备中的应用,则更能体现CUDA架构的计算性能优势。
由于GPU的特点是处理密集型数据和并行数据计算,因此CUDA非常适合需要大规模并行计算的领域。同传统的CPU的串行执行方式相比,采用CUDA技术可以获得几倍到几百倍的加速效果。随着GPU的带宽和处理能力不断提高,CUDA必将在诸如军事和航天等对于计算性能有着特殊要求的领域得到更为广泛的应用。另外,即便是CUDA技术已经获得应用的领域,如光线追踪、流体模拟等,目前的应用主要针对简单的场景和模型,如何将CUDA技术应用于更复杂的场景或者模型仍然值得深入研究。
[1]NVIDIA.NVIDIA CUDA Compute Unified Device Architecture-Programming Guide Version 1.1.USA,2007
[2]K Zhou,Q Hou,R Wang,et al.Real-time KD-tree Construction on Graphics Hardware[J].ACM Trans on Graphics,2008,27(5):Article No.126
[3]R Wang,R Wang,K Zhou,et al.An efficient GPU-based Approach for Interactive Global Illumination[C]//ACM SIGGRAPH,New York,ACM Press,2009:Article No.91
[4]T Ritshcel,T Engelhardt,T Grosch,et al.Micro-rendering for Scalable,Parallel Final Gathering[C]//ACM SIGGRAPH,New York,ACM Press,2009:Article No.132
[5]D Hughes,L Lim.Kd-Jump:a Path-Preserving Stackless Traversal for Faster Isosurface Raytracing on GPUs[J].IEEE Trans on Visualization and Computer Graphics,2009,15(6):1555~1562
[6]吴向阳,柴学梁,王毅刚,等.利用形状因子采样的实时全局光照绘制[J].计算机辅助设计与图形学学报,2011,23(6):941~948
[7]史可鉴,王斌,朱恬倩,等.GPU上的kD-tree雷达模拟加速[J].计算机辅助设计与图形学学报,2010,22(3):440~448
[8]F Liu,M Huang,X Liu,et al.CUDA render:A Programmable Graphics Pipeline[C]//Proc.of the ACM SIGGRAPH Asia,2009
[9]黄梦成,刘芳,刘学慧,等.基于CUDA渲染器的顺序独立透明现象的单遍高效绘制[J].软件学报,2011,22(8):1927~1933
[10]甘新标,沈立,王志英.基于CUDA的并行全搜索运动估计算法[J].计算机辅助设计与图形学学报,2010,22(3):457~460
[11]任化敏,张勇东,林守勋.GPU加速的基于增量式聚类的视频拷贝检测方法[J].计算机辅助设计与图形学学报,2010,22(3):449~456
[12]J Kim,E Park,X Cui,et al.A Fast Feature Extraction in Object Recognition Using Parallel Processing on CPU and GPU[C]//Proc of IEEE SMC,2009,San Antonio,USA,2009:3842~3847
[13]D Goddeke,R Strzodka.Cyclic Reduction Tridiagonal Solvers on GPUs Applied to Mixed-Precision Multigrid[J].IEEE Trans on Parallel and Distributed Systems,2011,22(1):22~32
[14]M Chao,C Chu,C Chao,et al.Efficient Parallelized Particle Filtering Design on CUDA[C]//Proc of IEEE Workshop on Signal Processing Systems,2010,CA,USA,2010:299~304
[15]S Lahabar,PJ Narayanan.Singular Value Decomposition on GPU using CUDA[C]//Proc of IEEE Int Sym on Parallel & Distributed Processing,2009,Rome,Italy
[16]C Juang,T Chen,W Cheng.Speedup of Implementing Fuzzy Neural Networks With High-Dimensional Inputs Through Parallel Processing on Graphic Processing Units[J].IEEE Trans on Fuzzy Systems,2011,19(4):717~728
[17]S Islam,R Tandon,S Singh,et al.A Highly Scalable Solution of an NP-Complete Problem using CUDA[C]//Proc of Int Sym on PARELEC,2011,Luton,UK,2011:93~98
[18]Y Zhuo,X Wu,J Haldar,et al.Accelerating Iterative Field-compenstated MR Image Reconstruction on GPUs[C]//Proc of IEEE Int Sym on Biomedical Imaging,2010,Rotterdam,Netherlands,2010:820~823
[19]陈曦,王章野,何戬,等.GPU中的流体场景实时模拟算法[J].计算机辅助设计与图形学学报,2010,22(3):396~405
[20]江雯倩,钟鼎坤,解张鹏,等.基于CPU/GPU的日冕偏振亮度并行计算模型[J].空间科学学报,2011,31(1):51~56
[21]T Nagaoka,S Watanabe.A GPU-Based Calculation Using the Three-Dimensional FDTD Method for Electromagnetic Field Analysis[C]//Proc of IEEE EMBS Conference,2010,Buenos Aires,Argentina,2010:327~330
[22]C Webb,S Bilbao.Computing Room Acoustics with CUDA-3DFDTD Schemes with Boundary Losses and Viscosity[C]//Proc of ICASSP,2011,Prague,Czech,2011:317~320
[23]G Junkin.Conformal FDTD Modeling of Imperfect Conductors at Millimeter Wave Bands[J].IEEE Trans on Antennas and Propagation,2011,59(1):199~205
[24]A Meel,A Arnold,D Frenkel,et al.Harvesting Graphics Power for MD Simulations[J].Mol Simul,2008,34(3):259~266
[25]J Anderson,C Lorenz,A Travesset.General Purpose Molecular Dynamics Simulations Fully Implemented on Graphics Processing Units[J].Journal of Comput.Phys.,2008,227(10):5342~5359
[26]陈飞国,葛蔚,李静海.复杂多相流动分子动力学模拟在 GPU上的实现[J].中国科学 B辑:化学,2008,38(12):1120~1128
[27]S Gorbunov,D Rohr,K Aamodt,et al.ALICE HLT High Speed Tracking on GPU[J].IEEE Trans on Nuclear.Science,2011,58(4):1845~185
[28]X Li,G Tan,Z Guo.Accelerating EMAN on A GPU Cluster System[J].ACTA BIOPHYSICA SINICA,2010,26(7):600~605
[29]H Shi,B Schmidt,W Liu,et al.Accelerating Error Correction in High-Throughput Short-Read DNA Sequencing Data with CUDA[C]//Proc of IEEE Int Sym on Parallel & Distributed Processing,2009,Rome,Italy
[30]Y Zhuo,X Wu,J Haldar,et al.Accelerating Iterative Field-compenstated MR Image Reconstruction on GPUs[C]//Proc of IEEE Int Sym on Biomedical Imaging,2010,Rotterdam,Netherlands,2010:820~823
[31]M Boyer,D Tarjan,S Acton,et al.Accelerating Leukocyte Tracking using CUDA:A Case Study in Leveraging Manycore Coprocessors [C]//Proc of IEEE Int Sym on Parallel and Distributed Processing,2009,Rome,Italy
[32]J Espenshade,A Pangborn,J Cavenaugh.Accelerating Partition Algorithms for Flow Cytometry on GPUs[C]//Proc of IEEE Int Sym on Parallel and Distributed Processing with Applications,2009,Chengdu,China,2009:226~233
[33]W Liu,B Schmidt, W Muller-Witting.CUDABLASTP:Accelerating BLASTP on CUDA-Enabled Graphics Hardware[J].IEEE/ACM Trans on Computational Biology and Bioinformatics,2011,8(6):1678~1685
[34]G Chalkidis,M Nagasaki,S Miyano.High Performance Hybrid Functional Petri Net Simulations of Biological Pathway Models on CUDA[J].IEEE/ACM Trans on Computational Biology and Bioinformatics,2011,8(6):1545~1556
[35]林江,唐敏,童若锋.GPU加速的生物序列比对[J].计算机辅助设计与图形学学报,2010,22(3):420~427
[36]张繁,王章野,姚建,等.应用GPU集群加速计算蛋白质分子场[J].计算机辅助设计与图形学学报,2010,22(3):412~419
[37]C Song,Y Li,B Huang.A GPU-Accelerated Wavelet Decompression System with SPIHT and Reed-Solomon Decoding for Satellite Images[J].IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing,2011,4(3):683~690
[38]S Park,J Ross,D Shires,et al.Hybrid Core Acceleration of UWB SIRE Radar Signal Processing[J].IEEE Trans on Parallel and Distributed Systems,2011,22(1):46~57
[39]C Chang,Y Chang,M Huang,et al.Accelerating Regular LDPC Code Decoders on GPUs[J].IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing,2011,4(3):653~659
[40]程俊仁,刘光斌,张博.基于CUDA的GPS信号快速捕获[J].宇航学报,2010,31(10):2407~2410
[41]张兵,赵改善,黄骏,等.地震叠前深度偏移在CUDA平台上的实现[J].勘探地球物理进展,2008,31(6):427~432
[42]G Cena,M Cereia,S Scanzio,et al.A High-Performance CUDA-Based Computing Platform for Industrial Control Systems[C]//Proc of IEEE Int Sym on Industrial Electronics,2011,Gdansk,Poland,2011:1169~1174
[43]李晓敏,侯朝焕,鄢社锋.一种基于GPU的主动声纳带宽信号处理实时系统[J].传感技术学报,2011,24(9):1279~1284