服务器 频道

观察:GPU软件开发需要突破三大障碍

  【IT168 专稿】中国超级计算机在国际舞台可谓风光无限,无论是去年国防科技大学的“天河一号”,还是今年曙光的“星云”,都确确实实让中国“牛”了一把,前者去年挺进TOP500前十,后者更是一举拿下第二,达到了前所未有的高度。不过,高兴之余,我们也不得不静心面对另一个实现:跟欧美日等发达国家相比,中国高性能计算最大的差距不在硬件水平,而主要在应用与软件两个方面。特别是随着CPU+GPU这种异构体系结构在超级计算机中的应用——“天河”与“星云”都使用了GPU做加速器,软件应用落后于硬件发展的矛盾就更加突出了。在日前由中科院软件所主办的“2010年中国高效能计算应用高峰论坛”上,GPU编程难、软件可移植性差、生态系统尚不成熟等一系列与软件应用相关的问题引发了专会专家的极大关注。

  一、编程与调优难

  2009年,北京大学信息学院的陈一峯教授在一套由16个节点组成GPU集群上成功进行了三维大规模傅立叶(3D FFT)变换数学库的研究。与另外一套同期购置的64节点CPU集群相比,GPU集群的成本只有40%,但却实现了3倍的FFT性能,在国内外同行中引发关注。

 一、编程与调优难

  虽然效果不错,但在专门研究并行语言的陈一峯看来,实现过程却并非易事。他分析道,在GPU系统上高效实现3D FFT,主要存在三大“难点”:一是算法难,二是编程难,三是几乎不可能实现的程序可移植性。

  他展示了一段代码,这段500多行的代码穿插使用了CUDA、Pthread、MPI、Infiniband/verbs四种编程工具。“要写出这段代码,不仅要求学会这四种编程工具,还要在一个程序中实现联合编译,其难度可想而知。”

 一、编程与调优难

  不过,中科院软件所高级工程师姚继峰表达了另一个有意思的观点:“目前在8核、16核的CPU上写高性能并行代码同样不容易,需要同时用到MPI和OpenMP,与其折腾这个,还不如去折腾GPU编程。”毕竟,有了GPU加速,就能够带来数倍、十倍甚至百倍的效率提升,加上GPU集群在性能功耗比、占地面积、成本等方面的优势,确实值得应用单位和开发人员放手一搏。

  姚继峰认为,2007年CUDA(Compute Unified Device Architecture)开发平台的出现其实已经大大降低了GPU的编程难度,但问题是性能需要进行调优,而调优非常困难——仅GPU本身优化就得考虑寄存器使用、共享内存、内存访问、L1/L2缓存、线程数、数据传输等多方面因素,而且GPGPU集群(GPU的通用计算)需要CPU与GPU协同工作,因此还得考虑CPU与GPU间任务分配与协同,以及多GPU负载均衡,软件在不同平台间移植等棘手问题。

 一、编程与调优难

  为此,早在2008年,中科院软件所研究员、中国高性能计算机TOP100排行榜创始人之一张云泉博士就组建了相应团队,进行了《基于NVIDIA Fermi GPU的Linpack性能优化》、《混合精度的HPL软件包实现与优化》、《基于OpenCL的SpMV自适应优化》、《FFTH的GPU优化》、《基于AMD/ATI GPU的Linpack性能优化》等一系列性能调优研究。

0
相关文章