电脑装配网

图形新世界,DirectX 12性能预览

 人阅读 | 作者xiaofeng | 时间:2024-03-19 09:02

在微软发布的Windows 10之中,有一个对于很多人看上去没什么感觉但是实际上很重要的更新,那就是加入DirectX 12的支持,加入了DX12的支持之后,将会允许开发者在现有硬件上进一步提升图形质量,那么DX12究竟有多强,一测便知。

大约一年半以前,AMD开启了更新图形API的序幕,AMD将之称为“Mantle”技术,可以看做是AMD自家的Radeon显卡之中去掉DirectX 11和OpenGL 4这样的传统高等级API之中的抽象的以及效率低下的部分的产物,同时“Mantle”技术也允许开发者通过相对低层级,和游戏主机相似的方式来接触到GPU的内部,而这在某些时候提供给开发者的便利则比DirectX和OpenGL能够做到的要多得多。

AMD是业界第一个公开他们低层级API的厂商,而AMD自然也不会是最后一个,在2014年,DirectX 12正式发布,随后就是OpenGL和苹果的Metal,它们的出发点自然都是为了提升图形性能,这在图形API缓慢发展了这么多年之后,感觉就像遇上了文艺复兴一般,而对于性能控来说,无疑是个大大的利好消息。

在PC平台上,我们已经见识到了早期的“Mantle”的表现了,该技术确实能够一定程度上提升性能,尤其是GPU和CPU共同协作的时候,听起来很赞,但是这个API目前是AMD独享的,那么英伟达和英特尔怎么办?这回就轮到DirectX这个微软的传统的跨平台API登场了,功效和AMD的产品类似,但是用更加普遍的API使得Windows生态圈里更多厂商的GPU都能够获益。

DirectX 12最早于GDC 2014发表,当时微软公布了全新的API和他们预定的目标,通过一段非常早期的代码来简单的演示,并且新API具体工作方式的技术细节也没有公开太多,在那之后,微软就投身于将DX12集成到Windows 10之中的开发,而在最新的Win10预览版(编号9926)之中,DX12的早期预览版也终于和我们见面了。

于是今天,当微软最新的API慢慢成型并且稳定,而且首款DX12的应用程序也被编写了出来,微软和它的小伙伴们憋的大招终于能够让我们稍微感受一下了,所以对于性能的测试,我们自然选用了目前首个DX12应用Oxide Games’ Star Swarm benchmark来进行,在测试的过程之中,我们将会主要关注如下问题:

DX12能否像Mantle一样带来性能提升呢?DX12能够解决DX11无法解决的CPU瓶颈文图吗?低层级的API在普通API以及不匹配的硬件上运行情况又如何呢?

从技术层面上来说,DX12的API只是宏图伟业之中的一小部分——就像微软最近推送的几个DX11小版本升级一样,DX12也在新版的Windows显示驱动2.0(WDDM 2.0)之中有出现,WDDM 2.0是在WDDM在Vista上登场以来一个最大的更新,而这也从一个侧面说明DX12本身代表了一个Windows平台上GPU生态系统的飞越。

目前微软也没有公布WDDM 2.0的所有细节,可能在GDC 2015上会有更多信息,但是WDDM 2.0是建立在开启DX12的基础上并且对内核和显示驱动加入必要的功能以使其支持必要的API,DX12之中和WDDM 2.0相关的功能包括外部存储管理和动态资源调配,这两个功能在WDDM 1.3之中是无法启用的,WDDM 2.0同样也加入了DX12之中更为基础的CPU效能优化,比如调整存储驻留和控制DX12如何获取外部控制资源。

目前对于A卡和N卡的一些测试之中结果如上图,简单来说,A家和N家最新的产品都能够完好的支持WDDM 2.0,但是各自的早期产品则物理了,A卡的GCN 1.0系列显卡虽然能够运行WDDM 2.0,但是在Star Swarm这个应用程序之中会出现纹理问题,而在1.1之后的产品之中则不会。而N卡之中就干脆只有新款能够运行,其中费米架构都不支持了(当然前提是要更新最新Beta版本的驱动程序)。

至于操作系统方面,情况就要简单得多了,Win10之前的Windows操作系统通通不支持,因为在Windows系统之中,WDDM是内核级别的组件,如果要强制让WDDM 2.0支持目前或者更早的操作系统,微软要么对WDDM 2.0进行功能上的阉割,或者重新开发那些旧的系统内核。微软之前给Win7更新Direct3D 11.1和WDDM 1.2的时候就发现了即便是如此小型的更新也会导致兼容性问题,所以微软将旧操作系统挡在DX12的门外似乎也是情有可原了,而微软对此作出的补偿就是——Win7、8、8.1的用户都可以免费升级到Win10操作系统,也是简单粗暴,当然前提是用户使用的是正版啦。

目前测试DX12预览版的软件只有来自Oxide Games的新版“星空”的Demo,该Demo最早于2014年发布,用来掩饰Oxide的Nitrous引擎和Mantle的效能,这个Demo描绘的是一个巨大空间之内两个舰队交战的场景,描绘了数以千计的战舰和其他许多视觉特效,如此的工作量能够轻松地让就的高层级API满载而导致渲染能力下降,以展示新的低层级API的功用。

简单来说就是个跑分软件,并且Nitrous引擎也会在即将和我们见面的数款游戏之中出现,具体同样也要等到GDC 2015才能一探究竟了,对于这款可以看做是跑分软件的软件本身,其采用了实时计算的方式,两队AI舰队交战,每次运行跑分,交战的结果都不一样,软件内置了一个足够可靠的RTS模式以确保每次跑分对于性能的考验都尽可能地相近,在测试过程之中我们也发现这款跑分软件的数据是可信的,总体成绩足够稳定。

今天参与测试的N卡有GTX980(麦克斯维尔2)、GTX750 Ti(麦克斯维尔1)、GTX 680(开普勒),A卡有R9 290X(GCN 1.1)、R9 285(GCN 1.2)和R9 260X(GCN 1.1)。CPU方面,我们使用同一颗i7-4960X CPU大致模拟i7(6核心)、i5(4核心)和i3(双核心),不过需要指出的是我们虽然无法控制4960X的L3缓存大小,但是这个影响对于整体成绩的影响应该是轻微的。

至于A家的处理器,在此虽然没有进行测试,但是根据AMD的CPU模块设计,表现应当在我们模拟的2~4核心处理器之间。

以上就是测试成绩了,看着这个成绩,我们终于可以回答第一个问题了:DX12能否像Mantle一样带来性能提升呢?能。

继续探究DX12,由于DX12相对于DX11最大的改进就是去掉了CPU的瓶颈效应,在DX11之下,大量的工作是由单线程完成的,于是跑分结果也就受到了CPU单线程性能的限制,不能完全发挥CPU的效能,这一点就是DX12致力于解决的,更低层级的API的开放也就意味着Oxide能够更直接地控制计算任务的提交,CPU核心之间的工作任务分配也更加合理。

从测试结果来分析,星空的成绩在DX12之下对于CPU核心数量相当不敏感,也就是说在测试过程之中,CPU超过四核心的部分基本没有啥意义,得分也完全只是和GPU的性能有关,也就是说,DX12很大程度上减少了用户对于多线程处理器的需要,因为就目前的成绩看来,即使只使用4核心处理器,分数一样很漂亮。

于是以下就无需动用6核心的设定了,而在我们接下来的测试之中,DX12的效率是如此之高,以至于需要用到我们参与测试的最强的显卡GTX 980才能体现出双核处理器和四核处理器的区别,剩余的A卡和N卡的成绩在变换CPU核心数量时所获得的差距几乎都可以忽略,也从另一个方面说明了DX12的批处理提交方式的效能大大提高,以至于Oxide仅用了两个CPU核心就完成了批处理提交和AI模拟。

既然说到批处理提交,我们不妨再来看看星空Demo的统计数据来分析一下批处理提交,从这些可以说是难以执行的数据上来看(尤其是A卡的数据),批处理提交的时间从几十毫秒甚至上百毫秒下降到了最低3~5毫秒的水平,简直是提升了一个次元的成绩,那些需要CPU来来处理批处理提交的时间被彻底地去掉了,仅在几毫秒之内,就可以提交做多12万条绘制请求,而这方面的优化可以说直接带来了DX12在性能上的提升,而这个提升对于以后即将到来的其他游戏来说,绝对是大好事。

R9 290X@DX11,CPU使用情况。

R9 290X@DX12,CPU使用情况。

GTX980@DX11,CPU使用情况。

GTX980@DX12,CPU使用情况。

另外,我们还可以观察一下操作系统本身所记录的CPU使用情况,在DX11之下,使用GTX 980的平台和使用R9 290X的平台之中,CPU的使用情况都非常不平均,绝大部分时间都由1~2个CPU核心承担了大量的工作负担,而到了DX12,工作负担则被很好地平均分配到了全部四个核心上面。

也就是说,现在很多CPU的单线程性能已经无法满足GPU的进步了,也就是之前说的“CPU瓶颈”现象的出现,开发者们就必须挖掘CPU多线程性能的潜力,而DX12就是一个很好的解决方案,让开发者自己动手优化自己应用利用多线程处理器的能力。

锁定CPU情况下, 监测GPU性能,不过由于星战这个测试之中,GPU的性能还是能够得到全面发挥的,所以这里的成绩最终还是和GPU是直接有关。

目前星战测试之中,N卡的成绩普遍比较漂亮——即便是考虑到实际性能差距,N卡的表现也是出乎意料的好,在我们测试的这些显卡之中,N卡无压力占据了前列,GTX980的成绩更是超过了R9 290X 50%之多,GTX685在对阵R9 285时也有25%的优势,在这里的成绩仅供参考吧,在DX12正式发布的之前,一切都有改变的可能。

同时,值得指出的是由于A卡在DX11之下的表现实在是可怜,A卡用户反而会成为DX12最大的受益者,GTX980在DX12下的性能上升了150%,而R9 290X的性能更是上升了夸张的416%,至于Mantle,在这里由于N卡不支持所以暂时不讨论。

在这些数据对比之中,真正让我们比较在意的是GTX750Ti,虽然性能也有提升,但是仅仅26%的性能提升在前面数倍的性能提升面前实在是不值一提。

之前的测试结果也很明确,除了GTX980之外,其他所有的卡跑星战都只需要用到双核CPU,也就是说,以后自己配机器的时候,只要有DX12的支持,可以将成本向GPU上倾斜一些,当然要玩液氮冷却双路泰坦什么的玩家,还是买个顶级CPU吧,你们肯定不差钱。

从这次的结果来看,DX12的前途真是一片光明,目前DX12的详细功能和开发者支持还没有公布,更多的信息依旧只能等到GDC 2015,所以严格来说,今天的评测也只能说是对DX12所能够提供的性能的一个“预览”吧。

我们必须说我们对DX12所带来的提升非常非常满意,不过问题依旧存在,即使DX12开放了那些API,硬件制造商和开发者将会怎么利用它们呢,出来的成果又会是怎么样呢?我们暂时还不知道,不过就目前的预览结果而言,CPU的效率和多线程性能得到巨大提升,这一点是绝对会有的。

对于开发者来说,DX12的潜能自然是毋庸置疑的,但是DX12的开发难度也决定了从DX11转向DX12绝对不会是一个简单快速的过程,那么要多久呢?我们也不知道。


文章标签:

本文链接:『转载请注明出处』