Long Long ago的某天,我对自己新买的显卡说:“显卡显卡,你能提供什么特效”?显卡骄傲的看着我答道:“主人,我除了能满足你想要的特效外,我还能在你所玩的游戏中很好的发挥出这些特效”。时过境迁,我长大了,工作了,学会了使用Photoshop、Matlab、Adobe Reader、高清影片也让我变得欲罢不能。慢慢的,我走出了游戏,发现了另外一处让我值得去追求的乐土。但此时,我发现的一直陪伴着我的“朋友”却显得有些疲惫。我打开了机箱,拿出他,轻轻的抹去身上的灰尘:“显卡显卡,面对每天上百张高分辨率的图片,你能帮我加快读取速度吗?面对大容量的视频文件,你能帮我减少点压缩时间吗”?显卡惘然若失的看着我答道:“主人,我很想帮你,但我已经无能为力,我累了,想睡一会!”
随着显示芯片已慢慢蜕变为GPU后,显卡已经被赋予了可编程的功能。在之后几年中,GPU也以超越CPU的速度而高速的发展。如今即便是最最便宜的显卡也可以实现一切游戏策划者需要的特效。无论是299、599还是1399、2199,它们之间的区别可能更多的是对于执行这些特效的速度,而并非是否能执行。所以今天我们的主角——NVIDIA GeForce GTX280,他拥有一颗大型多线程多核的视觉运算的GPU,不仅使用了NVIDIA第二代的统一渲架构,更加入了相比前代性能有大幅度提升的平行计算架构。
GPU在以神的速发展并扩充
通过初步的了解,我们发觉GT200拥有的并不单单是它强劲的游戏执行效能。以前,显卡在很大程度上为游戏和3D应用程序而服务的,但随着激烈的竞争与技术上的高速发展,客观上的成就了目前GPU的爆炸式成果。而GT200的运算能力已经达到了一个高度,甚至浮点运算的能力已经能大幅度的超越最高级别的处理器产品,好像我们所拥有的CPU与GPU,GPU已不单单只在玩游戏的时候才有用,而是在执行PC其它程序有用武之地了。
从93年开始,GPU的性能就以每年接近3倍的速度增长,这个数字已经超过了个人电脑中其它硬件子系统的发展速度。例如一颗频率为3.0GHz的P4处理器,它所拥有的晶体管为1.25亿,即使加上SSE指令集的SIMD,也只有6GFloPhotoshop的峰值浮点处理能力。但在相同时期,一颗GPU就可能拥有2.22亿个晶体管,峰值浮点运算能力突破40GFloPhotoshop。而现在,GT200的峰值浮点运算能力已经超过了1000GFloPhotoshop级,性能不言而喻。当然,我们还没有排除掉GPU还拥有属于自己独立的子存储系统——显存。
那如此看来,GPU拥有如此强劲的性能,它到底能在除游戏以外为非游戏程序进行优化处理呢?虽然浮点运算能力如此强劲,但它毕竟是基于其统一的架构,是无法与X86处理器相比拟的,那到底在何种情况下,我们才能利用GPU去达到这些程序的加速目的呢?
加速起源,何为CUDA
早在2002年,NVIDIA引入了GPU中计算的技术,将32位浮点技术搭载与GPU中,NVIDIA十分期待技术人员能将GPU超强的计算能力应用于程序,还不是图形。但早期的GPU是用类似OpenGL或Cg的图形API编程的,这些API是很难的,并且大多数技术人员对这类API也并不是十分的熟悉。
到了2003年,NVIDIA又开始了新的尝试,这次工程设计的尝试产生了后来在2006年出现在8系列GPU的CUDA技术。而目前所有8系列GPU,包括从笔记本电脑到高性能的系统,都具备了CUDA技术。只不过因为那时候CUDA还未成型,所以没有公布,而现在,基于CUDA的应用程序越来越多,因此伴随着GTX200系列芯片的发布,CUDA也同时正式大范围的推广并介绍给普通消费者。
GPU的性能正逐步变得强大,此时,无论是Intel还是AMD都发现了这一点,不过因为自身处理器发展成熟,所以两家处理器巨头都采用了GPGPU,也就是给予X86处理器构架的平台。GPGPU与NVIDIA概念上的区别就是,GPGPU的应用往往要了解OepnGL编程或者DirectX编程,而CUDA则是仍然通过API送入GPU。如果你应用不涉及到OpenGL或者DirectX的话,就可以不用理会API,也就是说GPGPU进行通用计算,是通过把这些问题转换成图形计算后送到GPU中完成的,而CUDA则可以直接调用GPU的计算资源,成为高性能计算的软件开发环境。
说了那么多肯定会有一些网友不太明白,CUDA究竟是什么呢?好了,CUDA(Compute Unified Device Architecture)就是NVIDIA推出的一个基于GPU的运算平台,它可以让显卡除了用于图像计算以外的目的。CUDA工具集的核心其实是一个C语言编译器。
CPU与GPU?CUDA适合大规模并行处理
可能说到这里,可能我会把网友们引入一个误圈里,就是目前炒得火热的“GPU与CPU事件”。对这个问题,是时候站出来吼一下了:“这显然是不对地”!显然GPU和CPU还是各自做着不同的工作的,GPU的计算主要集中与高效率低成本的高性能并行计算,所以事实上在一个系统里,一个高效的GPU配合高效的CPU,这样,整体的效率才会有很明显的提升。
CUDA还是比较擅长于某一方面的,而并非是面面俱到。CUDA开发平台是基于NVIDIA GPU的平台上,因此发挥GPU的并行优势才是最终的目的。从客观上考虑,CUDA对于非图形的计算,并没有任何的限制性,不过CUDA还是相对比较适合与高度并行的计算。这里所谓的高度并行的数量级为上千个,相对于CPU来讲,双核的CPU也许几个线程就能充满它整个的计算单元,然而CUDA-enabled GPU却能够容纳上千个线程(也就是GPU中数百个SP单元的功力),所以常遇到的高性能计算领域的问题就特别适用于CUDA,而之前通常采用计算机集群的方式来进行计算。
 |
|
CUDA显卡支持列表
|
从NVIDIA GeForce6开始,就已经能够支持较为复杂的控制指令,比如条件的转移,分支以及循环和子程序用等。到现在的新一代显卡,GPU的程序控制能力又增强了不少,支持的程序长度也得到了扩展,也就是说GPU的任务不单单为一项,而是还可以写一些较为复杂的程序。
当然,万物皆不完美,其还是主要去做那些能够分成很多个独立线程的数值计算。比如说矩阵的乘法计算,矩阵相对应的元素的计算是没有什么联系的,可以很多个线程同时送入很多个处理器进行并行处理,这就非常适合于用CUDA来解决。当然并不是所有的事情CUDA都能够很好地解决,比如像操作系统这样复杂的指令和纷繁的分支循环而又用很少的线程来处理,这显然就不是CUDA的强项了。高度并行的计算是CUDA的技术特性之一。
目前来说,CUDA已经被应用在了许多领域中,包括在通用计算中的一些GPU加速,游戏中的物理模拟等等,而在科学计算中,CUDA可发挥的功效就更大了。比如有限元的计算、神经元的研究计算、地质分析等等科学研究的领域;当然目前GPU计算的应用还是处于一个早期的阶段,大部分CUDA应用都是专业人员和相关的程序员在开发,随着CUDA的广泛推行,以后会有实际的基于CUDA的程序,更多的程序员能够加入进来,并且开发一些可以给大家日常应用带来好处的程序,只要有支持CUDA的GPU就能够利用到GPU计算的好处。
在我们接下来将要测试的两个CUDA应用实例中,可以发现GTX 280在分布式计算和密集型计算时有着比CPU强上很多倍的能力,随着CUDA的飞速发展,越来越多的程序可以使用GPU来作计算,处理能力比CPU更为强悍,无论对于消费者还是NVIDIA来说,都是非常乐观和期待的。
实际检验CUDA加速 体验:Badaboom
NVIDIA联合Elemetal制作了名为BadaBOOM Media Converter的视频转换工具,可以将众多的视频格式转换成直接能在PSP、iPhone等流行手持数码设备上播放的视频格式。软件基于CUDA开发,最大限度的利用GPU加速。不过目前这款软件尚处在测试阶段,仅支持GTX280和GTX260,且驱动程序必须使用ForceWare 177.34之后的版本。我们测试系统基于Q6700处理器平台,这也方面比较顶级CPU和顶级GPU在编码能力方面的差距。
BadaBOOM的界面简单,选择需要压制的视频和需要生成的格式即可。中间的滚动条可以设定转换品质,我们使用最高画质,输出为iPhone默认的分辨率,压缩一段MPEG2编码的动画视频。这段视频就是NVIDIA利用Autodesk MAYA软件制作的首部动画《The Plush Life》,这部720P的片源播放时间近12分钟,容量为183MB,GTX280的实时编码速度达到了155.1帧,完成整个编码过程仅用20几秒。
同样的平台下(Intel Q6700),我们改用最新的iTunes软件来试着压缩这段视频。
转换完毕,总共消耗3分9秒。
使用Wondershare iPhone Video Converter软件进行同样的转换格式工作,我们选择压缩格式为标准的iphoneH.264 480x320。
转换完毕得,到的结果是耗时1分16秒。
通过简单的体验,我们可以看到,通过BadaBOOM和两款软件对比后,之间的速度差距也十分直观放在大家眼前。但目前BadaBOOM只是测试版本,相信等到NVIDIA推出正式版本后,到时软件的兼容性更强,不单只有GT280能支持外,让中低端显卡用户也能感受到CUDA带来的喜悦。
实际检验CUDA能力 体验:Folding@Home
Folding@home是美国史丹佛大学推动的分散式运算计划,目的在于使用联网式的计算方式和大量的分布式计算能力来模拟蛋白质折叠的过程,并指引对由折叠引起的疾病的一系列研究。ATI早在2006年就加入了这个计划,最新的客户端能支持Radeon HD 2000/3000系列显卡,NVIDIA一直无缘这项可以说是全球最普及的显卡通用计算应用。
但在日前加州举行的一次媒体会议上,NVIDIA宣布NVIDIA CUDA显卡即将加入Folding@home计划。NVIDIA表示,目前全球有7000万块CUDA显卡(GeForce 8及以上,包括Quadro和Tesla系列),平均拥有100GFLOPS的浮点运算能力。如果这其中有0.1%参与Folding@Home,就能够为该计划带来7PFLOPS的运算能力,远远高于全世界最强大的超级计算机(运算能力不足1PFLOPS)。
目前NVIDIA CUDA显卡已经加入Folding@home计划,资料表明GTX280显卡可以在一天内模拟超过650纳秒的蛋白质折叠,而HD3870只能达到大约170纳秒,PS3仅仅100纳秒,四核心处理器更是不过4纳秒。这就是说,GTX280在这方面的性能是四核处理器的160多倍。
一直强调GPU Computing的GTX200系列首当其冲,我们利用CUDA开发的支持GTX280的Folding@home的客户端,进行了简单试用,在Forceware 177.39 beta驱动中开始加入了对CUDA的支持。Folding@Home是以ns/day来衡量性能的,我们看到GTX 280能提供621ns/day的计算能力,与而一颗四核心CPU的计算能力为4ns/day,HD3870的计算能力则为170ns/day相比,GTX280在此具备着极大的优势。另外,除了CUDA的运用随着NVIDIA的驱动开始对PhysX的支持,玩家更是可以体验到物理加速的快感。
衍生功能:PhysX 与通用处理
作为先前物理加速界的两大厂商,Ageia与Havok相继为NVIDIA与INTEL收购,而就在数天前,AMD方面也宣布与Havok展开合作。而NVIDIA方面则将Ageia物理加速技术融入了CUDA中,成为未来全系列NVIDIA显卡都具备的特殊功能。
对于G80架构及其衍生架构G92,GT200来说,其每一个SP都是一个独立的ALU矢量运算器,而PhysX物理技术仅需要强大的浮点运算能力即可完成。 实际上之前Ageia的独立物理卡PPU亦可理解为通用浮点运算器+物理加速应用程序接口(API),而第一代独立PPU拥有25GFlops浮点运算能力。 而GTX280/260的浮点运算能力已达到720GFlops/576GFlops,但目前的3D API决定Shader在同一周期内只能够处理1个除法运算或2个加法运算,同时Mini ALU可以充当SFU的角色,作3D+1D或2D+2D的运算。
换句话说,只要加载独立的PhysX API,现在的8/9系列显卡架构体系亦可实现PhysX运算——至少在增强了内部通用寄存器与数据流控制器(DME)的9系列显卡上可得以实现(从局部来看,8/9系列GPU本身已接近于IBM Cell芯片架构的RISC通用处理器)。因为所有的联合渲染器本身是可编程的通用浮点运算器(支持CUDA)。而此API很可能以Driver或外挂Driver的方式发布。
|