GPU程式設計
在每個執行緒區塊(Thread block)的執行緒數上限為1024的GPU上,將blockDim.x設為2048來啟動CUDA的核心函式。一般會發生什麼情況?
- AGPU自動分成2個各1024個執行緒的區塊來執行
- B只有前1024個執行緒會執行,其餘被忽略
- C啟動設定被視為錯誤,核心函式不會執行,並回傳錯誤
查看答案與解析
正確答案:C. 啟動設定被視為錯誤,核心函式不會執行,並回傳錯誤
執行緒區塊的所有執行緒必須同時位於一個SM上,並能透過共享記憶體與__syncthreads()協作,因此每個區塊的執行緒數有上限。以超過上限的設定啟動時,核心函式連一個執行緒都不會執行,而是產生表示啟動設定錯誤的錯誤。核心函式的啟動不會回傳值,若不以cudaGetLastError()等確認錯誤,就不容易察覺結果陣列並未被更新。2048個執行緒份的工作,應分成多個1024個執行緒以下的區塊來啟動。
- A. 不會自動分割。區塊數與執行緒數由程式決定。
- B. 不會只執行一部分,而是啟動本身失敗。
- C. 正確。養成在啟動後確認錯誤的習慣很重要。