GPU程式設計

在每個執行緒區塊(Thread block)的執行緒數上限為1024的GPU上,將blockDim.x設為2048來啟動CUDA的核心函式。一般會發生什麼情況?

  1. AGPU自動分成2個各1024個執行緒的區塊來執行
  2. B只有前1024個執行緒會執行,其餘被忽略
  3. C啟動設定被視為錯誤,核心函式不會執行,並回傳錯誤
查看答案與解析

正確答案:C. 啟動設定被視為錯誤,核心函式不會執行,並回傳錯誤

執行緒區塊的所有執行緒必須同時位於一個SM上,並能透過共享記憶體與__syncthreads()協作,因此每個區塊的執行緒數有上限。以超過上限的設定啟動時,核心函式連一個執行緒都不會執行,而是產生表示啟動設定錯誤的錯誤。核心函式的啟動不會回傳值,若不以cudaGetLastError()等確認錯誤,就不容易察覺結果陣列並未被更新。2048個執行緒份的工作,應分成多個1024個執行緒以下的區塊來啟動。

  • A. 不會自動分割。區塊數與執行緒數由程式決定。
  • B. 不會只執行一部分,而是啟動本身失敗。
  • C. 正確。養成在啟動後確認錯誤的習慣很重要。
練習這個領域 前往領域頁面

相關計算工具

GPU程式設計的其他題目

  1. 假設GPU的SM中有一個發出指令的機制,每個週期可從一個線程束發出指令。各線程束重複「發出20個週期份的指令後,等待400個週期直到記憶體讀取的結果送達」。若切換線程束不需時間,要以延遲隱藏(Latency hiding)消除記憶體等待造成的閒置時間,最少需要幾個線程束?
  2. 關於CPU與GPU設計理念的差異,下列何者正確?
  3. 下列何者最適合作為GPU能快速處理之工作的特徵?
  4. 下列何者是在GPU上執行時容易效率不佳的處理?
  5. 關於CUDA等GPU程式設計所稱的「核心函式(kernel)」,下列說明何者正確?

這個領域的比較