GPU程式設計

以GPU轉置大型矩陣(b[j][i] = a[i][j])時,經由共享記憶體的主要目的為下列何者?

  1. A將轉置的計算次數減半
  2. B在共享記憶體中重新排列矩陣的值,使其由小到大
  3. C將圖塊以合併存取沿著列的方向讀入,在共享記憶體中轉換方向,使寫入也成為合併存取
查看答案與解析

正確答案:C. 將圖塊以合併存取沿著列的方向讀入,在共享記憶體中轉換方向,使寫入也成為合併存取

若照樸素的寫法,沿著列的方向讀取a雖然是合併存取,但寫入b時會變成沿著欄的方向,位址零散而變慢。若先將圖塊讀入共享記憶體,再交換執行緒的分工後讀出,對全域記憶體的讀取與寫入就都能使用連續的位址。此時為了避免共享記憶體在欄方向讀出時發生記憶庫衝突,還會搭配多配置一欄的做法。

  • A. 轉置只是搬移值,不是計算次數的問題。
  • B. 並不是在重新排列(排序)值。
  • C. 正確。讓讀取與寫入都使用連續的位址。
練習這個領域 前往領域頁面

GPU程式設計的其他題目

  1. 在CUDA中,CPU端的程式啟動核心函式之後,下列何者是一般正確的動作?
  2. 關於CPU與GPU設計理念的差異,下列何者正確?
  3. 下列何者最適合作為GPU能快速處理之工作的特徵?
  4. 下列何者是在GPU上執行時容易效率不佳的處理?
  5. 關於CUDA等GPU程式設計所稱的「核心函式(kernel)」,下列說明何者正確?

這個領域的比較