物理大战新篇章
2008年6月,NVIDIA与AMD-ATI先后发布了自家新一代高阶产品GT200(GeForce GTX 280/260)与RV770(Radeon HD 4850/4870),我们在惊诧于新产品的极限性能时,众多新技术引用也是玩家关注的重点,例如NVIDIA的CUDA架构,AMD-ATI的GPGPU解决方案等。在众多的技术当中,物理加速技术由于震撼的视觉体验及两家不同的解决方案再次成为了人们关注的焦点。
NVIDIA发布的CUDA 2.0开发包中蕴含了PhysX物理加速技术,NVIDIA的意向是使用GPU通过CUDA架构来实现物理加速;而作为同时拥有CPU与GPU业务的AMD自然会选择CPU+GPU为主导的Havok物理引擎。2007年9月Intel闪电收购Havok之后,NVIDIA与AMD-ATI的GPU物理加速计算就显得非常尴尬,因为Intel收购Havok的目的就是使Havok引擎专注于CPU物理运算,为了对抗Intel(亦或是说CPU),NVIDIA收购了Ageia及其PhysX引擎,使PhysX引擎专注于GPU物理运算。AMD-ATI如何选择物理加速方案在RV770之前业界充满了猜测,因为无论是Havok还是PhysX引擎,都是竞争对手的产品,而为了AMD更加长远的Fusion计划,AMD-ATI最终选择了前者。
物理加速技术在2006年Ageia发布物理PhysX加速卡时被人们所关注,甚至有人笑称3D加速成就了3DFX,而物理加速将成就Ageia,但是由于Ageia采用的是PhysX硬件物理卡加速方式,而物理卡又价格不菲,虽然Ageia也出售PhysX引擎,但是由于没有PhysX硬件加速卡支持的话效率会降低,在加上NVIDIA与AMD-ATI当时都采用了Havok引擎作为标准,因此一直没有受到游戏开发商及广大玩家的重视。而Havok引擎在很长一段时间都是致力于CPU软件加速,但是随着Havok 4.0工具中Havok FX的发布就不一样了,Havok FX引擎是通过GPU来进行物理加速,主要针对当时的PhysX引擎。
关于GPU与CPU在做物理运算时的差距这里就不多做介绍了,有很多这方面的文章可寻,总体来说GPU运行物理运算可以是四核CPU的十几倍到几十倍不等,比PPU有几倍到几十倍的性能提升。而我们这里主要探讨的NVIDIA与AMD-ATI GPU加速昨天、今天与明天!
昨天—殊归同途的Havok FX引擎
Havok FX发布于2006年中,前文已经提到,Havok FX引擎是通过GPU来进行物理加速,当时的NVIDIA与AMD-ATI都不约而同的支持Havok FX引擎,首先来看NVIDIA的NVIDIA SLI Physics技术,NVIDIA是采用SLI模式的第二块显卡来进行物理加速。
从上图中可以看出,Havok FX API通过DirectX将数据发给GPU驱动,如果游戏或者驱动不支持SLI物理,那么将不会发送物理数据,反之则交给GPU 2进行物理计算,计算结果则返回给Havok API。 与NVIDIA的物理解决方案类似,AMD-ATI同样采用Havok FX引擎,同样基于多卡互联CrossFire来实现物理加速,第二块显卡来进行GPU物理加速。 当时AMD-ATI的X1000系列GPU的设计理念是搭建智能化的芯片架构,使得芯片内部的运算灵活性增强,根据外部接口API的不同,可以实现完全不同的运算任务,并且命名为DPP(Data Parallel Processing )并行数据处理架构。 虽然同样采用了Havok FX引擎,并且都是双卡互联形式实现,但是两家的解决方案却大相径庭:NVIDIA是通过DirectX API来实现物理加速,而AMD-ATI则是通过数据并行计算架构提取(Data Parallel Processing Architecture Abstraction )直接与Havok FX引擎交换数据,让Havok FX引擎直接与GPU沟通,而不需要通过Direct3D和OpenGL API,AMD-ATI著名的Close To Metal(CTM)接口就是在这个时期提出的。简单的理解就是,AMD-ATI的实现方式是“GPGPU”通用计算的形式来做物理运算,而NVIDIA是让显卡通过DirectX以“GPU”的工作方式在做物理加速(其实也是GPGPU应用范畴)。 至于两种方案的优劣其实讨论起来真的没有意义,因为实际上除了NVIDIA与AMD-ATI自家演示的小DEMO与视频之外,目前支持GPU物理加速的游戏几乎没有,大部分使用到物理加速的游戏还都是使用CPU物理加速的方式,包括我们熟知顶级大作《Crysis》、《使命召唤4:现代战争》等等……
今天—PhysX决战Havok FX
当NVIDIA宣布CUDA集成PhysX物理引擎时,很多人都会认为PhysX引擎只支持GPU物理加速技术,这也是AMD-ATI选择Havok FX引擎的主要原因。然而实际上PhysX引擎最初是只支持CPU与PPU,而不支持GPU,即使是融入CUDA之后,PhysX引擎也仍然支持CPU物理加速。之所以给人PhysX引擎只支持GPU物理加速的错觉,是因为NVIDIA表示今后将大力发展GPU物理加速,但这并不表示PhysX引擎排斥CPU或者CPU+GPU的解决方案。 无论是GPU还是CPU、PPU、Cell(PS3)都可以通过HAL翻译层来实现软、固质体动力(Soft or Rigid Body Dynamics)、通用碰撞侦测(Universal Collision Detection)、有限元素分析(Finite Element Analysis)、流体动力(Fluid Dynamics)、毛发模拟(Hair Simulation)以及更先进的布料模拟(Cloth Simulation)、自然模拟(Natural Motion)等在内新颖技术。 通过CUDA通用接口,PhysX引擎将NVIDIA GPU中的Thread Scheduler(线程管理器)模拟成Control Engine(控制引擎CE),而Streaming Processors来模拟Vector Processing Engine(矢量处理引擎,VPE),其中CE控制引擎负责任务的指派,相当于PhysX中的主管机构,而真正的物理运算任务则是由VPE矢量引擎来完成,最后通过Data Movement Engine(数据移动引擎DME)输出。关于最新GT200物理运算的优势已经被NVIDIA吹的天花乱坠,这里就不多介绍了,感兴趣的朋友参见《NVIDIA夺面双雄 GT200全球同步首测》一文。 而AMD-ATI则继续选择Havok FX引擎,不过RV770系列实现物理加速的方法也已经不同于之前的CrossFire双卡解决方案,之前Radeon X1000系列是通过据并行计算架构提取直接与Havok FX引擎相连接(其实也可以通过Direct3D和OpenGL API),然而由于对抗CUDA的原因,AMD-ATI也需要自己的GPGPU规范,而AMD-ATI则选择了苹果公司力推的通用计算行业标准OpenCL,它能与图形硬件及多核CPU相协调以提高系统的整体性能,而AMD-ATI的Havok物理加速技术就是基于CAL/Brook+的。 实质上讲无论是CTM接口,还是现在的CAL/Beook+,AMD-ATI执行物理加速的概念都没有变,那就是GPGPU的并行能力进行物理运算,而NVIDIA方面可以真正称的上市GPGPU物理加速还是从CUDA开始的。另外我们也注意到,之前无论NVIDIA还是AMD-ATI在展示自己物理运算时都是基于双卡技术,而如今他们更愿意谈论单卡。 |