GPU程式設計
在一個線程束中,因條件分支使一半的執行緒走if側、另一半走else側(線程束發散,warp divergence)。一般會如何執行?
- A兩側同時執行,因此速度不變
- Belse側的執行緒不會被執行而遭捨棄
- C依序執行if側與else側,各自執行期間不符合的執行緒會閒置,因此效率下降
查看答案與解析
正確答案:C. 依序執行if側與else側,各自執行期間不符合的執行緒會閒置,因此效率下降
線程束的32個執行緒執行相同指令,因此分支一旦分歧,會先僅讓if側的執行緒有效並執行if側的指令,接著再以其餘執行緒執行else側。結果雖然正確,但各自執行期間有一半的執行緒什麼都沒做,所以時間會是兩條路徑的總和。若能調整資料或執行緒的排列方式,讓線程束內的分支趨於一致,效率就會提升。
- A. 一個線程束同一時間只會執行一個指令。
- B. 兩邊的執行緒都會被正確執行。
- C. 正確。需要兩條路徑的時間。