杂志汇个人电脑

DirectX 12,Windows 10的“杀手锏”


微软的Windows 10今年夏天就可以发布了,除了界面和操作上的改进之外,Windows 10最让游戏玩家动心的部分莫过于DirectX 12(以下简称DX12)了,这是新一代的图形API规范,那么它到底能为我们带来什么样的变化呢?为了及早用上DX12,我们又该做些什么准备呢?

编辑:蓝色 王旭 美编:翁竹梅




DX12将带来3D游戏性能、画质上的提升


DX12的多GPU混合渲染演示


DX12可以分为三个层次


对于DX12,我们说起来并不算陌生,超能网前前后后曝光DX12消息的新闻和评测有几十篇了,大家对DX12相对DX11的性能提升印象很深刻吧,不过另一方面,DX12对我们来说还是“熟悉的陌生人”,我们了解其中的一部分,但是更多的人还没有最好迎接DX12的准备,今天这篇文章将详细介绍DX12到底带来了哪些变化,又有哪些显卡和平台将会支持DX12。

DX12带来的新变化

我们都知道微软会在今年的Windows 10系统带来DX12,也从之前超能网连篇累牍的报道与测试中知道了DX12改善了底层硬件效率,多线程支持更好,游戏性能更强。但大家对DX12的完整印象依然很模糊,它到底能为我们带来什么新变化,使用DX12 API的游戏会在画质、性能等方面有质的提升吗?

就像之前的DirectX规范一样,DX12实际上也可以分为多个功能不同的功能层(Feature Level),不过DX12这次还多了一个底层优化,所以DX12规范可以视作三个不同层级:

D3D 12 Low Level API:这部分实际上是见诸报道最多的一部分,DX12相比DX11性能大提升就是底层优化的功劳,这也是DX12最吸引人的一点,不论是对游戏开发者还是对游戏玩家来说都是如此。

底层优化部分包括Low Overhead(低开销)、更多的控制及异步计算(Async Compute)等多个部分,低开销类似AMD提出的Mantle优化,后者也是大幅改善了游戏的多线程效率,降低了驱动层开销,现在这部分已经可以使用3DMark的Driver Overhead做测试了,详情可以参考我们之前做过的两篇测试:

DX12 Feature Level 12_0:前面的底层优化部分实际上是帮助DX12打通了“经脉”,提高了开发者的潜力,但那些并不涉及具体的招式——Feature Level 12_0这部分开始涉及更新的3D渲染方法,包括平铺资源(Tiled Resoure)、归类UAV访问、无绑定(Bindless)等等,其中多项功能实际上DX11.1中就有了,不过DX11中多是T1级别的,现在的则是T2级别的。

DX12高级功能Feature Level 12_1:跟以往的DX11.1/11.2一样,DX12还有比Feature Level 12_0更高级的Feature Level 12_1功能,包括立体平铺资源(Volume Tiled Resources)、保守光栅(Conservative Rasterization)、光栅顺序视图(Raster Order Views)等,这些功能通常属于可选支持,但它们可以更好地提升开发者的效率或者游戏画质,同时对显卡的要求也更高。



DX12与Mantle到底带来多大提升?3DMark告诉你

在3DMark v1.5.884的版本中,Futuremark加入了新的API Overhead附加测试,这是一项对DX12、DX11、AMD Mantle API的性能差异性独立测试,这也是全球首款DX12性能测试工具。

Futuremark的文档中虽然叫API Overhead测试,但是3DMark软件里面是叫Driver Overhead测试,测试通过稳步增加绘制调用的方式来测试API的性能,过程中GPU可以轻松处理摄像绘图调用(Draw Call),但CPU会过载,测试所反馈的结果是在帧速率降低到30FPS之前每秒实现的最大绘制调用数量,分为单线程DX11、多线程DX11、Mantle、DX12四项。这项测试并不是给大家去衡量显卡性能的,仅是测试在同一套系统上使用不同API的性能差异,不适合用来对比不同硬件平台的绝对性能。

这项测试所计量的绘图调用(Draw Call)指令发生在CPU每次通知GPU在屏幕上绘制物体时,每一帧生成的画面通常需要几千次绘制调用,图形API所处理的每次绘图调用都会增加CPU的负担,随着绘图调用次数的增多,即使GPU还有余力干更多事情的时候,性能也会因CPU而受到限制,DX12与Mantle最大的优势就在于底层硬件优化了,减少了CPU负担,提升了多线程运行能力,DX12虽然在渲染流程上跟DX11相似,但每个线程的渲染时间大幅降低,明显改善了性能。

下面我们就来跑一下这项测试,测试平台使用Xeon E31230 v3处理器,双通道8GB内存,显卡分是GeForce GTX 960和Radeon R9 285,操作系统是Windows 10 Build 10056预览版,显卡驱动都更新到目前最新的版本。



先来看看AMD Radeon R9 285显卡的表现

Xeon E3-1230 v3处理器搭配Radeon R9 285显卡的话,DX11单线程跑出来的结果是992,463 Draw Calls/s,DX11多线程的结果是953,537 Draw Calls/s,使用Mantle API的结果是15,681,210 Draw Calls/s,而DX12的结果是16,993,474 Draw Calls/s,可以看到使用Mantle与DX12的话执行效率提升了非常的多,Mantle每秒最大绘制调用数量是DX11的15.8倍,而DX12的话更是高达17.1倍。

为什么效率提升了这么多?看看系统的负载就知道了,Mantle与DX12测时GPU负载都有差不多过半时间是满载的,而DX11测试大多数时间负载都非常低,软件并没有记录CPU的负载情况,不过从CPU的温度记录来看Mantle与DX12测时CPU的负载状况也是比DX11测时高的。



下面来看看NVIDIA GTX 960的结果

测试平台显卡换成了GeForce GTX 960,Mantle测试自然是无法经行,即使把选项勾上也只运行的DX11与DX12的测试,DX11单线程跑出来的结果是1,240,121 Draw Calls/s,DX11多线程的结果是2,206,859 Draw Calls/s,DX12的结果是10,301,382 Draw Calls/s。

R9 285在单线程DX11与多线程DX11的测试中两个测试结果是几乎一样的,而GTX 960则在开启多线程后性能提升了1.77倍,可以看得出NVIDIA显卡对目前的DX11优化明显比AMD的要好,但是DX12所带来的提升则没有AMD那么明显了,单线程DX11到DX12的提升只有8.3倍。

负载方面,GTX 960与R9 285其实差不多,使用DX11时大多数时间负载非常的低,而开启DX12后GPU过半时间在满载,可见DX12对硬件的利用率的确提高了不少,系统资源的利用率得到有效的提高,当然了这必然也也会带来温度与功耗上的提升。

3DMark的这项新测试可以让大家直观的看到使用Mantle与DX12 API会带来多大理论性能提升,当然了现在也只是一个预览,现在Windows 10还没有正式出来,显卡厂商对新系统与DX12的支持应该还没有做好,驱动上应该还有许多优化空间,另外这个测试的结果并不等于实际游戏性能表现,DX12到底能带来多大的实际提升还得对应的游戏出来后才能知道。

以上三部分是DX12规范的主要内容,但这些还不是DX12的全部功能,还记得之前曝光过的DX12黑科技——A、N显卡混合交火吗?微软确实在DX12中尝试了不同显卡的混搭技术,该技术名为Muti-Adapter(多显卡适配器),它就可以把不同架构的GPU联合起来渲染。

微软的Build大会上做过一个多显卡的演示,分别使用独显及独显+集显两种方式渲染635帧的UE引擎,其中独显渲染帧速35.9fps,支持Muti-Adapter的集显+独显平台成绩为39.7fps,小幅优势领先了独显平台。(提升不大的原因主要是独显与集显的性能差距通常很大,并行运算的时候不会有CF/SLI这样的接近2倍提升,之前Lucid的Virtu技术也是如此。)

Muti-Adapter技术另一个好处就是多卡下对GPU显存的利用率更高,以往不论是CF还是SLI技术,DX只能将其中一个显卡的显存存储数据,另一个显卡的显存就浪费了,比如GTX 980显卡双卡SLI时,其总的显存容量还是4GB,多卡互联时其GPU容量并不能翻倍。

现在有了Muti-Adapter技术,它就可以合并所有的显存而利用了,显存容量可以翻倍了。(微软的WDDM 2.0模型还支持了GPU虚拟内存,猜测跟这个也有关系)

总之,微软的DX12最重要的变化就是带来了底层硬件优化,它改善了多线程效率,降低了驱动开销,这对游戏玩家和开发者来说都是大有裨益的。3D渲染技术上DX12也有更新,而在多卡互联上,DX12有可能成为黑马,如果最终对AMD、NVIDIA及Intel核显异构运算支持到位,那么游戏玩家届时就不会受CF或者SLI的限制了。

对于DX12支持,我们之前听到的最多的就是AMD、NVIDIA各自宣称他们的GCN架构、Fermi及之后的架构都会支持DX12,Intel也是自第四代智能处理器、也就是Haswell开始的核显开始支持DX12。

这方面,AMD之前公布了具体的DX12兼容列表了,NVIDIA前不久也公布了自家的DX12兼容名单,不过NVIDAI还趁机“黑”了AMD一把,因为AMD的显卡目前并不完整支持DX12规范,但N家的GTX 980/980 Ti等GM2xx核心的GPU可以完整支持DX12_1。要知道在DX11时代,AMD的显卡能完整DX11.1及DX11.2规范,而NVIDIA的显卡只能支持到DX11.0,现在只能说是风水轮流转了。

AMD、NVIDIA、Intel三家厂商的GPU对DX12的详细支持规格可以参考上图,AMD的GCN 1.0架构(多数HD 7000及后来的马甲)只能支持兼容DX12、支持到Feature Level 11_1,HD 7790及R7 260/260X、R9 285等GCN新核心的显卡可以支持到Feature Level 12_0,但目前所有显卡都不能完整支持Feature Level 12_1功能。

NVIDIA方面,虽然Fermi及之后的显卡都可以兼容DX12,不过真要支持DX12功能还得看Maxwell架构,其中GM1xx第一代Maxwell架构的显卡可以支持到Feature Level 12_0,包括GTX 980/970/960/Titan X/980 Ti在内的第二代Maxwell架构则可以支持到Feature Level 12_1。

Intel方面,Haswell之后的核显都可以兼容DX12,但说到Feature Levei支持,Haswell及最新的Broadwell依然只能支持到Feature Level 11_1。

当然,事情也得分两面看,NVIDIA当年不能完全支持DX11.1,就说DX11.1是可选功能,实际影响不大,现在他们能完整支持DX12,就开始宣传DX12_1的好处,实际上DX12_1的3D功能也不会有什么质变,实际游戏中也难说能带来明显的体验差别,大家对这个问题还是淡定就好。

DX12平台及软件支持

迈过硬件支持这一关之后我们还要面临软件平台支持的问题,这会涉及到我们用的操作系统选择。

目前能确定支持DX12的系统就只有微软全力打造的Windows 10系统,以往期待的Windows 7支持DX12的美梦已经破灭了,不过微软多少也发了点善心——Windows 7/8/8.1用户可以免费升级Windows 10系统。

微软之所以如此决绝地让DX12成为Windows 10专属,除了保证Windows 10只许胜不许败的战略之外,还有一个因素不能忽略——Windows 10升级了WDDM 2.0显示驱动引擎,支持DX12必须先支持WDDM 2.0,Windows 7支持的还只是WDDM 1.1。

WDDM 2.0中最主要的变化是支持GPU虚拟显存寻址(GPU virtual memory),所有GPU物理内存都被抽象成虚拟内存,由GPU负责管理,每个步骤都可以有自己的虚拟内存。另一个新功能是驱动常驻(Driver residency),显存管理器会数据从命令缓冲器提交到驱动层之前所有分配空间都是常驻的,为此还增加了DDI设备驱动接口。

支持WDDM 2.0和Windows 10是支持DX12的一个前提,我们现在依然不能确定他们与DX12之间到底谁是因谁是果,但可以肯定的是微软只让Windows 10支持DX12更多地还是出于商业策略,Windows 7/8/8.1在技术上不见得就不能支持WDDM 2.0及DX12,现在我们能做的只能是祈祷Windows 10系统能跟Windows 7一样大获成功,成为游戏玩家的首选平台,不然以后可有得纠结了。

DX12给核显带来什么?

有了前面显卡方面的比较,相信肯定有不少读者想了解一下DX12能给整合平台带来多少增幅,接下来我们就看看核显的表现。在核显测试中,我们选用的CPU分别是Intel Core i3-4150与AMD A8-7650K,主板分别使用微星B85-G43 Gaming和A88XM Gaming,内存为芝奇RipjawsX DDR32133 4GB,运行在1600MHz,操作系统依然为Windows 10 Build 10056预览版,显卡驱动都更新到目前最新的版本。

从3DMark API Overhead的测试原理上来看,CPU与GPU的性能都会对这个测试的结果造成影响,算是对Core i3-4150与AMD A8-7650K综合能力的一个考验,当然了Futuremark也表示过这项测试并不是给大家去衡量显卡性能的,仅是测试在同一套系统上使用不同API的性能差异,不适合用来对比不同硬件平台的绝对性能,不过用来看看DX12会给这两颗带来多大提升还是可以的。

AMD A8-7650K的测试结果

AMD A8-7650K DX11单线程跑出来的结果是461,275 Draw Calls/s,DX11多线程的结果是389,330 Draw Calls/s,使用Mantle API的结果是2,293,737 Draw Calls/s,而DX12的结果是1,965,529 Draw Calls/s,使用Mantle时的效率比DX12还高,Mantle的每秒最大绘制调用数量是单线程DX11的4.97倍,DX12每秒最大绘制调用数量是单线程DX11的4.26倍。

上面的是测试时的负载状况,可以看到DX11测试时CPU基本上是在全速运行的,而GPU有不少的空闲时间,特别是单线程的时候,而改用Mantle与DX12时GPU基本上都处于满载状况,而CPU的负载则比DX11时闲不少,特别是DX12时CPU有差不多一半的时间在很低的频率运行,明显DX12在CPU的多核优化上做得更好了,工作更平均的划分给各个核心,这样APU才有机会用较低的频率完成更多的工作。



Intel Core i3-4150的测试结果

Intel Core i3-4150 DX11单线程跑出来的结果是423,065 Draw Calls/s,DX11多线程的结果是435,320 Draw Calls/s,而DX12的结果是1,125,297 Draw Calls/s,单线程DX11到DX12的提升只有2.6倍。

Core i3-4150的负载状况,DX11测试时CPU基本都是全速满载的,而GPU的负载则越来越低,测试过半后还开始降频了,使用DX12时CPU负载会慢慢增加,最终会全速运行,而GPU则基本是处于满载状态。


Widonws 10是目前唯一确定支持DX12的系统



支持DX12的引擎及游戏

有了DX12显卡和Windows 10平台,支持DX12还是只卖出第一步,这些内容相当于做饭的大厨和厨具,饭菜是否好好吃还得看食材——DX12游戏,这一项是目前进度最慢的,毕竟这是最顶层的,落后于硬件和系统平台是必然的,反过来说软硬件平台没准备好的话,DX12游戏也不可能运行起来。



小结

随着Windows 10而到来的DX12都会给GPU带来一定的提升,因为程序的运行效率变高了,但带来的提升幅度还得看显卡的架构。从API Overhead的测试结果来看,AMD可能会是DX12最大的受益者,CPU与GPU的有效利用率明显都上升了不少,DX12的多核优化明显更好,各核心的工作分配更平均,AMD处理器物理核心多的优势显露了出来。

不过到底是不是真的有效这还得看未来在实际运行DX12游戏时的情况,毕竟这只是一个API的运行效率测试,虽然不能代表实际游戏运行效能,但是我们也能从这里管中窥豹,提前感受到DX12的魅力。

DX12显卡兼容列表

巧妇难为无米之炊,不过在解决米之前我们得先解决做饭用锅问题——那些显卡才能支持DX12,或者说完整支持DX12,从前面的介绍来看,支持和完整支持还是有些不同的。


AMD显卡的DX12支持列表

 

Intel Security与VMware宣布联合推出集成解决方案

2015半年度浏览器横评

当平板电脑遇上传统教学

精彩绽放,画质非凡

第六代AMD APU——Carrizo技术详解

Adobe深耕移动办公领域 解决业务冗余和低效问题

相关文章