02ca269162fe3656588bcebaecdec14d 非同步著色器近期因為首款採用 DirectX 12 的遊戲「奇點灰燼」測試版,在 2 家獨立顯示卡晶片設計開發商 AMD NVIDIA 之間的測試結果相差甚異,加上遊戲開發商說出  NVIDIA 硬體不支援的一席話,掀起一陣波瀾。究竟非同步著色器是什麼東西,為何在 DirectX 12 裡面如此重要?

DirectX 12 主要有 2 項重大改進,其一主要用於處理器與驅動程式,DirectX 12 能夠將起始繪圖任務控制權從驅動程式移交給一般程式,讓遊戲開發者能夠更好的控制運算資源。其二則是繪圖處理器工作流程改進,非同步著色器(asynchronous shaders)可改善過去單一時間僅能處理單一工作,讓繪圖處理器各個硬體線路負擔不同的工作。


▲Matthäus Chajdas 解釋 DirectX 12 將帶來何種運算工作流程改變。

以上影片為 DirectX 12 對於繪圖流程的改變,觀看簡報圖片足以了解大致上的影響。如果依然不清楚,請搭配服用筆者接下來的文字說明,將著重於解釋非同步著色器的原理。

在 DirectX 11 以前(包含 DirectX 11),繪圖處理器的每個時間時槽,僅能處理 1 件任務,譬如將貼圖紋理資料載入至顯示卡記憶體、運算物體特效、畫面後處理等,這些工作都必須一樣一樣的依序執行。

這種依序工作有個缺點,無法完整地利用繪圖處理器內部所有的硬體線路,譬如更新紋理資料只需記憶體控制器相關硬體進行工作,物理特效則是由運算單元進行,畫面後處理主要是光柵單元的工作。雖然說目前繪圖處理器均導入省電機制,沒有工作或是工作負擔很低的硬體線路,都會將其關閉或降低運作時脈,但並無法提升效能。

導入非同步著色器之後,原本繪圖處理器空閒的硬體線路,能夠額外塞進不同的工作,也就是同一時間內將可進行不同的工作。更新貼圖紋理資料、物理運算、畫面後處理,能夠同時交付繪圖處理器進行運算。除了 DirectX 12 以外,Vulkan API 也會導入此種機制。


▲多項工作同時進行代表工作延遲降低,或是效能提升。

這概念有點類似於處理器的亂序執行或超執行緒,x86 指令解碼成微指令之後,進入亂序執行緩衝區等待,一旦核心內部各種執行單元,如整數、浮點數、記憶體存取等單元有空閒,就會將適合的微指令發送給執行單元,盡量填滿各個執行單元的工作。

不過筆者認為近日 AMD 和 NVIDIA 的爭議僅是行銷口水戰,等到真的能夠完整利用 DirectX 12 的遊戲正式推出,再來比較 2 家效能也不遲。說不定等到遊戲正式推出,目前雙方頂級顯卡均無法於 60FPS 門檻順暢執行,更遑論電腦螢幕正朝向超越 1920 x 1080 解析度的方向邁進。

延伸閱讀

DirectX 11.2 三大新功能上陣,Mantle 榨乾硬體潛能

放下自家的Mantle API,AMD表示DirectX 12 功力更棒

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則