【AMD/NVIDIA】HWS vs SWS: 谁是赢家?
NerdTechGasm做了一期视频讲述了GCN架构和NVIDIA从Fermi到现在Scheduler的变化
能够很清楚的解释为什么当前GCN的A卡在DX11下性能不及N卡,以及为何DX12下A卡发挥更好,而N卡CPU占用率高(偷U)
典型的DX11游戏中,Draw Call全在主线程上,瓶颈比较严重
使用Command Lists/CMDList时,将Draw Call打包分给其他核心处理后再交给主线程,一定程度上缓解瓶颈
但并没有完全解决问题,因为有硬件瓶颈在。
NV的DX11驱动永远都是多线程的
通过上面的CMDList “Server”进程实现,“Server”进程监控Draw Call,拦截Draw Call后分给各个线程
这个解决方法很好。
驱动是从AMD开始在BF4上试水Mantle之后出来的。
新的DX11“多线程”驱动使得N卡受CPU单线程的瓶颈影响小了很多
只能用到1-2个线程的优化很差的游戏突然在N卡上跑的快了很多,同时导致非常吃CPU的PhysX在N卡上变得几乎没有负面影响。
这也是为什么N卡在DX11上占优的原因。
Draw Call提交到GPU后,调度器决定如何把工作分配给CU/SMX
然后通过HW Warp Scheduler分配给SP/CUDA核心
之前在Fermi上,NVIDIA设计了一个很强大的HWS-GigaThread Engine,类似于目前GCN的HWS
Fermi因为功耗太高被称为核弹
为了提升能效,在Kepler上NV砍掉和简化了很多东西,其中就包括HWS,改为软件,也就是驱动来进行的SWS。
NV的调度器是基于软件的,也就是驱动程序。它可以接受许多CMDList,甚至是比较大的那种,因为它们在执行前都被缓存了。
驱动程序确定了工作如何分配到每个SMX。
所以在游戏时N卡的CPU占用率会比A卡高不少,也就是偷U
AMD GCN上使用的则是硬件调度器HWS,驱动不负责分配工作,直接交给GPU,然后由HWS决定工作分配。
设计上HWS更依赖于即时的内容,也就是要保持持续的Draw Call一直进入,而不是CMDList这种必须打包后分发的庞然大物。
GCN的HWS缺乏妥善支持CMDList的缓存/机制。
如果直接将CMDList送到AMD GPU,驱动就需要重新处理,这会浪费CPU资源。
Polaris的HWS可以缓存一点点,主进程瓶颈比之前几代GCN稍有改善。
DX11下对A卡来说最理想的情况,将游戏逻辑(AI、物理、音效等)尽量分配到其他的线程,缓解主线程的瓶颈
在DX11下,多线程优化良好的游戏中的情况
而DX12和Vulkan等low-level API就不一样了
DX12和Vulkan可以真正完全利用到GCN的HWS的优势,主线程的瓶颈大大降低。
当然,在N卡上由于没有HWS,就由驱动来承担。
并行线程越多,合并、优化、分发等工作对于N卡的SWS就越困难。
对于软件工程师来,说想在DX12上实现NV在DX11上一样的效率就非常需要技巧。
在3DMark API overhead测试里的结果并不能直接体现游戏中的情况,因为真正的游戏远比测试复杂得多。
3DMark测的只是理论上的,在现实中永远不会出现的场景。
事先说明,N卡依然能在DX12和Vulkan中获得性能提升。
只是需要游戏开发者的大量经验和调整
比如id Software开发的Doom,采用了Vulkan并且实现了非常高的效率(可以说是目前优化的标杆…)
那么硬件和软件哪个更好?很明显,目前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上提供了更好的性能。
而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来说,即便是多线程优化良好的游戏里也会成为主要瓶颈。
来源:https://youtu.be/nIoZB-cnjc0,本站整理翻译,转载请注明出处。