数码科技

【AMD/NVIDIA】HWS vs SWS: 谁是赢家?

NerdTechGasm做了一期视频讲述了GCN架构和NVIDIA从Fermi到现在Scheduler的变化

能够很清楚的解释为什么当前GCN的A卡在DX11下性能不及N卡,以及为何DX12下A卡发挥更好,而N卡CPU占用率高(偷U)

典型的DX11游戏中,Draw Call全在主线程上,瓶颈比较严重

img002.jpg

使用Command Lists/CMDList时,将Draw Call打包分给其他核心处理后再交给主线程,一定程度上缓解瓶颈

但并没有完全解决问题,因为有硬件瓶颈在。

img004.jpg

NV的DX11驱动永远都是多线程的

通过上面的CMDList “Server”进程实现,“Server”进程监控Draw Call,拦截Draw Call后分给各个线程

这个解决方法很好。

驱动是从AMD开始在BF4上试水Mantle之后出来的。

img005.jpg

新的DX11“多线程”驱动使得N卡受CPU单线程的瓶颈影响小了很多

只能用到1-2个线程的优化很差的游戏突然在N卡上跑的快了很多,同时导致非常吃CPU的PhysX在N卡上变得几乎没有负面影响。

img006.jpg

这也是为什么N卡在DX11上占优的原因。

img003.png

img004.png

img005.png


Draw Call提交到GPU后,调度器决定如何把工作分配给CU/SMX

然后通过HW Warp Scheduler分配给SP/CUDA核心

之前在Fermi上,NVIDIA设计了一个很强大的HWS-GigaThread Engine,类似于目前GCN的HWS

img002.png

Fermi因为功耗太高被称为核弹

为了提升能效,在Kepler上NV砍掉和简化了很多东西,其中就包括HWS,改为软件,也就是驱动来进行的SWS。


img003.png


NV的调度器是基于软件的,也就是驱动程序。它可以接受许多CMDList,甚至是比较大的那种,因为它们在执行前都被缓存了。

驱动程序确定了工作如何分配到每个SMX。

所以在游戏时N卡的CPU占用率会比A卡高不少,也就是偷U

AMD GCN上使用的则是硬件调度器HWS,驱动不负责分配工作,直接交给GPU,然后由HWS决定工作分配。

设计上HWS更依赖于即时的内容,也就是要保持持续的Draw Call一直进入,而不是CMDList这种必须打包后分发的庞然大物。

GCN的HWS缺乏妥善支持CMDList的缓存/机制。

img004.jpg

如果直接将CMDList送到AMD GPU,驱动就需要重新处理,这会浪费CPU资源。

Polaris的HWS可以缓存一点点,主进程瓶颈比之前几代GCN稍有改善。


img007.jpg

DX11下对A卡来说最理想的情况,将游戏逻辑(AI、物理、音效等)尽量分配到其他的线程,缓解主线程的瓶颈

img008.jpg

在DX11下,多线程优化良好的游戏中的情况

img009.jpg

而DX12和Vulkan等low-level API就不一样了

DX12和Vulkan可以真正完全利用到GCN的HWS的优势,主线程的瓶颈大大降低。

img011.jpg

当然,在N卡上由于没有HWS,就由驱动来承担。

并行线程越多,合并、优化、分发等工作对于N卡的SWS就越困难。

对于软件工程师来,说想在DX12上实现NV在DX11上一样的效率就非常需要技巧。

在3DMark API overhead测试里的结果并不能直接体现游戏中的情况,因为真正的游戏远比测试复杂得多。

3DMark测的只是理论上的,在现实中永远不会出现的场景。

img013.jpg

事先说明,N卡依然能在DX12和Vulkan中获得性能提升。

只是需要游戏开发者的大量经验和调整

比如id Software开发的Doom,采用了Vulkan并且实现了非常高的效率(可以说是目前优化的标杆…

img014.jpg

那么硬件和软件哪个更好?很明显,目前NVIDIA是赢家。

AMD的赌注是DX12以及Vulkan的快速普及,因为DX11可能很快就会达到瓶颈,开发者就会转向下一代API

但DX11的生命周期要长于预期。

就算是现在,很多游戏依然只集中使用1-2个线程,对剩下的线程利用不多。

在这种情况下,NV的DX11驱动就能将Draw Call分配给其他空闲CPU资源,增加Draw Call吞吐量。

真正很好地优化了多线程的游戏很少,大多都是主机移植的。

N卡的SWS带来的额外CPU overhead虽然会带来一点负面影响,这也能被更快更多的CPU核心/线程抵消。

在主要利用一个线程的游戏中,N卡会有巨大优势

而对于A卡,GCN架构会被主线程的瓶颈严重影响。

所以目前来说NV的SWS更优,在正确的时间点 – DX11上提供了更好的性能。

img015.jpg

而AMD更需要DX12和Vulkan的普及,也需要游戏引擎改进对多线程的优化,特别是现在有了Ryzen CPU。

主机上八核的优化优势还会继续下去。

而NV更有$,只要肯给工作室砸钱,就可以决定游戏在PC上如何优化。

在这方面AMD缺乏竞争资源,工程师更少,能赞助给工作室的钱也更少。

同时AMD也必须在硬件设计上更灵活一些,以对抗NV的策略。

Polaris上的Discard Accelerator就是这样的设计,抵消了x32/x64曲面细分的瓶颈。【很多游戏,比如孤岛危机2中就用了非常大量且毫无必要的曲面细分(故意的),A卡性能受到很大影响】

改进的HWS和整数预取也对减轻主线程瓶颈有帮助。

Vega将会大幅改善HWS和效率,因为DX11还将维持很长时间。

游戏将会变得越来越复杂,DX11 Draw Call瓶颈对于AMD来说,即便是多线程优化良好的游戏里也会成为主要瓶颈。

img001.jpg

来源:https://youtu.be/nIoZB-cnjc0,本站整理翻译,转载请注明出处。

剧毒术士马文

留学中 Comp.Arch|RISCV|HPC|FPGA 最近沉迷明日方舟日服 联系方式请 discord 或者 weibo 私信。目前不在其他平台活动。 邮箱已更新为[email protected]。 看板娘:ほし先生♥

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部按钮