原出處:https://www.youtube.com/watch?v=nIoZB-cnjc0
中文翻譯整理:http://www.mykancolle.com/?post=1589
--
NerdTechGasm做了一期影片講述了GCN架構和NVIDIA從Fermi到現在Scheduler的變化
能夠很清楚的解釋為什麼當前GCN的A卡在DX11下性能不及N卡,以及為何DX12下A卡發揮更
好,而N卡CPU佔用率高
典型的DX11遊戲中,Draw Call全在主執行緒上,瓶頸比較嚴重
http://i.imgur.com/kJHAnAH.jpg
使用Command Lists時,將Draw Call打包分給其他核心處理後再交給主執行緒,一定程度
上緩解瓶頸
但並沒有完全解決問題,因為有硬體瓶頸在。
http://i.imgur.com/W5SyD0o.jpg
而NV的DX11驅動永遠都是多執行緒的
通過CMDList “Server”進程實現,“Server”進程監控Draw Call,攔截D raw Call後
分給各個執行緒
這個解決方法很好。
驅動是從AMD開始在BF4上試水Mantle後出來的。
http://i.imgur.com/KQHeT6C.jpg
新的DX11“多執行緒”驅動使得N卡受CPU單執行緒的瓶頸影響小了很多
只能用到1-2個執行緒的優化很差的遊戲突然在N卡上跑的快了很多,同時導致非常吃CPU
的PhysX在N卡上變得幾乎沒有負面影響。
http://i.imgur.com/zPTe8PG.jpg
這也是為什麼N卡在DX11上佔優的原因。
http://i.imgur.com/5IvYekM.png
http://i.imgur.com/Vtj00wx.png
http://i.imgur.com/QocCJxr.png
Draw Call提交到GPU後,調度器決定如何把工作分配給CU/SMX
然後通過HW Warp Scheduler分配給SP/CUDA核心
之前在Fermi上,NVIDIA設計了一個很強大的HWS-GigaThread Engine,類似於目前GCN的
HWS
http://i.imgur.com/h2Dggnk.png
Fermi因為功耗太高被稱為核彈
為了提升能效,在Kepler上NV砍掉和簡化了很多東西,其中就包括HWS,改為軟體,也就
是驅動來進行的SWS。
http://i.imgur.com/Kq7zjHs.png
NV的調度器是基於軟體的,也就是驅動程序。它可以接受許多CMDList,甚至是比較大的
那種,因為它們在執行前都被快取了。
驅動程序確定了工作如何分配到每個SMX。
所以在遊戲時N卡的CPU佔用率會比A卡高不少。
AMD GCN上使用的則是硬體調度器HWS,驅動不負責分配工作,直接交給GPU,然後由HWS決
定工作分配。
設計上HWS更依賴於即時的內容,也就是要保持持續的Draw Call一直進入,而不是
CMDList這種必須打包後分發的龐然大物。
GCN的HWS缺乏妥善支持CMDList的快取/機制。
http://i.imgur.com/3gTBOJK.jpg
如果直接將CMDList送到AMD GPU,驅動就需要重新處理,這會浪費CPU資源。
Polaris的HWS可以快取一點點,主進程瓶頸比之前幾代GCN稍有改善。
http://i.imgur.com/sHyZ5sq.jpg
DX11下對A卡來說最理想的情況,將游戲邏輯(AI、物理、音效等)盡量分配到其他的執
行緒,緩解主執行緒的瓶頸
http://i.imgur.com/qGpvSka.jpg
在DX11下,多執行緒優化良好的遊戲中的情況
http://i.imgur.com/JmkOQX1.jpg
而DX12和Vulkan等low-level API就不一樣了
DX12和Vulkan可以真正完全利用到GCN的HWS的優勢,主執行緒的瓶頸大大降低。
http://i.imgur.com/y1nKUkS.jpg
當然,在N卡上由於沒有HWS,就由驅動來承擔。
並行執行緒越多,合併、優化、分發等工作對於N卡的SWS就越困難。
對於軟體工程師來,說想在DX12上實現NV在DX11上一樣的效率就非常需要技巧。
在3DMark API overhead測試裡的結果並不能直接體現遊戲中的情況,因為真正的遊戲遠
比測試複雜得多。
3DMark測的只是理論上的,在現實中永遠不會出現的場景。
http://i.imgur.com/hJMq4R4.jpg
事先說明,N卡依然能在DX12和Vulkan中獲得性能提升。
只是需要遊戲開發者的大量經驗和調整
比如id Software開發的Doom,採用了Vulkan並且實現了非常高的效率 (可以說是目前優
化的標杆...)
http://i.imgur.com/TxrEvcJ.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上提供了更好的性能。
http://i.imgur.com/tePGbn5.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來說,即便是多執行緒優化良好
的遊戲裡也會成為主要瓶頸。
http://i.imgur.com/Rqx0jIw.jpg
--
中文翻譯整理:http://www.mykancolle.com/?post=1589
--
NerdTechGasm做了一期影片講述了GCN架構和NVIDIA從Fermi到現在Scheduler的變化
能夠很清楚的解釋為什麼當前GCN的A卡在DX11下性能不及N卡,以及為何DX12下A卡發揮更
好,而N卡CPU佔用率高
典型的DX11遊戲中,Draw Call全在主執行緒上,瓶頸比較嚴重
http://i.imgur.com/kJHAnAH.jpg
使用Command Lists時,將Draw Call打包分給其他核心處理後再交給主執行緒,一定程度
上緩解瓶頸
但並沒有完全解決問題,因為有硬體瓶頸在。
http://i.imgur.com/W5SyD0o.jpg
而NV的DX11驅動永遠都是多執行緒的
通過CMDList “Server”進程實現,“Server”進程監控Draw Call,攔截D raw Call後
分給各個執行緒
這個解決方法很好。
驅動是從AMD開始在BF4上試水Mantle後出來的。
http://i.imgur.com/KQHeT6C.jpg
新的DX11“多執行緒”驅動使得N卡受CPU單執行緒的瓶頸影響小了很多
只能用到1-2個執行緒的優化很差的遊戲突然在N卡上跑的快了很多,同時導致非常吃CPU
的PhysX在N卡上變得幾乎沒有負面影響。
http://i.imgur.com/zPTe8PG.jpg
這也是為什麼N卡在DX11上佔優的原因。
http://i.imgur.com/5IvYekM.png
http://i.imgur.com/Vtj00wx.png
http://i.imgur.com/QocCJxr.png
Draw Call提交到GPU後,調度器決定如何把工作分配給CU/SMX
然後通過HW Warp Scheduler分配給SP/CUDA核心
之前在Fermi上,NVIDIA設計了一個很強大的HWS-GigaThread Engine,類似於目前GCN的
HWS
http://i.imgur.com/h2Dggnk.png
Fermi因為功耗太高被稱為核彈
為了提升能效,在Kepler上NV砍掉和簡化了很多東西,其中就包括HWS,改為軟體,也就
是驅動來進行的SWS。
http://i.imgur.com/Kq7zjHs.png
NV的調度器是基於軟體的,也就是驅動程序。它可以接受許多CMDList,甚至是比較大的
那種,因為它們在執行前都被快取了。
驅動程序確定了工作如何分配到每個SMX。
所以在遊戲時N卡的CPU佔用率會比A卡高不少。
AMD GCN上使用的則是硬體調度器HWS,驅動不負責分配工作,直接交給GPU,然後由HWS決
定工作分配。
設計上HWS更依賴於即時的內容,也就是要保持持續的Draw Call一直進入,而不是
CMDList這種必須打包後分發的龐然大物。
GCN的HWS缺乏妥善支持CMDList的快取/機制。
http://i.imgur.com/3gTBOJK.jpg
如果直接將CMDList送到AMD GPU,驅動就需要重新處理,這會浪費CPU資源。
Polaris的HWS可以快取一點點,主進程瓶頸比之前幾代GCN稍有改善。
http://i.imgur.com/sHyZ5sq.jpg
DX11下對A卡來說最理想的情況,將游戲邏輯(AI、物理、音效等)盡量分配到其他的執
行緒,緩解主執行緒的瓶頸
http://i.imgur.com/qGpvSka.jpg
在DX11下,多執行緒優化良好的遊戲中的情況
http://i.imgur.com/JmkOQX1.jpg
而DX12和Vulkan等low-level API就不一樣了
DX12和Vulkan可以真正完全利用到GCN的HWS的優勢,主執行緒的瓶頸大大降低。
http://i.imgur.com/y1nKUkS.jpg
當然,在N卡上由於沒有HWS,就由驅動來承擔。
並行執行緒越多,合併、優化、分發等工作對於N卡的SWS就越困難。
對於軟體工程師來,說想在DX12上實現NV在DX11上一樣的效率就非常需要技巧。
在3DMark API overhead測試裡的結果並不能直接體現遊戲中的情況,因為真正的遊戲遠
比測試複雜得多。
3DMark測的只是理論上的,在現實中永遠不會出現的場景。
http://i.imgur.com/hJMq4R4.jpg
事先說明,N卡依然能在DX12和Vulkan中獲得性能提升。
只是需要遊戲開發者的大量經驗和調整
比如id Software開發的Doom,採用了Vulkan並且實現了非常高的效率 (可以說是目前優
化的標杆...)
http://i.imgur.com/TxrEvcJ.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上提供了更好的性能。
http://i.imgur.com/tePGbn5.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來說,即便是多執行緒優化良好
的遊戲裡也會成為主要瓶頸。
http://i.imgur.com/Rqx0jIw.jpg
--
All Comments