什麼是Warp 分歧(Warp divergence)

在同一個 warp 內,因條件分支而使執行緒走的路徑分開的現象。由於會依序執行分開的路徑,效率會下降。

日文名稱: ワープダイバージェンス

「Warp 分歧(Warp divergence)」出現在1領域的1道練習題中(GPU程式設計等)。

這個名詞所屬的領域: GPU程式設計

練習Warp 分歧(Warp divergence)的題目

在一個線程束中,因條件分支使一半的執行緒走if側、另一半走else側(線程束發散,warp divergence)。一般會如何執行?

  1. A兩側同時執行,因此速度不變
  2. Belse側的執行緒不會被執行而遭捨棄
  3. C依序執行if側與else側,各自執行期間不符合的執行緒會閒置,因此效率下降
查看答案與解析

正確答案:C. 依序執行if側與else側,各自執行期間不符合的執行緒會閒置,因此效率下降

線程束的32個執行緒執行相同指令,因此分支一旦分歧,會先僅讓if側的執行緒有效並執行if側的指令,接著再以其餘執行緒執行else側。結果雖然正確,但各自執行期間有一半的執行緒什麼都沒做,所以時間會是兩條路徑的總和。若能調整資料或執行緒的排列方式,讓線程束內的分支趨於一致,效率就會提升。

出現「Warp 分歧(Warp divergence)」的題目(1題)

  1. 在一個線程束中,因條件分支使一半的執行緒走if側、另一半走else側(線程束發散,warp divergence)。一般會如何執行?

相關名詞

平行歸約(Parallel reduction) 共享記憶體(GPU shared memory) 串流多處理器(Streaming multiprocessor) 佔用率(GPU occupancy) 固定記憶體(Pinned memory) 延遲隱藏(Latency hiding) 前綴和(Prefix sum) 記憶體合併存取(Memory coalescing) 記憶體庫衝突(Bank conflict) 執行緒區塊(Thread block)

前往名詞解釋列表