GPU程式設計

以GPU進行兩個大型陣列的逐元素加法(c[i] = a[i] + b[i])時,主要決定效能的是什麼?

  1. A記憶體頻寬(因為每個元素要讀寫12位元組,而計算只有一次加法)
  2. B運算單元的數量
  3. C僅有時脈頻率
查看答案與解析

正確答案:A. 記憶體頻寬(因為每個元素要讀寫12位元組,而計算只有一次加法)

每做一次float的加法,要從a與b各讀4位元組,再寫入c 4位元組,因此是以12位元組的傳輸換取1次計算。GPU每秒可進行數十兆次計算,但記憶體頻寬只有數TB/s左右,所以這種處理的上限是由頻寬決定的。要加快這類處理,有效的做法包括減少資料的讀寫次數,或融合多個處理而不將中間結果寫入記憶體。

  • A. 正確。這是運算強度低、受限於記憶體的處理。
  • B. 運算單元大部分時間都在等待。
  • C. 即使提高頻率,記憶體也跟不上。
練習這個領域 前往領域頁面

GPU程式設計的其他題目

  1. 在多數家用的遊戲用GPU中,雙精度(FP64)的運算效能遠低於單精度(FP32)(約為數十分之一等)。下列何者是最適當的理由?
  2. 關於近年GPU所搭載的張量核心(Tensor Core,矩陣運算單元)的特徵,下列何者正確?
  3. 在GPU的混合精度計算中,常以FP16等低精度進行乘法,而以FP32進行加總(累加)。下列何者是其正確的理由?
  4. 以GPU求取相同資料的浮點數總和時,每次執行結果的最後一位數都略有不同。下列何者是最可能的原因?
  5. 在CUDA中決定每個區塊的執行緒數量時,下列何者是正確的一般準則?

這個領域的比較