GPU程式設計

在CUDA核心函式中,以上式求出各執行緒的編號i。blockIdx.x=2、blockDim.x=256、threadIdx.x=5的執行緒,其i為多少?

int i = blockIdx.x * blockDim.x + threadIdx.x;
  1. A517
  2. B263
  3. C2565
查看答案與解析

正確答案:A. 517

blockIdx.x是區塊在網格中的編號,blockDim.x是每個區塊的執行緒數量,threadIdx.x則是執行緒在區塊中的編號。區塊0負責0~255,區塊1負責256~511,因此區塊2的第5個執行緒為2×256+5=517。藉由這個式子,替所有執行緒編上互不重複的流水號,並決定負責的陣列元素。

  • A. 正確。2×256+5=517。
  • B. 沒有乘上blockIdx.x就直接相加了。
  • C. 只是把數字排在一起,並不是計算。
練習這個領域 前往領域頁面

GPU程式設計的其他題目

  1. 想以每個區塊256個執行緒、每個執行緒處理一個元素的方式,處理元素數為1000的陣列。下列何者是應啟動的區塊數?
  2. 上述CUDA核心函式中加入「if (i < n)」的理由,下列何者正確?
  3. 在NVIDIA的GPU中,將32個執行緒組成一束並同時執行相同指令的單位稱為什麼?
  4. 關於GPU的SIMT(單一指令、多執行緒)方式與CPU的SIMD指令之差異,下列何者正確?
  5. 在一個線程束中,因條件分支使一半的執行緒走if側、另一半走else側(線程束發散,warp divergence)。一般會如何執行?

這個領域的比較