在Windows 10 Version 2004中,开发团队给系统新增了一个名为“硬件加速GPU计划”的选项,它隐藏在“显示设置-图形设置”中,作为一个实验性的选项提供。对于这个选项,微软官方在之前并没有做太多的解释,我们也就是道听途说认为它可以减低显示延迟什么什么的。
在上个月末,终于有官方人员对这个选项进行了完整的解释,本文就根据官方的这篇博文,讲讲这个全新的硬件加速GPU计划选项的具体工作原理和作用,并整合了多家媒体的测试数据,看看它起的作用大小。
“硬件加速GPU计划”
官方把Hardware-accelerated GPU scheduling这个词翻译成了硬件加速GPU计划,实际上在这里scheduling翻成“调度”能够让更多人明白它的意思,这也是比较有微软风味的翻译了。
回归正题,要说到GPU调度管理,我们就先要了解一下WDDM GPU调度器是什么。
WDDM GPU调度器与命令缓冲队列
从NT 6开始,微软给Windows引入了一套新的显示驱动模型,也就是我们现在所熟知的Windows Display Driver Model,简称WDDM。在WDDM出现之前,应用程序可以直接把任务提交到GPU,当时系统只有一个全局的任务队列,严格按照先到先执行的原则进行任务的调度。鉴于当时用到GPU的场景基本上就是全屏游戏或者专业用途的渲染什么的,这种方案也没出什么问题,被沿用了很多年。
现在很多程序都会调用GPU
到了应用程序开始普遍利用GPU加速的年代,比如说Windows要直接用GPU加速整个UI界面的渲染了,那么再用这个全局任务队列就会有问题,比如渲染系统界面的任务前面排了一个其他程序提交的任务,那么GPU会先处理掉那个任务再回头来处理系统的需求,这会造成整个系统UI的卡顿。为了妥善地安排GPU工作的优先级,势必需要一个新的任务调度器,由它负责安排GPU任务的工作优先级。
那么WDDM就引入了那么一个任务调度器,它以高优先级线程的形式一直运行在CPU上,负责协调、优先处理和调度各种应用程序提交的工作。从Vista上面的WDDM 1.0到Windows 10 Version 2004的WDDM 2.7,官方一直都在加强这个调度器的功能。但这种管理方式存在有一定的限制,主要体现在提交会有额外开销和任务达到GPU有一定的延迟时间,不过这些限制在实际中都被传统图形应用的渲染缓冲队列给掩盖了。
缓冲用来存放提前准备好的渲染命令等等内容,在GPU渲染当前帧的时候,CPU已经在准备下一帧、下下帧乃至之后的更多帧数了。这种方式能够保证CPU与GPU之间的良好执行并行性,也可降低整体的性能开销,是现在很常见的GPU调用方式。同时为了降低频率提交渲染命令带来的额外性能开销,一般应用程序会提前准备好多帧的内容一起发送到队列中。这里产生了问题,缓冲的帧数越多,用户能够感受到的延迟越高。
题外话,NVIDIA和AMD两家在去年都已经在驱动层面提供了对缓冲队列深度的控制,通过降低缓冲队列的帧数来实现降低延迟这一目的。
但如果想减少缓冲队列的深度来降低延迟,又会造成提交开销增加,影响到性能。这两者之间是一个权衡关系,程序可能以更高的频率每次提交更少的帧数来降低延迟,又可能以较低的频率每次提交更多的帧数来减少额外的调度、提交开销。所以,微软决定修改其显示驱动模型的基础架构,引入了“硬件加速GPU计划”。
把任务调度交给专用硬件
Windows 10 Version 2004中引入的新选项就是允许系统将绝大多数的调度任务交由GPU专有的硬件调度器去做,Windows将继续控制程序调用GPU的优先级,但高频任务将会交由GPU的调度处理器进行管理,它负责各种GPU引擎的量子管理和上下文切换。
在NVIDIA的官方说法中,新的选项就是允许GPU直接管理它自有的内存,也就是显存,在此之前,显存是交给系统来管理的。
要启用这个新调度方式有两个先决条件,一个是需要硬件支持:它需要GPU自身有专有的处理调度任务的硬件模块,另一个是驱动支持:系统需要一个符合WDDM 2.7标准的显示驱动。当你的驱动和硬件都支持时,系统设置里才会出现这一选项。另外,引入新的调度方式对驱动模型有一个重大且根本性的改变,在某些时候、某些场景下它可能会产生不可知的效果,因此微软将其作为一个实验性的选项,默认情况下是关闭掉的。目前开发团队还在比较两种调度器之间的性能差异,同时也在监控新调度器的可靠性,未来这个选项可能会在支持的硬件上变为默认开启状态。
目前支持这一特性的GPU有NVIDIA的Pascal GPU和Turing GPU、AMD的RDNA GPU,Intel那边的情况不明。
实际测试:对高端平台影响不大
好了,说了那么多,我们还是来看看这项功能在实际中的表现吧,我们找来了Tom's Hardware和Wccftech两家媒体的测试数据(以下图片来自于Tom's Hardware和Wccftech)。
Tom's Hardware这边使用了三套测试平台,分别是Core i9-9900K+RTX 2080 Ti、Ryzen 9 3900X+RTX 2080 Ti和Core i9-9900K+GTX 1050。从五款游戏的测试结果来看,基本上没有用户可感知的区别。
Wccftech选择了Core i9-9900K+RTX 2080 Ti/GTX 1650 SUPER这样两套平台,在RTX 2080 Ti上面启用硬件调度的性能变化并不明显,但是在GTX 1650 SUPER这样一张主流级显卡上面则是出现了明显的提升。其原因,如果按照NVIDIA方面的说法来解释,那就是由GPU直接管理显存在效率上带来了一定的提升。也许,这项功能会为很多主流级平台带来可观的免费性能增幅,而对高端平台来说,影响是微乎其微的。
总结:仍需时日完善的好技术
所以,“硬件加速GPU计划”实质上是一项对Windows图形架构影响较大的新技术,它需要新硬件和新驱动的支持才能够实现,能够为平台带来一定的性能提升。但目前它仍然处于测试状态,GPU厂对它的支持仍然算是刚刚可以用的状态,还需要官方进一步的优化和完善它。这也是微软为次世代图形应用对系统做出的改变,为了尽可能的降低延迟,让系统跟上时代的发展。它是一项好技术,但仍然还有很长的一段路要走。