虎瀾集: CPU, GPU, GPGPU

November 28th, 2009

最近在大拜拜學到一些新東西,要趁 memory leak 之前趕快來虎瀾一下。這年頭隨便一台貓狗電腦裡可能都有一顆灰熊給他夠力的 GPU,它除了打 game 之外還有什麼用途呢?這就是阿宅們的新目標了,要把花出去的銀兩榨出最大的剩餘價值。不過在這之前,要先搞清楚 GPU 可以做什麼。

GPU 和 x86/x64 CPU 最大的不同是,GPU 擅長於資料的平行處理。要榨出 GPU 的效能,丟給它的東西必須滿足以下的條件:

  • thread 要很多 (>1000)
  • 資料封包 (data packet) 要小,32-64 byte 左右的為佳
  • 演算法本身適合平行資料處理,如 FFT

目前把腦筋動到閒置的 GPU 的程式漸漸增多,我們有希望在四、五年內看到供高階語言直接套用的程式庫 (這句話的意思是,現在沒有,就算有,也不夠泛型)。很多人會把平行處理 (parallel processing) 直接和平行資料處理 (data-level parallel processing) 畫上等號,這是不對的,有這麼爽早就世界和平了。平行處理的聖杯是執行緒平行處理 (thread-level parallel processing),牽扯到 invariant state 等等複雜的問題,因此目前平行處理大多著墨於資料上的平行處理 (因為比較好做容易成功),例如 FFT 這種天生就適合的演算法,也就是說,就算 GPU 改名成 GPGPU,它其實可以做的事情也不會是 general purpose 的,它仍然較合用於特殊用途的演算法。

執行上的主要瓶頸還是來自 I/O,最大的瓶頸是怎麼從 main memory 把資料搬到 graphics memory,再搬回來。有一派的理論是把 GPU 直接做到 CPU 裡,大家一起 share 一大塊 DDR3 RAM … 咳咳,理想很美麗,現實很殘酷,GPU 一下把 memory bandwidth 霸佔光,CPU 就可以直接休息了喔呵呵呵呵 … 所以還要把 NUMA 做進去,這個就 high 翻了哇哈哈 …

技術文章, 無責任評論 | Comments Jump to the top of this page

Comments are closed.

隨便寫寫大家隨便看看的不出名小格子

舊文索引

站內管理