MCPLive > 杂志文章 > AMD新一代图形API Mantle浅析

AMD新一代图形API Mantle浅析

2013-12-30黄博文《微型计算机》2013年11月下

别意外,AMD目前当然不会改行从事食品行业,这个所谓的“馒头”不过是A饭们为AMD新技术Mantle取的爱称(Mantle在英文原意为地幔之意,其发音同中文馒头读音较为接近,因此被A饭们叫做馒头)。与AMD针对显卡本身设计的CrossFireX、VLIW4技术不同,Mantle更类似于TressFX头发渲染、曲面细分技术——通过软件技术来发挥硬
件的性能,带给玩家更好的游戏体验,不过其作用、功能要强大很多,因为它不再是表现硬件技术特性的某段代码,而是可以通过它完成整个游戏设计的图形API。

AMD新一代图形API Mantle浅析

提升效率 去除封装的底层API

我们知道,自DirectX9发布以后,微软的DirectX已基本取代OpenGL成为众多游戏主要使用的API。而随着技术的发展,在进入DirectX 10、DirectX 11时代以后,DirectX API也表现出了很高的品质,通过DirectX API设计的《孤岛危机3》、《战地3》等游戏均表现出了接近电影级别的画面,那么AMD为什么要另辟蹊径去开发一种新的图形API呢?

原因并不复杂——为了提升效率。传统的高层图形API为了方便开发人员编程,将底层硬件的细节进行了层层封装,使得开发人员能够摆脱底层硬件细节的困扰,降低了开发难度与学习成本,同时也使得开发者们所编写的代码能够跨平台、跨设备地运行,Direct X便是这种设计哲学的代表者。这种高层图形API在便利了编程的同时,也付出了性能上的代价,高层图形API所经历的层层封装,每一层都代表着一次额外性能开销。让我们举一个简单的例子:每次访问缓冲区,高层API都会做一些额外工作,比如检查一次参数是否越界,访问类型是否正确等等,而底层的API则会把这些工作都交给程序员自行完成,自然加快了自己的调用速度。当然,实际的API封装远远不止参数检查这么简单,但是这个例子能够为我们呈现Mantle的基本设计理念——去除封装,暴露底层。

提升绘制调用次数 解决大性能瓶颈

去除封装,暴露底层的设计理念并非灵光一闪的做法,它的提出由来已久。高层图形API带来的额外开销在实时渲染领域的评价用“又爱又恨”来形容是很贴切的,一方面它方便了开发人员编写代码,另一方面却又限制了电脑性能发挥,阻碍性能提高的大瓶颈就是绘制调用(draw call)次数的限制。一次绘制调用相当于在屏幕上一次性绘制一批渲染条件相同的物体,每进行一次绘制调用,CPU都要花费一定时间准备数据并呈递给GPU。一个漂亮华丽的复杂场景需要绘制许多渲染条件不同的物体,这就要求进行许多次状态不同的绘制调用,使得CPU为了准备渲染数据而不堪重负,而GPU则持续空闲。在Direct X上,如果渲染一帧像素数目很多但是着色并不复杂的图像,额外开销近乎于0,但是到了三角形密集的场景,且绘制调用无法组合打包的情况下,性能就会大大衰退。NVIDIA的评估表明,在每次绘制调用规模不大但次数频繁的情况下,吞吐量的大小并非取决于GPU的强大并行能力,而是取决于CPU向GPU提供待处理数据的速度。这一问题在开发人员当中已是怨声载道,当下的开发者们被迫限制了自己进行绘制调用的次数,而游戏引擎也需要对绘制调用打包合并,进行优化。这一问题也对DirectX的缔造者微软公司施加了巨大压力,DirectX 10的开发组也在这个问题上下了功夫。相对于DirectX 9,DirectX 10与DirectX 11两次大的版本更新都加入了针对性的改进,但是问题仍未得到根本解决。

Mantle直接挂接底层硬件,在底层的GCN硬件及顶层的图形应用之间有Mantle驱动层和API层。应用层可以通过Mantle API直达GPU功能,提高了图形性能。
Mantle直接挂接底层硬件,在底层的GCN硬件及顶层的图形应用之间有Mantle驱动层和API层。应用层可以通过Mantle API直达GPU功能,提高了图形性能。

相对于庞大复杂的Direct X来说,Mantle仅由轻量级的API与驱动程序组成,并且与逐层封装,远离硬件的做法不同,Mantle反其道而行之,极力贴近硬件底层,将硬件底层特性暴露给上层的程序员,令开发者能够对渲染过程有大的控制权。通过减少高层API在CPU上带来的负担,AMD宣称Mantle能够让每帧图像所允许的绘制调用次数猛翻九倍,大大减轻了绘制调用瓶颈带来的影响,这是一项具备相当诱惑力的优势。

虽然现在我们暂时还无法得知使用Ma n t l e后到底会带来怎样的优势,但从另一个平台的表现上,我们可以初见端倪,那就是游戏主机。我们知道,游戏主机中配备的G PU,其绝对性能比PC平台的旗舰级GPU有着档次上的差距,X b ox 360的GPU尚不及PC平台旗舰级GPU性能的十分之一,但为什么游戏主机在保证游戏流畅运行的同时,仍能呈现较好的画质呢?

这是由于游戏主机的程序代码与专注于高层API的PC游戏代码不同,游戏主机的硬件固定,高层API所提供的跨设备优势不再具有意义。因此为了从有限的硬件资源中榨取大性能,在游戏主机上往往共同使用高层与底层API,而这大大提升了游戏机的运行效率。举例来说,在使用相同硬件的环境下,在游戏机上进行10000~20000次绘制调用时,游戏帧速仍能保持30~60fps,而在PC的DirectX环境里,则只能使用2000~3000次绘制调用才能保证游戏的运行帧速达到30fps左右。

仅为GCN而生的“馒头”

性能上的提高固然诱人,但需要注意的是,去除封装的招数犹如杀敌一千、自损八百的七伤拳。底层硬件直接呈现意味着代码通用性的丧失,过分靠近硬件底层的Mantle仅为AMD GCN架构的显卡优化,仅有在GCN架构的显卡上才能够享受Mantle带来的好处!这意味着只有Radeon 7000系列以及新近的Radeon R7与R9系列能够打上Mantle标志,而AMD那些并未采用GCN架构的前代产品,以及竞争对手NVIDIA和Intel的产品,都被排除在Mantle的优化范围之外。Mantle所带来的优势仅能够在GCN上化为现实。这意味着游戏开发者们面临着艰难的抉择:若是选择纯Mantle进行开发,自己的游戏就等同于与AMD捆绑在一起,成为一条绳上的蚂蚱,使用NVIDIA显卡和Intel集成显卡的玩家将与自己的游戏无缘。若想顾及GCN显卡用户以外的市场,就必须花费额外精力,将程序转移到DirectX基础上,实现通用,或是先开发基于DirectX的通用版本,再开发基于Mantle的AMD GCN显卡特别优化版。而说服这些开发人员付出额外精力学习Mantle,并使用Mantle进行开发的诱惑力,便在于性能上的提高。这时候再回头看Mantle的优点,就显得不那么超凡脱俗了,是否要选择Mantle,还真得斤斤计较一番。AMD若是足够明智,那Mantle的设计就不能为DirectX的迁移带来重大障碍,以方便开发人员选择第二条路线——在DirectX与Mantle之间进行代码迁移。可能有读者会问,Mantle能不能干脆取代Direct X,游戏统一使用MantleAPI来开发呢?

取代DirectX ? Mantle的未来

能够吸引开发者的支持吗?

对于游戏玩家来说,显卡的性能和价格是重要的两个因素,甚至可以说这两个因素就是玩家关注的全部,但从程序开发员的角度上看,性能的地位便有所衰落,从“重要的因素”变成了“重要因素”之一。举例来说,当我们需要在屏幕上实时绘制一个以Sin函数轨迹持续运动的发光小球时,那么程序开发人员可能面临多种选择:其一,使用Java/C++等语言配合图形库来开发,这样的话程序员能够控制一些底层硬件的细节,例如使用分块访问来提升访存局部性,消除数据相关性,帮助编译器和处理器进行单指令多数据流加速等,性能有所保障,但是编程难度较大,所需时间相对较长,完成这项工作可能需要个把小时的编程与调试;其二,使用专用的数学绘图工具,例如Matlab,Mathematica等进行绘制。这些专用数学绘图工具通常使用C/C++再搭配更高抽象层次的语言编写,底层硬件的细节被完全遮盖,程序员已经无法感知硬件特性,这类软件的运行性能相比单纯的语言开发会有数倍的衰退。但程序员的选择却令人意外,性能上的大幅落后换来了另一方面无可比拟的巨大优势——完成这个编程任务将只需要一行指令,编程仅需区区一分钟,因此这些专业绘图软件受到许多程序员的青睐,成为绘图任务的首选。

只有在AMD GCN架构即基于SIMD阵列的MIMD架构,如AMD Radeon 7000系列以及新近的RadeonR7与R9系列显卡上,Mantle才能为玩家带来更好的体验。
只有在AMD GCN架构即基于SIMD阵列的MIMD架构,如AMD Radeon 7000系列以及新近的RadeonR7与R9系列显卡上,Mantle才能为玩家带来更好的体验。


曾经的著名显卡厂商3dfx也曾推出其专用Glide API,这套API令3dfx显卡表现更佳,同时,游戏厂商也推出了大量基于该A PI的游戏(如上图所示),但由于设计过于封闭一在Glide游戏上,非3dfx显卡无法使用3D加速,后被DirectX挤出市场。

从这个例子中我们可以看到,性能方面具备数量级的领先优势未必能够吸引开发者,开发所需的时间和精力成本,以及开发者们学习这套额外API所需的学习成本也是不可忽视的重要因素。能够提供大幅性能优势,但同时又以较高的开发成本而“臭名昭著”的莫过于手工汇编。如果实时渲染领域只凭性能优势说话,那么所有的开发者早就一拥而上使用汇编程序开发游戏了。因此光凭性能优势,Mantle API还不足以吸引程序员们去付出额外精力。Mantle还必须拥有优良的设计,对开发者友好,学习和迁移成本越低越有利,这样才能获得程序员们的支持,它的成功=性能显著优势+较低的学习成本+较低的开发成本,三者缺一都会为Mantle的未来添加不确定性因素。

好消息是,寒霜3引擎技术总监Johan Andersson已经率先表示,至少有《战地4》、《镜之边缘2》、《星球大战:前线》。《极品飞车18:宿敌》、《质量效应》等15部采用寒霜3引擎的游戏大作将会采用AMD Mantle API设计。初步看来,Mantle的入门成本似乎不高,已经吸引了主要游戏大厂的注意。

好消息是《镜之边缘2》、《极品飞车18:宿敌》等热门游戏均将采用Mantle API开发,GCN显卡在这些游戏中可能将获得较大的性能提升。
好消息是《镜之边缘2》、《极品飞车18:宿敌》等热门游戏均将采用Mantle API开发,GCN显卡在这些游戏中可能将获得较大的性能提升。

当然,推论Mantle取代DirectX的设想还是太过大胆了,从现实情况来看AMD也没这样的考虑。不论是主导一种标准还是推翻微软的领导地位都是非常艰难的,同时新一代Radeon R9/R7显卡也是明确支持DirectX 11.2标准的,AMD肯定离不开通用的标准。我们认为开发Mantle API更多地还是为了促进AMD与游戏开发商间的合作,更好地对游戏进行优化。

它的性能优势足够吗?

后,还有一个大家关心的问题,在PC游戏中,Mantle API到底能带来多大的提升呢?将绘制调用的允许数目提高了九倍,那么实际性能就会提高九倍吗?显然不是,绘制调用的上限大幅度提高之后,性能瓶颈显然就已经不在绘制调用的部分,而是转向了“砌墙工人”即GPU。我们知道,高端GPU与入门级GPU之间在技术规格上存在巨大的差距,因此使用Mantle并不会让一块五百元的低端显卡瞬间碾压数千元的旗舰显卡。Mantle只是在理论上,在几何负载密集、多个着色处理的场景下可以带来一定幅度的性能提升,不要对Mantle抱有不切实际的过高期望,单纯使用Mantle并不会带来性能上奇迹般的突破。根据新消息,AMD将在本月召开的开发者大会上公布关于Mantle的更多资料,届时可能将有测试数据放出。本刊也将对其持续进行关注,在后续为大家带来有关Mantle的深度报道。

Tips:什么是绘制调用?

在游戏中生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置、法线、UV等)、索引(顶点如何组成三角形)、变换(就是物体的位置、旋转、缩放、以及摄像机位置等)、相关光源、纹理、渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API—或者就简单地看作是通知GPU开始绘制。GPU基于这些数据,经过一系列运算,在屏幕上画出成千上万的三角形,终构成一幅图像。其中的数据准备并通知GPU的过程就被称为绘制调用。简单地说就像一个工人递砖头,另一个工人接过砖头砌墙。如果递砖头(绘制调用)的速度很慢而砌墙的速度很快,那么砌墙工人即使有再出色的能力也无济于事。

分享到:

用户评论

共有评论(2)

  • 2014.01.10 17:41
    2楼

    AMD已经有xbox one和ps4两张大订单了。。只要上家用机就能用得上了。这些才是大头。

    (0) (0) 回复
  • 2014.01.04 12:59
    1楼

    Mantle不是封闭的 早先就有报道 在GPU14大会上 DICE首席技术官Johan Andersson 进一步强调“地幔”可以用在N卡上 硬要说封闭 倒是 老黄从AGEIA买来的physx物理技术 更接近(只提供单线程CPU支持 和 自家GPU加速 3.0版本 说是提供多线程优化 但这方面全靠游戏厂商的自觉 加上近期的“GameWorks”)

    (0) (0) 回复

用户名:

密码: