GPU程式設計
在CUDA中,將__syncthreads()寫在「if (threadIdx.x < 16)」之內,使只有部分執行緒會通過。下列何者是可能發生的情況?
- A僅16個執行緒完成同步,可正確運作
- B由於其他執行緒永遠不會抵達,區塊會停住,或結果變得不確定
- C__syncthreads()會被自動忽略,因此什麼事都不會發生
查看答案與解析
正確答案:B. 由於其他執行緒永遠不會抵達,區塊會停住,或結果變得不確定
__syncthreads()會等待區塊中所有執行緒抵達,因此若寫在只有部分執行緒會通過的分支內,就會有等不到的執行緒。規格中未定義其行為,實際上可能會停住,或即使碰巧能運作,結果也會出錯。原則是將同步寫在分支之外、所有執行緒必定會通過的位置。
- A. 這是會等待區塊全員抵達的指令。
- B. 正確。必須寫在區塊全員都會通過的位置。
- C. 不會被忽略。