欢迎来到天天文库
浏览记录
ID:33809784
大小:375.75 KB
页数:5页
时间:2019-02-28
《基于gpu的并行优化技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、万方数据第26卷第11期2009年11月计算机应用研究ApplicationResearchofComputersV01.26No.11NoV.2009基于GPU的并行优化技术左颢睿1’2,张启衡1,徐勇1’2,赵汝进1’2(1.中国科学院光电技术研究所,成都610209;2.中国科学院研究生院,北京100039)摘要:针对标准并行算法难以在图形处理器(GPU)上高效运行的问题,以累加和算法为例,基于Nvidia公司统一计算设备架构(CUDA)GPU介绍了指令优化、共享缓存冲突避免、解循环优化和线程过载优化四种优化方法。实验结果表明,并行优化能有效提
2、高算法在GPU上的执行效率,优化后累加和算法的运算速度相比标准并行算法提高了约34倍。相比CPU串行实现提高了约70倍。关键词:图形处理器;并行优化;累加和;统一计算设备架构中图分类号:TP391;TP311文献标志码:A文章编号:1001-3695(2009)11—4115.04doi:10.3969/j.issn.1001-3695.2009.11.034.ParalleloptimizetechnologybasedonGPUZUOHao-ruil”,ZHANGQi-hen91,XUYon91”,ZHAORu-jinl’2(1.Institut
3、eofoptics&Electronics,ChineseAcademyofSciences,Chengdu610209,China;2.GraduateSchool。ChineseAcademyof&抛,B4/i增100039,China)Abstract:StandardparallelalgorithmcannotworkefficientlyonGPU.Thispapertookreductionalgorithmforexample,intro—ducedfourparalleloptimamethodsforNVIDIA’Sgraphic
4、sprocessorunit(GPU)whichsupportedCUDAarchitecture.Thesemethodsincludedinstructionoptimizeandsharedmemoryconflictavoidandloopunrollandthreadsoverloadoptimize.Theex-perimentresultshowsthat:paralleloptimizecansignificantlyspeeduptheGPUcomputespeed.Theoptimizedreductionalgo-rithmis
5、34timesfasterthanstandardparallelalgorithmand70timesthanCPU—basedimplementation.Keywords:graphicsprocessorunit(GPU);paralleloptimize;reduction;computeunifieddevicearchitecture(CUDA)随着GPU技术的快速发展,当前的GPU已经具有很强的并行计算能力,浮点运算能力甚至可以达到同代CPU的10倍以上⋯。同时,随着Nvidia公司的CUDA(统一计算设备架构)的推出,使得GPU具有
6、更好的可编程性,因此在诸如物理系统模拟心j】、金融建模H’51以及地球表面测绘哺1等通用计算领域有着广泛的应用。如何充分利用GPU的并行计算特点实现一些复杂运算的快速求解,已经成为当今的热点问题之一。GPU具有独特的硬件结构,采用常规并行算法,很难发挥GPU的运算优势,通常需要结合GPU的硬件特点和算法的可并行性,才能有效提高GPU的计算效率¨’8o。本文以具有代表性的累加和算法在GPU上的优化实现为例介绍基于GPU的并行优化技术。1累加和算法及其并行实现已知数组名[n],累加和算法公式为nsum=.Xx[k](1)E=u累加和算法对r/,个元素进行
7、加法运算,不论采用串行还是并行算法,均需要执行/-t一1次运算。GPU是基于SIMD架构的并行处理器,因此累加和运算可以采用树型计算将串行运算改写为并行运算旧J,树型算法示意图如图1所示。图l树型算法示意图从图1中可以看到,采用树型结构将累加和运算分为s层(s=l092n),对第k层需要进行n/2‘次运算,每一层内的运算可以并行,层与层之间的计算只能串行。代码1给出了常见并行累加和算法的伪代码:代码1//声明共享缓存sdata(DSharedsdata[];//并行读取数据,tid为线程序号。i为数组下标//g__idata和g_odata分别是输入
8、输出数组蓬)parallel:sdata[tid]=g_idata[i];//k代表第k层运算,maxThr
此文档下载收益归作者所有