在这么多年的竞争中,并非没有试图挑战CPU地位的竞争者,与Intel一同成长的National国家半导体、Cryix、zilog这些先烈暂且不说,即使是幸存下来的AMD也未能革Intel的命,规模上与Intel差距甚远。这些公司未能逆转Intel的原因有很多,不过有一点是不容忽视的,Intel掌握着X86指令的专利权,别的公司用X86处理器与Intel竞争在先天上就处于不利地位,或许最好的方法是另辟蹊径,候选人之一就是GPU。 伴随GeForce 256而生的GPU概念问世于1999年,GPU指的是Graphic Processing Unit(图形处理单元),这是一款真正意义上的3D显卡,直到现在GPU其最重要的功能也是图形处理,尤其是3D游戏处理。随着技术的突飞猛进,显卡的性能越来越强大,逐渐具备了可编程流水线、高密度并行处理等特性,显卡的浮点运算能力已经超越了CPU,以目前最强的i7 975为例,其浮点运算能力也远远达不到HD 4850的1TFlops(等效每秒一万亿次运算),显卡超强的浮点运算能力为GPU实现通用计算打下了基础。
Folding@home这样的科学运算是发挥GPU通用运算的最佳场合
2002年的Siggraph展会上,ATI、NVIDIA等商场提出了GPUGPU(General Purpose Computation on the GPU,通用图形处理器)的概念,寻求将GPU强大的浮点运算能力应用在图形处理之外的场合,像科学计算、数据库分析这样需要大容量、高速度的重复性运算成了GPUGPU的通用计算的最佳领域。 到了DX10时代,GPU通用计算又获得了一次良好的发展机遇,微软在DX10规范中提出了统一处理单元的概念,将之前的VS顶点渲染器和PS像素渲染器整合为流处理器进行统一运算,显卡的并行计算能力和可编程性也同步提升。正是在统一渲染器的基础上,NVIDIA和ATI各自开发了自己的GPU通用计算技术CUDA和Stream,将复杂的图形处理与通用的编程衔接起来,使得GPU编程像普通的编程一样简单。
GPU通用计算应用最广泛的领域就是各种高性能计算领域,包括石油勘探、科学计算、药物分析乃至天文演算,这些领域都是普通用户平时接触不到的,以致普通消费者很难体会到GPU通用技术到底能带来哪些好处,因此我们就以GPU通用计算在视频压缩中的应用为例,来个管中窥豹,一探CUDA/stream加速技术的究竟。在测试之前,我们先来看看Stream和CUDA的一些简单介绍。 [2.AMD Stream技术简介]
在X1950 XTX时代,AMD曾经斯坦福大学的Folding@hiome项目组有过合作,使用AMD的显卡为蛋白质折叠计算提供加速功能,不过那时使用的方案过于专业而无法为普通用户所享用,直至去年末的8.12版催化剂中才为普通消费者提供了基于Stream技术的Folding@home和AVIVO Converter转码加速功能。
对于Stream技术,AMD宣称可让显卡内数百个平行串流核心,为各种一般用途的应用带来加速的效果,打造各种优异的平台,并可大幅提升每瓦性能,而实现这一点的前提就依赖于AMD独特的流处理器单元设计。
自AMD第一代DX10架构HD 2000系列以来,AMD在显卡架构的流处理器每周期处理可以5个指令,并且可以拆分为4D矢量指令和1D标量指令,这样做的好处是可以大大降低流处理器单元的设计难度,同样的芯片面积中便可以大幅增加流处理器数量,所以AMD的显卡理论浮点计算能力大大高出NVIDIA的芯片,HD 4850达到了1TFlops,最新的HD 4890更是达到了1.36TFlops(800x2x850MHz=1.36TFlops),强大的浮点运算能力也为Stream加速打下坚实的基础。 自从在XBOX360上与微软合作之后,AMD的图形技术紧密跟随DX的发展脚步,DX10中统一架构的出现带来了Stream加速功能的实用化,未来的DX11中将进一步提升通用计算的地位,DX11规范中的一个关键特性―Compute shader(计算渲染)便是针对GPU通用计算而定的,AMD很快也将发布新版Stream SDK工具包,为即将到来的DX11时代做好准备。
AMD曾经发布过一个名为《Froblins》的Demo,其中就包含了利用GPU强大的运算能力为Demo中的每个角色进行独立AI计算的场景,而以往游戏中的AI运算都是CPU负责的,玩家完全可以期待Stream技术带来的精彩表现。 [3.大放光芒的CUDA] 面对GPU通用计算技术的美好前景,野心勃勃的NVIDIA公司在GPU通用计算上走得更远,也更彻底,意图以GPU强大的并行性能颠覆把持计算中心已久的CPU的地位,这一次他们依赖的王牌就是CUDA。
CUDA,全称为Compute Unified Device Architecture(计算统一设备架构),这是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境,简单来讲,CUDA也是一种编程用的C语言,不过它面向的是GPU,调用的是GPU资源实现各种运算,而普通的C语言针对的是CPU,调用X86指令实现功能运算。 GPU通用计算的概念出现的很早,但是CUDA的出现却离不了DX10图形引擎,因为DX10引擎中最重要的概念―统一渲染单元(Unified shader)为实现GPU通用计算奠定了基础。第一代CUDA在06年底发布的首款DX10规范的G80架构上实现,到了GT 200时代,GTX 200系列显卡实现了硬件级双精度算术(GT200核心中拥有30个64位浮点单元),CUDA也顺利发展到了2.0时代,最新版为2.2,提供win7系统的支持,并增加了多种新特性。
注:CPU中的ALU即为运算器,GPU中同颜色的则是shader运算器。如果软件环境合适,GPU可以用来运算的晶体管要远多于CPU。 跟以往的GPGPU概念不同的是,CUDA是一个完整的解决方案,包含了API、C编译器等,能够利用显卡核心的片内L1 Cache共享数据,使数据不必经过内存-显存的反复传输,shader之间甚至可以互相通信,对数据的存储也不再约束于以往GPGPU的纹理方式,存取更加灵活,可以充分利用stream out(流输出)特性,最典型的例子就是PhysX物理加速特效。PhysX最早是Aegia公司推出的硬件级物理加速技术,NVIDIA将其收购之后便通过CUDA环境将PhysX软件化,由显卡中的shader单元承担物理加速特效的运算。
历经三年的发展,结合CUDA应用程序+Tesla超级计算机(核心是GT200显卡)的软硬兼施,NVIDIA已经攻入以往只有高端服务器才能做到石油勘探、流体力学计算、药物测试乃至基因分析等利润丰厚的领域。 [4.Badaboom简介] Badaboom的大名相比不用多说了,作为支持GPU加速运算的转码软件,Badaboom一直是NVIDIA展示实力的急先锋。这款软件从最初只支持有限的几种格式已经扩展到支持多种编码/多种格式的视频输入,不过输出方面依然只有H.264编码一种。 这款软件最近发布了1.2版,支持多语种界面,其中包括简体中文,易用性进一步提升。
简体中文界面
Badaboom是目前唯一一款完全借助GPU运算能力加速转码的软件,界面简洁直观,功能也日趋强大,支持的格式也越来越多,不过这款软件并不免费,售价为29.99美元。 软件的下载地址: Badaboom 1.2.0.85版:http://www.myfiles.com.cn/soft/42/42769.htm [5.TMPGEnc简介] TMPGEnc也是一款老牌的视频转码软件,是由日本的17岁的少年高手天才堀浩行开发,早期仅支持MPEG-1压缩,这款软件一直以高压缩画质著称。随着版本的提升,功能也越来越强大,目前已经支持包括高清视频在内的主流格式,而且除编码功能外,软件本身也集成了许多视频编辑功能,可以制作出相当水准的影片。 在08年,TMPEGEnc也在4.6.2版本中加入了CUDA支持,官方宣称转码速度比传统CPU处理可以提高446%之多。
注意,如果启用了CUDA加速,软件需要进行一次优化,点击确定即可。 TMPGEnc作为一款老牌视频软件,已经不单单是视频转码这么简单,玩家完全可以讲它当做一款使功能强大而操作简单的视频处理软件。 软件下载地址在此: TMPGEnc 4.7.1.284版:http://www.myfiles.com.cn/soft/25/25201.htm [6.Mediacoder简介]
论功能,Mediacoder称得上转码软件中的NO.1,通过整合开源社区众多的音视频编码解码器,Mediacoder可以转换在你见过或者见都没见过的音视频格式中互相转换。当然,功能强大的背后则是易用性的降低,这款软件比较适合经验丰富的用户。 在0.7版之后,Mediacoder也加入了CUDA支持,转码速度有了实实在在的提升。
Mediacoder强大的原因之一便就丰富的可调参数,从视频格式、画面大小、解/编码器、码率再到音频格式、码率,各种参数实在是繁多,没有一定的基础还真难以下手。
Mediacoder也不甘落后地开发了自己的CUDA编码器,可以调用GPU的运算能力为视频编码加速,虽然仍处测试阶段,但是其加速能力已不可小觑。
对于Mediacoder来说,原本就很强大的功能上再加入CUDA加速,无论是在功能上还是速度上,都有着过人的表现,最重要的是软件免费使用的。 软件下载地址在此: Mediacoder 0.7.1.4466版: http://www.myfiles.com.cn/soft/15/15792.htm [7.CyberLink Mediashow Espresso简介]
Mediashow Espresso的出品方也就是大名鼎鼎的PowerDVD软件的娘家―Cyberlink讯连科技,这款软件最大的特点就是同时支持NVIDIA的CUDA和AMD的Stream两种技术,功能上不属于Badaboom。
界面风格与Badaboom如出一辙,都是秉承简洁直观的理念,支持文件直接拖放操作,或是一次性导入视频所在文件夹。
添加视频之后,默认可以输出为Apple、Sony、Microsoft、YouTube四种常用格式,选其他格式的话,用户可以自定义输出格式,其中MPEG-4 AVC(即H.264)编码可以使用CUDA或Stream加速,而MPG2格式只支持Stream加速,CUDA则不行。
至于剩下的几种编码格式尚未支持任何GPU加速功能,只能由CPU进行转码。另外,Mediashow Espresso还支持同时支持四个视频转码,而且可以设置完成后关机,非常贴心。 [8.ATI AVIVO Converter简介] NVIDIA大力推动CUDA运算,AMD也没闲着,在去年末尾的8.12版催化剂驱动中也为HD 4000系列显卡用户献上了一道大礼―AVIVO Converter转码程序支持Stream加速,虽然早期的版本曾遭遇画质困扰,但是历经半年的完善,AVIVO Converter也是今非昔比了。
安装完催化剂控制中心和ATI AVIVO Converter程序之后,用户可以在基础界面中的催化剂控制中心中找到转换程序。
ATI AVIVO Converter转换程序支持的格式也日渐丰富,除了Apple、Sony便携设备上的格式,还有H.264、MPEG-2等多种常见编码格式都有很好的支持,用户也可根据需要手动调节视频的码率。 [9.测试平台和测试说明] 我们的测试平台配置如下:
驱动下载地址: 催化剂9.6 For Vista http://drivers.mydrivers.com/drivers/270-108079-AMD(ATI)-Radeon-HD-2000-HD-3000-HD-4000-/ NVIDIA 186.18 WHQL For Vista http://drivers.mydrivers.com/drivers/273-109218-NVIDIA-GeForce6-GeForce7-GeForce8-GeForc/
Intel 芯片组驱动 9.1.1.1014 PV版 http://drivers.mydrivers.com/drivers/273-109319-Intel-Intel-Chipset-Device-Software-9.1./ 测试选用的源视频是一部H.264编码的1080P高清MV,总帧数6723帧,0.97GB大小,视频码率为37.5MBps,音频码率为4.6MBps。考虑到Badaboom仅支持H.264编码,所以输出影片也选择H.264编码,此外以上五款转码软件,Mediashow不支持自定义码率设置,通过Mediainfo检测输出后的影片,其码率为12-13MBps,所以我们统一了输出影片的标准:H.264编码,12.5MBps码率,音频为AAC,码率为256KBps,面画大小为1920X1080(便于后面的画质对比)。 [10.转换时间测试结果] 这五款软件按支持GPU加速与否,可以分成以下测试组,详细结果如下。
注:TMPGEnc软件的CUDA设置中包括在滤镜中使用CUDA加速,所以分为两部分:TMPGEnc是正常的视频压缩,TMPGEnc2则是加入视频降噪、音频降噪和颜色修正三种滤镜效果后的压缩过程。 由于各软件的算法不同,所以挨个来说。Badaboom作为目前GPU加速应用最彻底的软件,其压缩速度也是最快,仅有188秒,远低于其他转码软件。Mediashow Esproesso作为不多的同时支持CUDA和Stream加速的软件,在打开GPU加速功能后,压缩速度要比单纯用CPU有了大幅提高,其中CUDA加速下大幅提升,时间从485减少到了277秒。 对于TMPGEnc来说,不使用滤镜的情况下,CUDA的开启对于压缩速度并没有影响,如果加入滤镜处理,CUDA便可以表现出领先优势,减少了近200秒的压缩时间。 加入CUDA支持的新版Mediacoder则带给人们一些惊喜,使用X264编码器进行CPU压缩的事件为607秒,而使用CUDA Encoder进行GPU加速后,压缩时间则大幅减少到200秒,考虑到Mediacoder强大的功能,这款软件的吸引力绝对大增。 对ATI AVIVO Converter来说,转换速度一直是其强项, 仅用了216秒,时间上要短于单纯CPU加速解码的,不过与Badaboom相比,转换时间仍然略有差距。 [11.转换后的画质对比之一]
对于视频转换,除了转换时间之外,转换后的影片画质也是重要的考量因素。首先要明白的是,影片从高码率向低码率转换肯定要损失画质表现的,即使是相同码率,不同软件因算法不同导致转换后的画质也不一样,我们要比较的也是这一点,看看转换后的影片画质损失如何,不同转换软件压缩出的影片质量又是如何。
Mediashow Esproesso CUDA加速转码画质
Mediashow Esproesso Stream加速转码画质
由于码率和分辨率基本一致,转换出来的影片大小也趋于相同,奇怪的是Mediacoder使用CUDA编码器转换出来的影片仅有108M大小,仅有其他转换方式的来的影片三分之一,不过画质并没有太多差异。 就画质而言,Mediashowr Stream转码出来的影片中,蔡琴的脸部皮肤趋于光滑,画面细节有所损失。总体来说Mediashow Espresso三种方式转码出来的影片纵向对比差别不大,但是与Mediacoder相比,衣服的颜色要浅些,色彩略有失真,在这几种转码方式中,要数Badaboom的画质最为均衡,颜色失真小,细节也很丰富。 [12.转换后的画质对比之二]
TMPGEnc转换出来的所有影片大小都是一样,包括CUDA加速在内,ATI AVIVO Converter的大小为341MB,基本一致。 用TMPGEnc转换出来的影片颜色略微发黄,明显不如原版甚至不如前面几款软件转换出来的影片。此外,不加滤镜的情况下,CUDA并没有带来速度上的提升,而且影片质量不如CPU转码,增加滤镜效果后,CUDA明显提速,但是画质仍不如CPU转码。 AVIVO Coverter的转码速度一直是其最大的优势,此前饱受争议的画质损失问题也在逐渐改进。就此处来看,除了颜色略有失真外,整体质量并不比其他转码软件差。 [13.各软件的CPU占用情况之一]
考察各软件的CPU占用情况时,采取的是实时截图的方式,虽然不能代表转码过程中所有时刻的资源占用情况,不过仍能反映出各软件的资源占用情况。
Badaboom的CPU占用率一直在10-15%上下,是所有转码软件中最低的,由此也可以看出,Badaboom主要依赖GPU性能,对CPU要求不高。
Mediacoder在使用CPU转码时,CPU几乎一直是100%占用,四个核心都是如此。
即使是用CUDA转码,CPU的占用率也没有大幅下降,也一直保持在90%以上,Mediacoder的GPU加速依然不能脱离CPU。
Mediashow Esproesso在使用CPU转码时占用率也很高,不过并不像Mediacoder那样可以100%占用。
使用CUDA加速之后,CPU占用率有所改善,降至90%以下。
在使用Stream加速的时候,CPU占用与CUDA差不多,也是在90%以下。 [14.各软件的CPU占用情况之二]
TMPGEnc虽然支持CUDA加速,但是从CPU占用上来看,依然是CPU承担了绝大多数转码任务,转码时间也证明了这一点。
添加视频降噪、音频降噪和颜色修正三种滤镜效果之后,CPU占用维持在90%上下,并未满载。
这种情况下,如果使用CUDA加速,那么CUDA将会承担部分任务,软件会把四分之一到三分之一的任务量分配给CUDA,依然是CPU承担多数任务量。
AVIVO Converter一直有着转码速度快的优势,CPU总体占用率为30-40%左右,其中一个核心占用较高,其余核心的占用较低。 [15.总结及感想] 简单对以上几款软件做个总结,Badaboon使用简单,转换快速,是崇尚简单N卡用户的首选。Mediacoder新版大变身,CUDA编码极速提升,而且画质并不差,再加上可调功能强大,适合高玩选择。TMPEGEnc老当益壮,不单是一款功能强大的压缩软件,也具备了一定的视频处理,可以当半个专业软件使用,CUDA的支持也起到了锦上添花的作用。 对A卡用户来说,免费的AVIVO Converter转换速度快,是不二之选,不过Mediashow Espresso也相当不错,支持两种格式的Stream加速,而且加速效果明显,当然N卡用户也一样可以选择Mediashow Espresso。 实际上本文并不是一篇转码软件的评测,而是想通用视频压缩这个普通用户看得见用得上的方式介绍下GPU通用运算的情况,从测试结果来看,能够充分使用CUDA/Stream加速的转换过程,如Badabomm、Mediacoder的CUDA编码、Mediashow Esproesso的H.264,这些场合中使用GPU加速最少也能节约一半的转换时间,这些仅仅GPU通用计算的一个小方面而已。
在GPU通用计算刚刚问世的时候,人们就在考虑GPU能够取代CPU成为计算的中心力量,因为GPU的发展速度远远超过CPU,一代CPU的架构通常要3-5年才会更新,每次更新换代同频率下的性能提升也不过20%,多核时代也是如此,而GPU更新换代的时间不过1年半,新一代产品架构会有50%甚至100%的性能提升,GPU已经具备了在硬件基础上挑战CPU的能力,目前影响GPU通用计算普及的关键依然在软件支持上,只有实现了软件直接调用GPU资源进行运算,GPU才具备了与CPU一较长短的可能。 目前做得较好的软件环境便是NVIDIA的CUDA和AMD的Stream,NVIDIA公司已将CUDA作为自己制胜未来计算中心的法宝,不遗余力地推动CUDA走入千家万户,相比之下,AMD对Stream通用计算的推广就好像没有那么热衷,支持Stream计算的软件明显不如支持CUDA的多,不过这并非AMD的技术实力问题,而是因为两家公司在对待GPU通用计算上的态度有所不同。AMD作为一家同时拥有CPU和GPU业务的公司,他们更习惯CPU做计算中心,GPU作辅助,大力推动GPU通用计算并不是很紧迫的事,因此在这个问题上,并不如NVIDIA那样积极,当然相关的应用也远没有CUDA那样深入。
Larrabee能否如愿成为Intel进入GPU通用计算市场的钥匙
相比之下NVIDIA没有CPU业务,他们想要开疆拓土就只有扩大手中的王牌,极力推动GPU的应用范围,与之类似的是另一位大腕Intel,它走的则是另一条路―精简X86指令推出Larrabee计算器,了解过Larrabee架构的人都应该清楚,Larrabee并不是简单的显卡核心(虽然Intel很可能会推出Larrabee显卡),Larrabee也是Intel用于大规模并行计算的通用处理器。这三家公司最初分别像是110跨栏、100米短跑和1000米长跑一样,原先是个人跑个人参加的比赛,今天他们忽然要一起参加400米接力赛,三位选手的优势各不相同,现在发令枪已经响起,谁能最终夺冠并引领通用计算的未来,一切尚属未知。