异步着色器!AMD 大杀招

0

AMD 一直在和微软为着新的 DX12 API 的到来努力奋斗,同时时不时出来嘚瑟下自己的显卡对于新特性的支持有多么好。比如说传说中的“异步着色器”,就是和以前图形 API 不同的一种队列处理方式,貌似效率要高很多哦。

在 DX11 时代,同步任务序列主要有两种方式:多线程图形处理以及带有 PreEmption 和优先级的多线程图形处理,各自有不同的优缺点。

继续之前,我们得先搞明白几个概念。GPU 的着色器是用来画图、计算游戏物理、后期处理以及其它的,通过被指派任务做到以上几点。这些任务通过命令流进行传输,而这个任务队列就是通过着色器来得到执行。命令流通过融合单一命令队列生成,含有多重任务以及任务之间的空闲。

这些队列中的空闲之所以存在是因为单一队列中的任务并非是多线程图形处理器一一按顺序生成的;一个队列中的任务往往只在另一个队列中的某个任务完成后才生成。由于这些空闲的存在,着色器的效用并不能最大化。

总的来讲,有三种命令队列:图形队列、计算队列以及复制队列。

asynchronous-shaders1

描述同步多线程图形处理是如何工作的最简单方式就是:命令队列通过时间区间内交换来进行结合 – 一个队列进入主命令流一段时间之后,切换到另一个队列,然后再是下一个队列。这样,上面提到的空闲一直会在中央命令队列中存在,意味着 GPU 永远不能达到100%的满载程度。不仅如此,当一个紧要任务过来时,它必须通过进入命令队列并等待其它命令队列完成后,才能被执行。比较形象的方式就是通过红绿灯来让多条通路融成一条主干道。

asynchronous-shaders2

这个问题,导致了一种解决方式 – PreEmption 和优先级别的诞生,基本工作方式和上面完全一致,除了增加了紧急任务的优先级。而且,中央命令队列可以被暂停,来让紧要任务以最低延迟被完成。当然,这会导致其它所有任务被暂停,有的时候会造成一些表现问题。而且,任务之间空闲的问题并没有被解决,意味着还是有很大的提升空间。你还是可以以上面交通疏导的方式来理解它,不过加了个“领导人过来大家都得让路”的情景。

asynchronous-shaders3

但在 DX12 中,一种新的融合方式叫做异步着色器,基本上就是异步多线程图形处理加上 PreEmption 以及优先级。在这里,基于AMD GCN 架构的 GPU 上的异步着色引擎会为任务排好序,用另一个队列中的任务来填补当前队列中的空隙,类似与融合到一个单线的高速公路上。同时它还是能让主任务队列暂停来让优先任务先行通过。这样得到的性能增加也就不言自明了。

在 AMD GCN 构架的 GPU 里,每个 ACE 能处理最高8个队列,每个 ACE 也能处理自己下面的着色器。最基本的 GPU 有两个 ACE,而高端产品则有八个。

asynchronous-shaders4

具体数字的话,比方说让 AMD 执行 LiquidVR SDK 的样本,在异步着色器以及后处理关闭的情况下帧率是 245FPS,而当后处理打开后,帧率降到 158,但同时打开异步着色器和后处理,帧数是 230,基本上回到原来的水平。当然,这是理想化的情况,不过这也意味着你基本不用额外开销就得到了后处理的特效。

而目前,在 PS4 上已经有『战地4』、『声名狼藉: 私生子』、『明日之子』,PC 上有基于 Mantle 的『神偷』都采用了异步着色器来增加表现。

asynchronous-shaders5

无论怎样,异步着色器最让人感兴趣的原因就是性能表现的提升。它们将确保 GPU 的所有空闲都被填满,而且这种方式也能让延迟得到极大改善。这种增加的并行处理能力让每一帧到达屏幕的速度更快,对 VR 这类应用尤其关键。

由于虚拟现实需要更高的分辨率才能达到基本舒适的体验,同时要更高的帧率才能减少头痛,最低化恶心,增加沉浸感,我们现在对于 GPU 性能的需求上了一个大台阶。目前阶段,仅仅增加性能是不够的,我们还需要让它们的效率也更高。

这都只是 AMD 的功劳吗?不一定,它们正和微软合作,争取最优的支持。在简报中,发言人提及目前竞争对手并没有关于对这方面支持的任何消息,但我们也知道 nVidia 一向对未发布的产品高度保密。我们也要注意的另一点是,异步着色器并不仅仅针对 DX12,它也将会成为 Vulkan API 以及 LiquidVR 中的一部分,当然也是这一切的始祖 – AMD Mantle 的一部分。

不过也许这么多,你都看不懂……但是这个视频说不定就深入浅出了!!


Source: Tom’sHardware, WccfTech

LEAVE A REPLY

Please enter your comment!
Please enter your name here