APP下载

GPU的现在与未来

2011-11-09王鹏谢强

中国教育网络 2011年11期
关键词:开发人员体系结构吞吐量

文/王鹏 谢强

GPU的现在与未来

文/王鹏 谢强

GPU代表了目前高性能计算的最前沿,对科学及工程计算正在产生着深远的影响。

异构计算介绍

自2004年以来,由于功耗和存储器速度等原因,CPU单核的性能已经几乎停止提升。所以最近几年所有的新CPU都是靠不停增加核的数目来提高芯片的整体性能。这使得多核并行计算成为所有开发人员都必须要面对的问题。因此什么样的多核体系结构更适合并行计算成了一个重要问题。

从体系结构的观点来看,CPU本质上是一种针对延迟(latency)优化的体系结构。它的首要设计目标是优化单线程的执行性能。与此对应的趋势是针对吞吐量(throughput)优化的众核体系结构。比如Sun的Niagara处理器,IBM的Cell处理器,以及nVIDIA的图形处理器(GPU)。简单地说,吞吐量优化处理器的策略是降低单线程的性能但以在众核上同时运行大量线程的方式来提高总体处理能力(高吞吐量)。因此吞吐量优化处理器的总体性能往往比延迟优化处理器高得多。比如最新GPU的浮点峰值通常是最新CPU的十倍以上。

在2004年之前,吞吐量优化处理器主要被用于对性能要求极高的特殊类型应用,如计算机图形学(GPU与Cell)或大规模数据库处理(Niagara)。历史上这些领域对性能几乎无止境的需求推动了吞吐量优化处理器性能的快速提升。在并行计算成为必须之后,由于吞吐量优化处理器更高的性能,很多开发人员开始认识到它们是一种对很多并行应用更适合的体系结构。所以近年吞吐量优化处理器在通用并行计算中变的越来越重要。

一个实际的应用往往包括需要低延迟的部分(如输入输出逻辑控制)和需要高吞吐量的部分(如核心算法计算)。因此无论是延迟优化处理器还是吞吐量优化处理器都不是普适的理想方案。异构计算(heterogeneous computing)的核心想法就是优化使用资源,用合适的工具来解决合适的问题。程序需要低延迟的部分就在CPU上计算,需要高吞吐量的部分就在GPU上计算。实践证明对很多大计算量的应用使用异构计算技术都可以得到非常显著的性能加速。比如图形图像处理,视频处理,分子动力学,地质勘探,流体力学,数据挖掘,生物信息学等都是适合异构计算的应用。

使用GPU的异构计算在高性能计算中已是一种主流技术。比如Top500前五名有三台机器都是GPU异构集群。美国橡树岭国家实验室刚宣布了他们计划在2012年用nVIDIA的GPU来搭建一台峰值20 Pflop/s的集群。在我国,天津超算中心2010年使用了7168个nVIDIA的GPU搭建了峰值4.7 Pflop/s,Linpack实测性能2.57 Pflop/s的天河1A系统。这套系统在2010年的Supercomputing大会上排在了Top500的第一名。

图1 GPU体系结构示意

GPU体系结构

顺应并行计算的潮流,近年来nVIDIA对GPU体系结构进行了很多针对通用并行计算的创新。在今天,nVIDIA的Tesla GPU已是一款专门针对通用并行计算设计的完全可编程众核芯片。只是因为历史原因,我们仍称其为GPU。

处理器市场的传统并行架构主要分为MIMD(多指令多数据流)与SIMD(单指令多数据流)两种,各有其优缺点。SIMD性能更高但MIMD更灵活。GPU是一种综合MIMD与SIMD两种架构优点的新并行架构。如图1所示,GPU由多个流多处理器(SM)构成,每个SM包含多个核。每个SM类似于一个SIMD处理器。但与传统SIMD有一个重要区别:SM上的不同的线程既可执行同样的指令,也完全允许执行不同的指令,只是前者性能更高。这就兼顾了SIMD的高性能与编程的灵活性。这种更灵活的SIMD架构称为SIMT(Single Instruction Multiple Thread)架构。此外,每个SM有自己完全独立的指令调度器,因此简单的说GPU是由多个SIMT构成的MIMD处理器。

以nVIDIA最新Fermi架构的Tesla M2090 为例,它由16个SM组成。每个SM包含32个核。每个核可以在一个时钟周期进行最高两次单精度或一次双精度浮点运算。因此在1.3GHz的时钟频率下,一个M2090的512个核加起来就有1.33 Tflop/s的单精度峰值性能以及665 Gflop/s的双精度峰值性能。这是目前最新多核CPU浮点性能的近10倍左右。M2090的内存总线宽度为384位,内存频率1.84GHz, 使得内存带宽达到177 GB/s的峰值。这是最新CPU的5倍以上。因此无论是计算密集型还是内存密集型的应用,都可以在GPU上得到显著的加速。

GPU已被大量科研与工业用户采用来显著提升程序性能。在科研领域,尤其在地球科学,生物医药,航空航天,天文,核科学,材料科学,金融等计算需求较大的学科,GPU的使用已经非常普遍。

GPU编程模型

nVIDIA在2007年推出了在GPU上的并行编程模型CUDA。CUDA编程环境在nVIDIA的网站上可以免费下载。与很多以前的并行计算环境不同,CUDA开发并不只在高端的集群上才能进行。大量的普通笔记本或台式机电脑,只要有nVIDIA显卡,都可以进行CUDA的开发。一个CUDA程序完全可以在普通电脑上调试开发,完成了再放在高端GPU集群上运行,程序不需要任何修改。

CUDA并不是一个全新的编程语言,而是类似OpenMP那样的对C/C++语言的一个简单扩展。CUDA程序的执行方式也很类似OpenMP。程序初始在CPU上以单线程执行,也许进行一些输入输出及逻辑控制计算。当执行到一个耗时的并行函数时,程序就会在G P U上产生大量线程执行。GPU上的计算结束后控制又会回到单线程的CPU程序,直到遇到下一个耗时的并行函数。

由此我们可以看到,以C/C++和Fortran写的应用如果想在GPU上加速,就只需要把耗时的函数用CUDA移植,而代码其他部分完全不用修改。很多代码量大的程序,其实耗时部分的代码量往往远小于总代码量。这种情况下往往很快就能把应用移植到GPU达到显著加速。

对于用MPI写的并行程序,移植到GPU集群上其实与移植单进程程序到GPU上并无本质区别。在这方面CUDA也类似OpenMP,它只是加速每个MPI进程的计算而不涉及节点间的通信。所有的节点之间的通信,完全是使用已有的MPI框架。所以只要把单进程的计算移植到CUDA上,绝大多数情况下就自动有了一个可以在GPU集群上运行的MPI-CUDA程序。

所以总结来说,CUDA具有普遍可得的开发环境,移植时只需修改耗时部分的代码,不用对程序其它部分包括MPI框架进行修改。这些特性保证了大量已有的程序可以快速地移植到GPU集群上。这是CUDA迅速被广大开发人员接受得到广泛应用的重要原因。

除了CUDA外,开发人员也还有很多其它选择。如OpenCL是一个类似CUDA的GPU编程标准。微软也推出了针对GPU的编程语言DirectCompute以及即将推出的C++ AMP语言。PGI Fortran允许开发人员直接用Fortran的语法写GPU kernel。PGI accelerator类似OpenMP, 开发人员只需要在耗时的循环外插入一些pragma,就能将其移植到GPU上。HMPP是类似PGI accelerator的另一种解决方案。PyCUDA是Python的CUDA接口。此外,P G I最近还发布了CUDA-x86。这个产品可以把CUDA代码编译在x86 CPU上执行。这样一个代码版本就可以既在GPU又在CPU上运行。总而言之,GPU有十分丰富的编程环境,可以满足不同开发人员的各种需求。

应用简介

GPU已被大量科研与工业用户采用来显著提升程序性能。

在科研领域,尤其在地球科学、生物医药、航空航天、天文、核科学、材料科学、金融等计算需求较大的学科,GPU的使用已经非常普遍。只要翻一翻各个计算科学领域的顶级杂志,GPU计算的相关论文比比皆是。比如高性能计算著名的Gorden-Bell奖近两年的获奖论文都是GPU上并行化的工作。全世界有上千所大学已开设CUDA编程课程,CUDA已成为很多科研人员的一项基本技能。此外,科研人员中十分流行的工具Matlab与Mathematica也已经被移植到了GPU上,使得GPU在科研中的使用变得更容易。

石油领域因其对巨大计算量的需求,是最早采用GPU的用户之一。GPU可以使地震资料的处理方法如叠前时间偏加速几倍以上。更重要的是,只有在GPU出现后,采用更精确但更耗时的算法如逆时偏才变的有可能。所以目前世界上很多主要石油公司包括国内的中石油都在使用GPU的解决方案。

在分子动力学领域,由于粒子算法的高度并行性,几乎所有重要的分子动力学软件都已被移植到了G P U,如A m b e r,NAMD, Charmm, LAMMPS,Gromacs等。它们的性能加速往往在十倍甚至几十倍左右。中科院过程工程所最近在天河1A上用自主开发的GPU程序进行了世界上性能最高的多体分子动力学模拟,单精度性能达到了1.87 Pflop/s。

生物信息学作为一门数据驱动的学科,大量算法具有高度数据并行性。因此GPU是十分合适的并行计算工具。比如世界最大的基因测序公司北京华大基因在他们2011年7月份的Bio-IT大会上已宣布的他们很多重要的处理软件都已移植到了GPU上。GPU使华大基因可以以十倍以上的速度处理庞大的基因测序数据。

计算机辅助工程(CAE)领域的主要算法是有限元,有限差分及数值代数等。这些算法大多数都有高度并行性,因此都比较适合GPU。几乎所有的主流商业有限元分析软件都已支持GPU,包括Ansys, Abaqus,LS-Dyna等。使用GPU可以使有限元分析的速度提高2倍以上。此外在国内,比如上海交大的林新华老师小组将流体程序NS3D移植到GPU,达到了30倍以上的加速。南京航空航天大学的韩景龙教授小组机翼分析的流体程序在GPU上达到20倍以上的加速。中科院力学所的离散元计算力学软件,更是达到了上百倍的加速效果。

以上只是一个简单介绍,实际GPU的使用远远超出这些范围并且发展十分迅速。

GPU计算展望

GPU的性能提升仅仅是个开始。比如nVIDIA下一代的Kepler 架构GPU,浮点峰值预计在现有Fermi架构上会提升3倍左右。而Kepler之后的Maxwell架构,预计可以比Kepler再提升2到3倍。

G P U代表了目前高性能计算的最前沿。对科学及工程计算正在产生着深远的影响。我国已具备了GPU计算世界上最好的硬件天河1A,因此发展GPU高性能计算软件已经有了良好基础。由于CUDA从推出到现在还不到四年,尚有大量的创新研究应用工作需要开展。对我国高性能计算来说应用GPU的异构计算是一个迅速走到高性能计算应用创新国际前沿的不可错过的机会。

(作者单位为nVIDIA公司)

猜你喜欢

开发人员体系结构吞吐量
足球机器人并行行为组合控制体系结构分析
Semtech发布LoRa Basics 以加速物联网应用
2017年3月长三角地区主要港口吞吐量
2016年10月长三角地区主要港口吞吐量
2016年11月长三角地区主要港口吞吐量
作战体系结构稳定性突变分析
基于DODAF的装备体系结构设计
基于云计算的航天器控制系统自组织体系结构
后悔了?教你隐藏开发人员选项
2014年1月长三角地区主要港口吞吐量