显卡 频道

X86没有优势 CUDA之父解读NVIDIA战略

    就在上周,NVIDIA发布了新一代的GPU——GT200,其系列中优异产品GTX280的浮点运算能力已经达到0.93TeraFloaps,只要核心频率再稍稍提高就达到了万亿次运算。值得注意的是,NVIDIA强调GT200不但为高性能计算的并行处理能力在架构上进行了优化,而且在GPU或显卡老本行的应用上也进行了改进。它不仅仅是一颗3D图形渲染处理器了。

    如果您还不了解GTX280的3D性能和它在视觉应用中的表现,请访问我们的文章《NV双面侠GTX200首发测试》。而我们今天要谈的是NVIDIA赋予GPU计算另一面的核心内容——CUDA。CUDA:是Compute Unified Device Architecture(计算统一设备架构)的简称,是NVIDIA针对支持CUDA功能的GPU(图形处理器)的C语言开发环境,开发平台。与其他语言类似,CUDA包括NVIDIA提供的编译器、库、调试器和丰富的SDK等等。

通过GPU运算实现加速的案例

    通过CUDA,我们可以让具有该功能的GPU进行通用计算,对于个人应用而言我们已经可以看到高清视频编码用GPU(显卡)计算比目前最好的四核心CPU还要快数十倍;对于高性能计算,我们可以看到一个或多个GPU正在石油、医疗、卫星等多个高性能计算领域发挥着作用。

    谈到这里,很容易让我们联想到一个最近非常流行的说法“GPU是不是比CPU还快很多?”的确,我们开始切入正题,让NVIDIA公司首席科学家David Kirk先生(图右)及其伊利诺伊大学教授Wen-mei Hwu(胡文美)(图左)先生为我们解答有关问题。

    我们看到无论是GTX280还是RadeonHD4850,都几乎达到了万亿次浮点运算的能力,但反观Intel却为了实现万亿次计算而将计划放到了未来5年左右的时间这是什么道理?

CPU与GPU架构不同,用途也不同

    David给了我们解释,根据IEEE754规范单精度Float占用32位,双精度Double占用64位空间,而在HPC(高性能计算机)也就是我们常说的万亿次运算通常是指双精度浮点运算能力。目前,GTX280和GTX260开始支持双精度运算(之前的GPU不支持),它的运算能力大概在90GFloats,与GPU所说的900GFloats速度相差10倍,近似于双路8核心最新Xeon的运算能力。

11
和CPU相比,拥有更多执行单元的GPU是CUDA的硬件基础

    但即便GTX280的双精度浮点能力是单精度浮点能力的1/10,但它的浮点能力也足以比现在的高端CPU好10倍以上,所以GTX280的并行计算能力还是领先的。另外,现有的GPU架构和显存控制技术也不会像X86处理器那样通过缓存来缓解内存响应,这方面带宽GPU也领先很多。

    当我们访问NVIDIA CUDA Zone(nvidia.com下的Zone,非中文区)时,我们可以看到数十个生动的案例,根据不同领域划分我们还可以对现有的基于CUDA设计的及百款软件进行搜索,如视频音频、石油开采、非线编辑、生物科学等等类型。这些成品已经达到数百个,虽然这些软件并不是均为免费的,但前不久GTX280测试中,大家还是看到了GPU加速视频编码的软件的效果(下图为测试数据)。

    也许在这里我们要强调一下我们说的这些软件和CUDA以及GPU的关系,简单的说这些软件基于CUDA环境开发,通俗的说就是GPU或显卡加速。在桌面和移动平台,GeForce8全系列及其以上所有系列的显卡都支持CUDA开发下的GPU加速。

    除了视频编码外,基于CUDA设计的支持GPU加速的软件还包括不久后Adobe的CS4设计软件套装,当然还有游戏玩家关心的NVIDIA PhyX物理引擎在GPU下的加速。

    在年初NVIDIA收购Ageia后,NVIDIA便表示今后所有PhyX物理引擎均可在NVIDIA GPU下实现。不知道大家是否还记得,Ageia在发布PhyX后曾经推出一款专门的物理加速卡PhyX 1,它不但价格不斐,而且由于应用环境狭窄而没有真正进入市场。NVIDIA在推出CUDA 2.0后,开始对PhyX在GPU上加速的开发,经过两个月时间已基本完成开发,很可能在近日发布相关软件。根据NVIDIA提供的资料看,10个流处理器便可以达到原有Ageia Phyx1加速卡的水平。

PhysX的主要技术特性

    对于CUDA的开发来说,PhyX物理引擎的支持耗时2个月意味着怎样的开发难度?我们请教了David。他认为,基于CUDA的开发远比基于PhyX 1硬件加速卡和CPU加速来的容易,两个月的开发时间是非常迅速的,开发强度也是很小的。更何况,GPU相对以往PhyX硬件加速卡将带来好很多的性能呢。

    的确,NVIDIA一直在强调CUDA易用性,也正如Intel一直强调它的软件开发平台的广泛性一样。那么NVIDIA对此如何看待呢?

    正如GPU强大的并行运算能力可以看作是上百个流处理器架构带来的优势一样,这上百个流处理器被看作是上百个核心,而GPU就是具有上百个核心的单芯片处理器。这让大家很容易联想到CPU的多核心,虽然目前的CPU即便通过集群实现几百个核心,它也与GPU的“核心”意义完全不同。但Intel未来的多核心计划,似乎与现有GPU的方向很相近。

    毫无疑问,增加核心从而大规模快速提高运算速度是未来处理器发展的一个主要方向,而Intel未来的“无序小核”的产品也正是为并行计算而服务的,例如大家都很期待的Larrabee,它正是由多个IA核心并行构成的处理器。

GT200并行运算架构

    与现有NVIDIA GPU相比,Intel有着对自己产品优势的坚定信念:第一,Intel提供了C++的扩展Ct,这是一个为今后多核心平台服务的软件开发环境,既然是C++的扩展,由于C环境拥有非常大的开发群体,所以Ct优势不言而喻;第二,基于X86架构设计的IA核心,让软件开发更容易,X86架构风风雨雨几十年,这种应用环境的确是多数比不上的。但两位专家有不同的看法。

    他们认为,软件的开发与编程其实与X86架构关系很小,世界上现有99.9%的软件都没有对X86进行什么优化,只不过它们用Intel提供的X86的编译器而已。Intel X86的优势目前在于开发环境下库的丰富程度,所以CUDA也正尽力丰富这个库,让软件开发更容易。由于近年来库的内容已经基本转换到C环境下,所以CUDA的库更加丰富完善并不算困难。

    也许你注意到了,我们在讨论GPU的时候忘记了AMD,ATI。的确,在前两天ATI刚刚发布了Radeon HD4850显卡,其浮点运算能力达到了1TeraFloats。ATI也提到了将开源GPU通用计算的开发环境和编译器,那ATI的发展又如何呢?也有人提出,CUDA为什么不支持ATI的GPU(或叫VPU)。

基于RV770的第一款产品——RadeonHD4850

    所以为什么说CUDA只能在NVIDIA这边用,而不是在AMD这边用。其实在最开始的时候,NVIDIA邀请AMD加入CUDA,但是AMD的GPU缺失一些功能而不能运转CUDA。它只有提高它的GPU的功能才能够实现CUDA,所以不是我们不让AMD使用CUDA,而是CUDA这个软件在AMD的硬件上没有办法运转,因为它的硬件上缺一些功能。

    在AMD收购ATI后,它们的结合因此被认为异构计算的绝配,它们也因此提出了研发代号Fusion的产品。Fusion是一个将CPU与GPU整合在一起的方案,但高性能的GPU的核心面积要远大于CPU,如果要达到很高的性能那么Fusion面积会很大,是非常不利于批量生产的。所以,Fusion整合的图形部分会是很小的一块,运算速度也不会快。所以Fusion看似有CPU+GPU的异构,但却不是面向高性能计算的好方案。

    如果说几十年的X86环境给了我们一个标准的话,NVIDIA的CUDA是否给大家一个标准。David和胡教授给予我们明确而又乐观的答复。首先,在成为标准前CUDA的风险评估是如何完成的?

    NVIDIA认为,作为仅仅2岁的CUDA来说现有的环境风险显而易见但却又被牢牢控制和掌握。对于CUDA这样年轻的失误,遇到的最大风险在于无人使用,而反观现在的情况,有7万人在使用CUDA开发软件,而全球有7千万个GPU支持CUDA,加上CUDA的免费与易用性,CUDA最大的风险并不存在。

11
CUDA的实现架构

    所谓标准,在目前GPU并行计算和高性能计算独特的这个领域,开发环境上并不存在标准,CUDA甚至可以被看作第一个产品,那么CUDA更有资格成为标准。标准与用户群的大小关系紧密,那么如果CUDA和GPU的加速能带来更好的效果,相信标准也自然形成。

    另外,CUDA其实不仅仅是给GPU来编成的,CPU也一样可以用CUDA编程。NVIDIA到时候也会让CUDA在CPU上用得更好。

    对于普通用户而言,CUDA可以让我们的显卡不仅仅是玩游戏的工具,在日益应用广泛的视频音频处理、视频编辑等方面都大大提速;对于HPC而言,不同CPU与并行处理器GPU的异构方案仍是未来几年里优秀的组合;对于HPC的应用而言,GPU的加入可能成百倍的提升并行计算速度,让很多不可能变成现实。

明确CPU与GPU分工,看好异构计算

    通过这次访谈,我们可以感觉到NVIDIA对目前CUDA以及GPU的定位非常清晰,除了上面谈到的应用层面外,NVIDIA还是明确指出GPU强大的并行计算能力,承认GPU专长的同时NVIDIA也表示,包括逻辑计算在内的其他运算并不是GPU今后想加入的东西,那些还是交给CPU去做吧。这种CPU+GPU的异构计算,是HPC很好的组合。

X86历史悠久却无太大优势

    但另一方面,NVIDIA又将CUDA打造的非常强势。首先,NVIDIA认为CUDA是比Ct要更好的平台,因为它已经有7万名以上开发者,7000万个GPU可以运行CUDA,几百个CUDA开发的软件可以让GPU加速。而Ct,Intel只是说在现有多核平台上得到验证,可以顺利过渡到以后的“很多核”产品上。同时,NVIDIA还否定了软件为X86优化的固有观点。

像Sun对待JAVA一样对待CUDA

    NVIDIA很快还将部分开源CUDA的编译器,由于编译器前端是NVIDIA得到某公司授权实现的,所以这部分是否开源需要用户与该公司交涉。而NVIDIA也把一些规则的控制与制定以及部分开源看作对CUDA发展的一种规范。David以Java为例说明CUDA的发展,NVIDIA对CUDA的态度就如Sun对Java的态度一样。有控制,但又不会遏制它的开放性和发展。David特意举例,Microsoft早年对Java心存歹意被Sun拒绝,是否也意味着CUDA的强势态度呢?

如SLI的态度一样强硬

    其实,对于未来并行计算的应用已经被业界认定是今后提高计算速度的主要方向。而无论是Ct在X86架构下的作用还是CUDA环境,都是让多核心更好的发挥作用。两者是否有一天会走到一起呢?毕竟,CUDA是一个开源的、免费的软件平台。我们就Ct和CUDA今后是否会走到一起提问David。

    NVIDIA明确表示,CUDA愿意使用其他的环境,但其他的环境不能融入CUDA。大家又如何理解呢?我们不知道这是否意味着,CUDA将提供其他硬件的加速(前文提到CPU可以用CUDA),但将不允许其他软件来使用NVIDIA的GPU来加速(正如今天的SLI授权一样困难)?

0
相关文章