GPU程式設計
以GPU求取大量數值的總和時,使用樹狀歸約(reduction,重複將相鄰的值相加而使數量減半)的理由,下列何者正確?
- A比起由一個執行緒依序相加,加法的次數會大幅減少
- B每一階段都有許多執行緒可同時進行加法,能以log2 n個階段加總n個值
- C浮點數的誤差必定為0
查看答案與解析
正確答案:B. 每一階段都有許多執行緒可同時進行加法,能以log2 n個階段加總n個值
若由一個執行緒依序相加,需要n-1個階段;改為樹狀後,第1階段由n/2個執行緒將相鄰的值相加,第2階段由n/4個執行緒……如此重複,經log2 n個階段即結束。加法的總次數雖然不變,但階段數少,所以能並行地快速計算。在區塊內以共享記憶體推進各階段,最後再將各區塊的結果一併加總。
- A. 兩者的加法次數都是n-1次。
- B. 正確。重新編排成可並行相加的形式。
- C. 誤差並不會消失(但有時會變小)。