超能网|有问有答:什么是硬件加速GPU计划?它有多大的用处?


在Windows 10 Version 2004中 , 开发团队给系统新增了一个名为“硬件加速GPU计划”的选项 , 它隐藏在“显示设置-图形设置”中 , 作为一个实验性的选项提供 。 对于这个选项 , 微软官方在之前并没有做太多的解释 , 我们也就是道听途说认为它可以减低显示延迟什么什么的 。 在上个月末 , 终于有官方人员对这个选项进行了完整的解释 , 本文就根据官方的这篇博文 , 讲讲这个全新的硬件加速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到了应用程序开始普遍利用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调用方式 。 同时为了降低频率提交渲染命令带来的额外性能开销 , 一般应用程序会提前准备好多帧的内容一起发送到队列中 。 这里产生了问题 , 缓冲的帧数越多 , 用户能够感受到的延迟越高 。
超能网|有问有答:什么是硬件加速GPU计划?它有多大的用处?
本文插图
题外话 , NVIDIA和AMD两家在去年都已经在驱动层面提供了对缓冲队列深度的控制 , 通过降低缓冲队列的帧数来实现降低延迟这一目的 。 但如果想减少缓冲队列的深度来降低延迟 , 又会造成提交开销增加 , 影响到性能 。 这两者之间是一个权衡关系 , 程序可能以更高的频率每次提交更少的帧数来降低延迟 , 又可能以较低的频率每次提交更多的帧数来减少额外的调度、提交开销 。 所以 , 微软决定修改其显示驱动模型的基础架构 , 引入了“硬件加速GPU计划” 。


推荐阅读