光線追蹤的相干性聚集:硬件光線追蹤的優(yōu)勢
盡管在理論上實現(xiàn)現(xiàn)代GPU的方法是無限的,但真正有效的方法是切實地了解問題并著手將方案變?yōu)楝F(xiàn)實。制造現(xiàn)代高性能半導(dǎo)體器件以及試圖加速當(dāng)前可編程光柵化技術(shù)所面臨的問題揭示了GPU硬件行業(yè)發(fā)展的未來趨勢。
本文引用地址:http://www.ex-cimer.com/article/202003/411188.htm例如在現(xiàn)代GPU中SIMD處理和固定功能紋理單元是必不可少的,以至于不使用它們來設(shè)計的GPU方案幾乎肯定意味著在研究之外不具有商業(yè)上的可行性和實用性。即使是過去20年來,任何一個GPU最瘋狂的愿景也沒有舍棄這些核心原則(安息吧,Larrabee(英特爾公司GPU 的芯片代號))。
過去15年來實時光線追蹤加速一直被默認(rèn)為是GPU設(shè)計中最令人煩心的問題,關(guān)于光線追蹤應(yīng)該如何在GPU上實現(xiàn)的主流規(guī)范是微軟推出的DXR,它要求的執(zhí)行模型卻不能真正融入GPU的工作模式,這無疑給任何需要支持它的GPU設(shè)計者帶來一些嚴(yán)重的潛在問題。如果實時光線追蹤是它們過去十年時間沒有考慮過的事情,那么這個問題會更加明顯,而Imagination一直在關(guān)注這個問題。
光線追蹤面臨的關(guān)鍵挑戰(zhàn)
如果你遵循DXR規(guī)范并考慮需要在GPU中實現(xiàn)些什么從而提供計算加速性能,那么你將很可能快速梳理出以下這幾個不管采用何種設(shè)計方案都需要解決的問題:
首先,你需要一種方法來生成和處理一組包含幾何體的數(shù)據(jù)結(jié)構(gòu),從而能以更有效的方式根據(jù)幾何體來跟蹤光線。其次,當(dāng)追蹤光線時,GPU要測試光線是否與之相交,要提供一些用戶可定義的編程接口。第三,被跟蹤的光線可以發(fā)出新的光線!DXR規(guī)范定義的實現(xiàn)方案還需要考慮其他問題,但是從全局來看這三個因素是最重要的。
生成和使用加速數(shù)據(jù)結(jié)構(gòu)來有效地表示需要做相交測試的幾何體意味著GPU可能要完成一個全新的執(zhí)行階段,然后我們需要用全新的接口函數(shù)處理這些新的數(shù)據(jù)結(jié)構(gòu),測試是否相交,之后在程序員的控制下根據(jù)相交測試的結(jié)果實現(xiàn)一些功能。GPU是并行的設(shè)計,所以同時處理一堆光線意味著什么?這樣做是否發(fā)現(xiàn)了新挑戰(zhàn),而這些挑戰(zhàn)與傳統(tǒng)的幾何和像素并行處理所帶來的挑戰(zhàn)卻大不相同?
上一個問題的答案是非??隙ǖ?,的確這些差異對如何將光線追蹤映射到現(xiàn)有的GPU執(zhí)行的模型中有著深遠(yuǎn)的影響。這些GPU存在計算資源和內(nèi)存資源的不平衡,導(dǎo)致內(nèi)存訪問成為一種寶貴的資源,而浪費這些資源是導(dǎo)致效率和性能低下的最主要原因之一。
PowerVR光線追蹤混合渲染效果
哦不——我們做了些什么?
GPU被設(shè)計成可以任何形式充分利用與之連接的DRAM的訪問,利用內(nèi)存訪問的空間或時間局部性來作為實現(xiàn)這一目的的方法。值得慶幸的是,最常見和最現(xiàn)代化的光柵化渲染有一個很好的特性,即在著色期間(尤其是像素著色通常是任何給定幀的主要工作負(fù)載)三角形和像素頂點有可能與它們的近鄰共享相關(guān)數(shù)據(jù)。因此,您訪問一組像素所需的任何緩存數(shù)據(jù),很可能下一個相鄰的組將需要使用您已經(jīng)從DRAM中提取并緩存的部分或全部內(nèi)存數(shù)據(jù)。對于當(dāng)今大多數(shù)柵格化渲染工作負(fù)載而言,這都是正確的,因此我們都可以松一口氣,并圍繞該屬性設(shè)計GPU架構(gòu)。
當(dāng)我們使用光線追蹤,這些就都失效了。光線追蹤使所有空間局部性消失。下面讓我們來分析其中的原因。
物體表面的問題
最簡單的思考方式就是觀察四周,在你坐下來閱讀這篇文章時注意光線在你所處環(huán)境中的作用。由于光線追蹤建模了光線從所有光源傳播時的屬性,因此它必須處理光線照射在場景中任何表面時發(fā)生的情況。也許我們只關(guān)心光線照射哪些物體,也許物體的表面以均勻的方向散射光線,但它也可能完全是隨機(jī)的。也許表面吸收了所有的光,因此不會有次級光線的傳播。也許表面有一種材質(zhì)屬性,使它能夠部分吸收幾乎所有照射來的光線,然后隨機(jī)散射它不能捕獲的少量光線。
只有第一種場景可以映射到GPU的利用內(nèi)存訪問局部性的工作模式,即使如此也只有當(dāng)所有并行處理的光線都照射到同一類型的三角形時才可以。
正是這種明顯分歧的可能性導(dǎo)致了這些問題,如果并行處理的任何光線相互之間可能會有不同的作用,包括撞擊不同的加速數(shù)據(jù)結(jié)構(gòu)或發(fā)出新的光線,那么GPU能高效工作的基本前提就會被破壞,而且這通常比在傳統(tǒng)的幾何圖形或像素處理中遇到的發(fā)散現(xiàn)象更具有破壞性。
相干性聚集
PowerVR對光線追蹤硬件加速的實現(xiàn)所做的是硬件光線追蹤和排序,它與當(dāng)今行業(yè)內(nèi)任何其他硬件光線追蹤加速相比都是獨一無二的,這對軟件方面來說是完全透明的,確保硬件上并行追蹤的發(fā)射光線具有潛在的相似性。我們稱之為相干性聚集。
硬件維護(hù)了一個數(shù)據(jù)結(jié)構(gòu),用于層次化的存儲軟件發(fā)出的正在被硬件處理的光線,并能夠根據(jù)它們的方向按它們在加速結(jié)構(gòu)中前進(jìn)的位置進(jìn)行選擇和分組。這意味著當(dāng)它們被處理時更可能共享存儲器中被訪問的加速數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù),且額外的優(yōu)勢是能夠最大化隨后要并行處理的光線-幾何體相交計算的數(shù)量。
通過分析由硬件調(diào)度的光線,我們可以確保以GPU友好的方式對它們進(jìn)行分組,從而更高效地進(jìn)行后續(xù)處理,這些是該系統(tǒng)成功的關(guān)鍵,有助于避免打破GPU行業(yè)為高效的光柵化渲染而精心設(shè)計的運行模式,這就避免了光線追蹤硬件對特殊類型存儲系統(tǒng)的需求,因此提供了與GPU的其他部分更容易集成的方案。
相干性聚集機(jī)制本身相當(dāng)?shù)膹?fù)雜,因為它需要快速的追蹤,排序和調(diào)度所有被提交到硬件中處理的光線,從而不會反壓前級用于發(fā)射光線的調(diào)度系統(tǒng),也不會造成后級以排序好的光線和加速數(shù)據(jù)結(jié)構(gòu)為輸入的硬件的空閑。
如果沒有硬件系統(tǒng)來幫助GPU處理光線排序,那么就需要依賴應(yīng)用程序或游戲開發(fā)人員以某種方式在主機(jī)上處理光線的相干性問題,或者在GPU上加入一個中間的計算環(huán)節(jié)來處理光線排序——前提是這種方式被硬件所支持,以上假設(shè)的方式中沒有一個能在實時的硬件平臺上提升效率和性能,然而Imagination是市場上唯一擁有這種硬件光線追蹤系統(tǒng)的GPU IP供應(yīng)商。
緊跟潮流
Imagination之所以成為行業(yè)內(nèi)唯一針對硬件光線追蹤提供解決方案的供應(yīng)商是因為我們已經(jīng)致力于解決這個問題很長時間了。與行業(yè)中其他一些正在緩慢進(jìn)展的技術(shù)相比,光線追蹤已經(jīng)成為當(dāng)今圖形技術(shù)廣泛采用API之一。
我們的相干性聚集特性與目前行業(yè)的光線追蹤相互兼容(如果光線恰好發(fā)射出新的光線,堆棧將會被釋放也可能發(fā)射出新的光線等等),在每個階段進(jìn)行相干性聚集處理并確保我們盡可能地實現(xiàn)硬件光線追蹤的強大性能。
在現(xiàn)代的硬件光線追蹤系統(tǒng)中最重要的是測量光線束、峰值并行測試率或空光線發(fā)射和未命中率,這些是描述光線追蹤硬件性能的簡單方式,但是也并不是非常的有用,畢竟開發(fā)人員并不只關(guān)心高峰值并行測試率或漏測率。
我們的目標(biāo)是在整個加速系統(tǒng)中使用全面的光線追蹤,這樣開發(fā)人員就可以用光線束預(yù)算要實現(xiàn)哪些有用的功能。我們的相干性聚集系統(tǒng)與我們提供的解決方案共同實現(xiàn)了這個目標(biāo),與行業(yè)內(nèi)的其他方案相比是獨一無二的。
評論