簡體   English   中英

鏈式金屬着色器與單個着色器的性能?

[英]Performance of chained Metal shaders versus a single shader?

實際上,與使用單個着色器進行相同工作相比,鏈接着色器的開銷是多少?

換句話說,鏈接着色器與開發一個怪物着色器是否更可取? 或者鏈接它們的開銷是否要求使用盡可能少的着色器?

例如,考慮@warrenm示例“圖像處理” 項目 有一個adjust_saturation着色器鏈接到gaussian_blur_2d着色器。 將兩個着色器組合成一個着色器可以顯着提高性能,還是實際上是相同的?

在您將adjust_saturationgaussian_blur_2d相結合的示例中,我希望能夠獲得大量的性能提升(假設它們的名稱與其名稱adjust_saturation )。

從GPU的角度來看,兩個操作在需要完成的數學方面都是微不足道的,性能將完全由紋理獲取和寫出結果控制。 我認為高斯模糊正在做更多工作,因為它可能每個輸出片段有多個紋理樣本。 通過組合兩個着色器,您可以完全消除調整飽和度的紋理提取和寫入成本。

我認為通過結合這兩項操作,您可以期望獲得顯着的性能提升,比鏈接它們快大約10%-40%。 請記住,您可能沒有看到幀速率的差異,因為iOS在管理CPU / GPU時鍾速度方面非常活躍,因此很難准確地測量內容。

這取決於紋理的大小和緩存的大小。 如果你必須優化它,可能值得將它們組合成一個着色器。 如果你想重用你的代碼,創建一組更簡單的着色器並將它們組合起來是有意義的(就像我的VideoShader項目, https://github.com/snakajima/vs-metal )。

順便說一下,當您組合多個着色器時,最好創建一個命令緩沖區並將所有着色器編碼到該命令緩沖區中(而不是為每個着色器創建命令緩沖區)。 它允許Metal進行一系列優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM