GPU程式設計
在CUDA中,想在核心函式途中,等待其他所有區塊的計算結束後再進入下一階段。下列何者是一般的方法?
- A呼叫__syncthreads()
- B在該處將核心函式分成兩個,待第一個核心函式結束後再啟動第二個
- C以迴圈持續等待其他區塊寫入的旗標
查看答案與解析
正確答案:B. 在該處將核心函式分成兩個,待第一個核心函式結束後再啟動第二個
區塊的規定是可獨立地以任何順序執行,因此並不保證所有區塊都同時載入GPU。若等待的對象區塊尚未開始,等待旗標的迴圈就永遠不會結束。因此,一般是利用在同一串流中啟動的核心函式要等前一個核心函式結束才會開始的性質,藉由拆分核心函式來取得整體的同步。
- A. __syncthreads()只能在同一個區塊內同步。
- B. 正確。核心函式的交界處就成為整體的同步點。
- C. 由於不保證所有區塊都同時載入,可能會停住。