GPU程式設計

以GPU求取大量數值的總和時,使用樹狀歸約(reduction,重複將相鄰的值相加而使數量減半)的理由,下列何者正確?

  1. A比起由一個執行緒依序相加,加法的次數會大幅減少
  2. B每一階段都有許多執行緒可同時進行加法,能以log2 n個階段加總n個值
  3. C浮點數的誤差必定為0
查看答案與解析

正確答案:B. 每一階段都有許多執行緒可同時進行加法,能以log2 n個階段加總n個值

若由一個執行緒依序相加,需要n-1個階段;改為樹狀後,第1階段由n/2個執行緒將相鄰的值相加,第2階段由n/4個執行緒……如此重複,經log2 n個階段即結束。加法的總次數雖然不變,但階段數少,所以能並行地快速計算。在區塊內以共享記憶體推進各階段,最後再將各區塊的結果一併加總。

  • A. 兩者的加法次數都是n-1次。
  • B. 正確。重新編排成可並行相加的形式。
  • C. 誤差並不會消失(但有時會變小)。
練習這個領域 前往領域頁面

GPU程式設計的其他題目

  1. 以樹狀歸約加總1024個值時,所需的階段數為多少?
  2. 在使用單一GPU的程式中,關於CPU端記憶體與GPU端記憶體,下列何者通常是正確的?
  3. 對於只對陣列元素做一次加法這類輕量的處理,若將資料傳送到GPU,有時會比用CPU計算還慢。下列何者是主要原因?
  4. 將CPU記憶體固定(鎖頁,page-lock)後再傳輸到GPU會比較快,其理由下列何者正確?
  5. 下列何者是使用多個CUDA串流(stream)的主要目的?

這個領域的比較