人人都有台超级计算机——透视CUDA技术
技术空间
GPU的出现将CPU从繁重的图形运算中解放出来。如今,NVIDIA新推出的一种名为CUDA的技术又计划让GPU编程成为今后的主流——传统的开发工作都是使用CPU,而如今NVIDIA称“通过CUDA,开发人员可以使用GPU来编程。”
CUDA,英文全称为Compute Unified Device Architecture,意为“统一计算设备架构”,它是业界首个GPU用的C开发环境。在实际应用上,CUDA等类似技术可让我们在很多方面感受到它所带来的巨变。
CUDA:让人人都拥有超级计算机
这么多年来,或许有很多朋友都在幻想,如果自己的计算机是台超级计算机,那该多厉害啊。如果有了CUDA,这个愿望就能轻易实现。比如Tesla C870 GPU可凭借其128个流处理器、CUDA C语言开发环境和开发工具以及一系列已经问世的应用程序,让专业人员能够更快地开发应用程序和解决一些以前只能通过访问共享服务器群集来解决的问题。特别是通过CUDA和其强大的多线程处理器架构,让你在工作站上即可解决以前需要用大型服务器集群或超级计算机来运算的计算难题,让普通计算机进行万亿次计算的前景非常光明。
再如,人的身体由数十亿个细胞组成,而其中只要有那么一个细胞出现病变,并且经过不断的分裂和复制,这个小小的细胞就有可能引起致命的癌症。要想知道一个细胞是如何发生病变的,并且采取何种措施去阻止它继续,以免产生不良后果,以前单凭CPU为中心的计算机要模拟这些变异很困难,而现在科学工作者们正在运用CUDA这类全新的工具来成组具有超强性能的计算机来模拟正常细胞的代谢过程。
在游戏中,特别是在3D游戏中,真实性往往需要高性能的硬件设备才能流畅运行。在3D技术发展早期,图形芯片只能完成常规的渲染操作,而关键的建模和光照运算必须以软件模拟的方式由CPU来完成,这让游戏难以获得更真实的画面。而随着CUDA和PhysX物理引擎厂商的“联姻”,它可以更好地解决游戏设计及运行中的物理模拟问题,可以更便利地创建和编辑高级人体、材质和建模、支持连续碰撞检测等等,从而最终让玩家在游戏中获得更真实、更震撼的游戏体验。
CUDA的出现无疑将促成GPU不再仅局限于图形运算方面,还可以使用GPU来解决商业、工业、军事以及科学方面的复杂计算问题。

CUDA的技术特点
GPU采用CUDA技术进行计算是一种计算的新方法,该方法通过数百个芯片内处理器核心的同步通信和合作,以最高可超过传统方法100倍的速度解决复杂的计算问题。CUDA技术由开发库、运行期环境和驱动三部分构成。开发库目前由两个标准的数学运算库CUFFT(离散快速傅立叶变换)和CUBLAS(离散基本线性计算)实现。运行期环境在实际执行中包含运行在CPU上的宿主代码(Host Code)和运行在GPU上的设备代码(Device Code)两种。而在驱动方面,目前基于CUDA开发的应用还必须有NVIDIA CUDA-Enable的硬件支持,而未来CUDA则可能发展成为一个通用的GPGPU标准接口,以兼容不同厂商的GPU产品。

总之,CUDA是一种用于GPU计算的开发环境,它是一个全新的软硬件架构,可以将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。在CUDA的软件层面,NVIDIA C编译器是其中的核心,CUDA程序是GPU和CPU的混合代码,它首先由NVIDIA C编译器进行编译,经过编译后,GPU和CPU的代码将被分离,GPU代码被编译成GPU计算的机器码,而CPU的C代码输出由标准的C编译器进行编译。
并且,正是由于CUDA的GPU编程语言基于标准的C语言,因此任何有C语言基础的用户都很容易地开发CUDA的应用程序。在CUDA的架构中,这些计算不再像过去所谓的GPGPU架构那样必须将计算映射到图形API(OpenGL和Direct 3D)中,因此对于开发者来说,CUDA的开发门槛将大大降低。
进一步解放CPU
如何解放CPU让它做它该做或最急需做的事,或者说如何让GPU物尽其用,是近年来GPU发展的主要目标之一。大家知道,在传统应用上,与随时都在进行数据处理的CPU不同,GPU主要是起到一个渲染3D场景、减轻CPU在图形运算方面负担的作用,这让GPU在大多数不需要3D应用的时间内都处于闲置状态。而GPU向GPGPU(前一个GP代表General Purpose/通用目的,后一个GP就是Graphic Process/图形处理,所以GPGPU就是所谓的通用图形处理器)发展,便成为性能已不输于主流通用处理器(CPU)的GPU的目前发展的主要方向。
GPGPU的理论出现,让GPU的发展找到了方向,并让CPU得到更多的解放。比如以前进行视频解码主要是CPU的事,但无论是双核处理器还是多核处理器,要让它们单独解码1080P高清视频仍显得力不从心,而通过GPU拥有的Avivo或PureVideo等新兴的视频解码功能,便可解放CPU,大大降低CPU的占用率,让高清视频能够更轻松地播放。
在处理性能上,GPU与CPU相比,有着得天独厚的优势。比如在浮点运算能力上,显存带宽占优的主流GPU相比内存带宽始终略显捉襟见肘的主流CPU,其浮点运算能力要强N个级别。并且随着GPU进入统一渲染架构(Unified Shader)时代,统一的计算单元Stream Processor(流处理器,简称SP)的出现,让GPU的计算能力和应用范围越来越大,而且它也越来越像通用GPU。也正是由于拥有在图形运算方面的天生优势,使得GPU更适合重复计算,更适合于运用在科学计算、数据库分析等SIMD高性能计算领域。
而采用C语言作为编程语言的CUDA技术则可以看作是一个全新的完整的GPGPU解决方案(可编程图形处理器),它提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力,使开发者能够在GPU的强大计算能力基础上建立起一种效率更高的密集数据计算解决方案。
此外,CUDA的一大特点是它能够建立一个软件环境,一方面能够保持固有的串行处理,另一方面也能够使并行处理成为可能——进行串行处理的CPU可以用顺序处理一些它能快速处理的数据,GPU可以通过并行方式处理一些数据量比较大的数据。并且,由于用GPU进行数据处理,不需要对线程进行分析和管理,只负责计算不负责管理,它在处理速度上肯定会快于单纯的CPU。
CUDA应用前景
NVIDIA CUDA技术是目前唯一针对NVIDIA GPU(图形处理器)的C语言环境,可为支持CUDA技术的NVIDIA GPU(图形处理器)带来强大的图形计算处理性能。并且,CUDA的GPU编程语言基于标准的C语言,因此任何有C语言基础的用户都能很容易地开发CUDA的应用程序。凭借NVIDIA CUDA技术,开发人员能够利用NVIDIA GPU(图形处理器)攻克极其复杂的密集型计算难题,应用到诸如石油与天然气的开发、金融风险管理、产品设计、媒体图像以及科学研究等领域。
PhysX物理引擎正移植到CUDA——值得关注的是,目前NVIDIA正在做PhysX物理引擎向CUDA的移植工作,将来移植成功后用户仅仅需要一次软件升级,所有现在支持CUDA的GPU都将能够运行物理引擎。据报道,NVIDIA从PhysX物理引擎到NVIDIA CUDA计算架构的转换已经几乎完成,其速度是Intel类似技术的15~20倍。
就目前来看,CUDA已在包含GeForce 8XXX/9XXX、Quadro和Tesla三个系列的GPU(CUDA-enabled GPU)中得到了应用。其中G80是最早应用这项技术的产品,它针对通用计算的可编程特性,在图形芯片内增加了一些专用Cache——这些Cache存在于G80内部的128个线程处理器中,时钟频率高达1.35GHz,不仅仅进行3D运算,在切换到交替模式后,还可以极高的速度执行通用运算。总之,通过CUDA技术的运用,让G80/G90这类GPU打破了传统GPU处理数据方式的局限性,使GPU的核心能同步共享数据。以前,将一系列2D X光图像合成为3D图像需要耗费5个小时时间,而CUDA则可以将这个过程缩短为5分钟。

本报观点:新市场正在启动
NVIDIA敢于推出CUDA的根本原因是它拥有深厚的群众基础。由于NVIDIA在专业显卡和独立显卡领域都具备超过市场份额一半的占有量,所以仅从显卡对CUDA技术的推广和应用上,没有太大的障碍。
普通的GPGPU的计算还是通过API送入GPU的,而现在使用CUDA则可以直接调用GPU的计算资源,成为高性能计算的软件开发环境。“CUDA将计算性能提高到一个新的级别,并且让开发者更容易实现硬件访问”,对于有限元的计算、神经元的研究计算、地质分析、游戏中的物理模拟等等商业、工业以及科学领域的用户来说,CUDA将为他们带来极大的好处。
不过CUDA也并非可以很顺利地占领这个新市场。由于CUDA与CPU和GPU的联系都非常紧密,要将运用CUDA技术的CPU的软件连接到GPU的内核上,需要CPU和主板芯片组的支持。而在这方面,相比NVIDIA,Intel和AMD都占据了更多的话语权,这是CUDA应用前景上最大的隐忧,所以NVIDIA在CUDA技术的推广上会尽量采取暗渡陈仓的策略。
而在Intel和AMD方面,对类似的可编程GPU或流处理器技术不会坐视不管,Intel有Larrabee(Intel的Larrabee指令集是英特尔为高并行计算领域建立的新标准,是x86指令集的扩展,可以保持很好的兼容性)、AMD则有CTM(CTM受硬件接口允许开发者直接访问GPU的源生指令集和存储器,以便发挥出GPU的流计算能力,R580显卡已开始利用这种大量并行处理技术)等类似技术的研发。可以预见,虽然NVIDIA的CUDA技术走在了前面,但未来该市场的竞争会很精彩,谁能笑到最后,尚未可知。
我们可以看到,由CUDA引发的市场和类似技术正在启动,而随着以CUDA技术为代表的可编程GPU技术的不断成熟,未来的这些产品将变得无所不能,让CPU从繁重的劳动中不断解放出来。当然,这并不意味着在未来几年GPU就可以取代CPU,在技术没有取得突破性进展前,至少在未来十年内,CPU+GPU的强强计算组合,对于需要高性能的用户来说,仍是“王道”。