版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2018.10.06 星期六 |
前言
很多做視頻和圖像的,相信對這個框架都不是很陌生,它渲染高級3D圖形,并使用GPU執(zhí)行數據并行計算。接下來的幾篇我們就詳細的解析這個框架。感興趣的看下面幾篇文章。
1. Metal框架詳細解析(一)—— 基本概覽
2. Metal框架詳細解析(二) —— 器件和命令(一)
3. Metal框架詳細解析(三) —— 渲染簡單的2D三角形(一)
4. Metal框架詳細解析(四) —— 關于GPU Family 4(一)
5. Metal框架詳細解析(五) —— 關于GPU Family 4之關于Imageblocks(二)
6. Metal框架詳細解析(六) —— 關于GPU Family 4之關于Tile Shading(三)
About Raster Order Groups - 關于光柵順序組
了解精確控制訪問相同像素坐標的并行片段著色器線程的順序。
Overview - 概覽
Metal 2引入了柵格順序組,可以從片段著色器中進行有序存儲器訪問,并簡化渲染技術,例如與順序無關的透明度,雙層G緩沖區(qū)和體素化(voxelization)。
給定一個包含兩個重疊三角形的場景,Metal保證在繪制調用順序中進行混合,從而產生三角形連續(xù)渲染的錯覺。 圖1顯示了一個綠色三角形部分遮擋的藍色三角形。
然而,在幕后,這個過程是高度平行的;多個線程同時運行,并且無法保證后三角形的片段著色器在前三角形的片段著色器之前已執(zhí)行。 圖1顯示雖然兩個線程同時執(zhí)行,但是在繪制調用順序中進行混合。

片段著色器中的自定義混合函數可能需要在根據前三角形片段應用該函數之前讀取后三角形片段著色器的結果。 由于并發(fā)性,此讀取 - 修改 - 寫入序列可以創(chuàng)建競爭條件。 圖2顯示了線程2試圖同時讀取線程1正在寫入的相同內存。

Raster Order Groups for Overcoming Access Conflict - 用于克服訪問沖突的光柵順序組
光柵順序組通過同步以相同像素坐標和樣本為目標的線程(如果激活每個樣本著色)來克服此訪問沖突。 您可以通過使用屬性限定符注釋指向內存的指針來實現柵格順序組。 然后通過每個像素的提交順序完成對這些指針的訪問。 硬件在當前線程繼續(xù)之前等待與當前線程重疊的任何舊片段著色器線程完成。
圖3顯示了柵格順序組如何同步兩個線程,以便線程2在嘗試讀取該內存之前等待寫入完成。

Extended Raster Order Groups with Metal 2 on A11 - 在A11上使用Metal 2擴展光柵順序組
A11上的Metal 2擴展了具有附加功能的柵格順序組。 首先,它允許同步圖像塊和線程組存儲器的各個通道。 其次,它允許創(chuàng)建多個訂單組,為您提供更細粒度的同步,并最大限度地減少線程等待訪問的頻率。
A11圖形處理單元(GPU)上的光柵順序組的附加功能提高性能的示例是延遲著色。 傳統(tǒng)上,延遲著色需要兩個階段。 第一階段填充G緩沖區(qū)并生成多個紋理。 第二階段消耗這些紋理并計算著色結果以渲染光量,如圖4所示。

因為中間紋理被寫入設備存儲器(device memory)并從設備存儲器讀取,所以延遲著色是帶寬密集的。 A11 GPU能夠利用多個順序組將兩個渲染階段合并為一個,從而消除了對中間紋理的需求。 此外,它可以將G緩沖區(qū)保持在仍保留在本地圖像塊存儲器中的區(qū)塊大小的塊( tile-sized chunks)中。
為了演示A11 GPU的多個順序組如何提高延遲著色的性能,圖5顯示了傳統(tǒng)GPU如何為照明階段調度線程。 負責第二個燈的線程必須等待先前線程的完成訪問才能開始。 即使訪問不相互沖突,此等待也會強制執(zhí)行這兩個線程以串行方式運行。

圖6顯示了多個順序組如何允許您同時運行非沖突讀取,兩個線程在執(zhí)行結束時進行同步以累積燈光。 您可以通過將三個G緩沖區(qū)字段(反照率,法線和深度(albedo, normal, and depth))聲明為第一組,并將累積的光照結果設置為第二組來實現此目的。 A11 GPU能夠分別對兩組進行排序,而對第二組的寫入不需要在第一組中進行讀取等待。

使用多個順序組,更多線程可以同時運行,從而實現更多并行性和更高的性能。
后記
本篇主要講述了光柵順序組,感興趣的給個贊或者關注~~~
