GPU程式設計
在撰寫GPU核心函式時,下列何者是應遵守的正確前提?
- A執行緒必定依編號由小到大,一個一個地執行
- B在區塊0結束之前,區塊1必定不會開始
- C執行緒或區塊以什麼順序執行並未固定,因此要寫成讓結果不受執行順序左右
查看答案與解析
正確答案:C. 執行緒或區塊以什麼順序執行並未固定,因此要寫成讓結果不受執行順序左右
GPU會將執行緒與區塊陸續分配給空閒的資源,因此執行順序會隨GPU的機型與負載而改變。若某個執行緒仰賴另一個執行緒所寫入的值,即使碰巧能正確運作,在其他環境中也會出錯。需要順序時,區塊內可用__syncthreads(),區塊之間則拆分核心函式,加總則使用原子運算或歸約。
- A. 許多執行緒是同時運作的,不保證順序。
- B. 區塊可能同時以任何順序執行。
- C. 正確。需要順序時就使用同步。