微軟計劃在3D圖形程式開發介面D3D12加入工作圖(Work Graphs),微軟提到,這項功能可解除目前GPU程式開發模型中的限制,讓GPU通用運算能夠處理更多的工作負載,更廣泛地被應用。AMD、Nvidia、英特爾和高通四大晶片廠商都參與工作圖的設計。

不少的GPU工作負載,由之前其他GPU的工作所衍伸,傳統上,當GPU工作負載的行為,需要根據之前的GPU運算結果決定,則系統還是必須先將GPU運算結果回傳CPU,交由CPU解讀之後重新發派工作給GPU。

像是Epic Games所開發的虛幻引擎5,裡面所提供的兩項新技術,虛擬化幾何技術Nanite以及全局光照解決方案Lumen,就因為傳統CPU與GPU架構的限制,使得當前運算著色器範式已經碰觸到架構的極限,因為Nanite和Lumen所使用的範式,需要由CPU發出一系列獨立的調度。

雖然這種模式在多種情況運作良好,但是卻會增加GPU和CPU之間的通訊開銷,且在等待CPU的時間,GPU可能出現閒置,因此如果存在一個機制可以直接由GPU重新發派工作,那運算將會更有效率,也能最大化GPU的利用率。這樣的概念之前在D3D12就已經被使用過,一個稱為ExecuteIndirect的指令,就允許GPU在不需要CPU介入的情況下下,依據先前GPU的運算結果,決定所要執行的工作負載。

新的工作圖(Work Graphs)是讓GPU上運作的著色器執行緒(生產者),也可以請求執行其他工作(消費者),而一旦GPU有空,系統便可以安排這些重新請求的工作給GPU,系統也能管理資料流所使用的記憶體。工作圖可以被看作是一種結構,其中的節點由著色器程式碼組成,每個節點都可以重新請求其他節點。

工作圖可以表達出開發者所設計的演算法意圖和結構,但又不會過度造成開發人員的負擔,開發人員不會具體知道特定程式碼會在哪個硬體上執行,微軟提到,這種模型的非同步性,讓系統擁有更大的自由度,決定執行工作的最佳方法。

不過也並非所有應用程式的工作負載,皆適用工作圖模型,依據工作的特性和硬體的複雜度,現有方法可能更適合。而目前工作圖模型的設計,主要把重點擺在生產者與消費者之間的運作,沒有特別設計同步等待的概念,因此讓消費者啟動等待生產者節點完成所有工作,雖然可以巧妙安排著色器邏輯來達成這項目的,但是目前尚未有原生同步支援。

AMD、Nvidia、英特爾和高通都加入協助設計工作圖,雖然目前工作圖還在早期預覽階段,但AMD顯示卡驅動程式則率先支援工作圖,他們已在AMD Radeon RX 7000系列顯示卡的Adrenalin版本驅動程式實作工作圖API,同時也有相對應的文件供開發者閱讀。

熱門新聞

Advertisement