Shader中的條件分支能否節省shader的效能?

時間 2021-05-11 11:55:08

1樓:

對於voita之前的架構,如果if導致warp內的執行緒走不同分支,由於simt的以warp為排程單位,且warp內每個執行緒執行相同指令序列,所以這時候不能加速;由於拆散了訪存等原因,效能可能會下降。

volta及Turing架構,支援執行緒走不同分支,沒有了上述問題,也許會有收益。

2樓:

看具體情況,現在的 gpu 基本都支援動態分支http://www.

irisa.fr/alf/downloads/collange/cours/ada2019/ada2019_gpu_2.pdf

好處:如果乙個 warp 確實沒有一人進入某個分支的話,那麼該分支就會被跳過

壞處:1. 分支指令本身是指令

2. 可能影響編譯器優化

3. 使用的暫存器增多,暫存器 file 不夠用

3樓:陳嘉棟

「This post is a small writeup addressed to programmers who are interested to learn more about how GPU handles branching and targeted as an introduction to the topic.」

What』s up with my branch on GPU?

4樓:

能,大部分情況下能

因為大部分情況下你的shader開銷不都在alu,往往memory stall佔了很大的比重,而nop肯定比無用的memory load節省

5樓:

非但不能,越多if只會更消耗shader效能。在shader裡應該儘量減少條件分支而使用向量運算或者step計算來替換。

6樓:

如果Early Return在大部分情況都能成立,就可以用條件分支。否則的話一組並行的thread裡面只要有乙個不能返回,拿整個包都得等著;每個分支在每個thread上都可能要走上一遍,而不是說這個分支沒有執行就不走了。再加上動態指令對優化的不利和排程上的開銷,一般只會更慢。

7樓:

在某些情況下能,但是更多的情況下不能,還會帶來額外開銷。

大致的原因其它回答已經提到了,這裡就稍微深入一下。

GPU之所以運算能力遠超CPU,是因為採用了SIMD架構。(當然現代CPU當中也有一部分SIMD,只是模組數量上遠遠沒有GPU多)

SIMD(或者SIMT)的基本工作方式是,對多個資料組成的資料集可以同時執行同乙個操作。比如要將集合A當中的資料和集合B當中的資料相加得到集合C,CPU(不使用SIMD指令)的做法是從A拿出乙個資料,從B拿出乙個資料,相加放入C;而GPU的做法則是從A拿出多個資料(具體幾個取決於GPU設計架構,當今流行設計一般為幾十個),從B拿出同樣多的資料,然後SIMD能夠一次同時完成這些資料的加法,得到很多個C,然後放入C。

大概比喻的話,CPU是零售,GPU是批發。

但是批發有批發的問題。批發打包之後,就無法對這個包裡面的貨物進行個別處理,只能作為乙個整體考慮。所以,當shader當中有分支的時候,如果這個包當中某些資料選擇肯定條件,某些選擇否定條件,則SIMD的做法就是兩個分支都跑一遍,只不過是用個標誌位遮蔽掉那些選擇相反分支的計算結果。

所以,對於這種情況,最後總的執行的命令數,等於兩個分支當中所有命令的總和。

注意我這裡說的是命令數,並沒有說執行時間。因為在當代GPGPU當中,實際上乙個核(core)包含好幾組SIMD,乙個SIMD裡面其實也並非只有乙個ALU,所以實際的執行時間是比較複雜的,要看GPU當中是怎麼排程工作量的。

但是總的來說,對於並非所有資料都會選擇同乙個分支的情況,時間會比走單一分支長,這個是沒有大問題的。

8樓:TechRock

可以的,如果乙個warp(32執行緒)在執行的時候所有執行緒都執行同乙個分支,那麼就不會為另乙個分支分配時間片。參見programming massively parallel processors, 3rd

9樓:大薩比

Petr Sikachev and Nicolas Longchamps , Reflection System in Thief, Siggraph 2014

10樓:lingzerg

很遺憾,不能,這涉及到顯示卡的架構

顯示卡執行shader是一次乙個warp,乙個warp大約是32個任務線,等於32個一起執行

gpu中如果出現動態分支,並且a和b都在乙個warp中出現(乙個warp等於32個執行核心或者執行緒)gpu會先執行A分支,然後條件B的必須等A的執行完,再執行B分支,這時候A分支還要等B分支,所以總執行分支時間等於A+B,簡直悲催,所以不是萬不得已不要用動態分支

而靜態分支就是另外乙個話題了

靜態分支幾乎沒有消耗,但是起不到題主想要的效果

數學上能否指出某個公理體系中符合哪些條件的真命題是可以證明的,符合哪些條件的命題是 真而不可證 的?

自學生 我發現了,5份對角和7份對邊方格6 6半徑圓周 自然規律和人為規則1對兩性定律 5 1和7 1 正中平衡時間6 6 36 兩性矛盾各讓一步 自然統一平衡時間標準真理定律模型。 第乙個問題 從某種意義上來說可以,因為在乙個形式系統中,可以應用的證明規則是有限的,所有可以被證明的命題是re的,那...

魔獸世界中各種精靈的起源和分支怎麼來的?

尼傑夫 增添版 黑暗巨魔 永恆之井 暗夜精靈 卡多雷 暗夜精靈 階級 上層精靈 普通暗夜精靈 上古之戰 上層精靈 邪能改造 燃燒軍團 薩特 上層精靈 沉入大海 古神能量 娜迦 古代普通暗夜精靈 大樹 暗夜精靈 上層精靈 魔法罩子 墮夜精靈 夜之子 墮夜精靈 魔力酒 枯法者,墮夜精靈 魔力酒 自然大樹...

命題的充分條件成立,能否推出其必要條件也成立?

Cortaxiphan 首先B 2 AC 0並不是充分條件。充分條件是點P滿足關於x和y的一階偏導數 0 即P是駐點 且滿足B 2 AC 0。首先必須要滿足一階偏導數 0再去談ABC的事情判斷是不是極值點才有意義,否則就是沒有意義的行為。點 2,2 連駐點都不是怎麼談極值點?本身B 2 AC是用來判...