2008年8月27日

CUDA


最近,注意到CUDA(Compute Unified Device Architecture) 這項技術
簡單來說,是利用顯示晶片的運算效能來輔助運算
一般CPU是單核、雙核到四核心左右
同一個時間,CPU只能處理一到四個Process
長久以來,傳統程式的寫法也是基於同樣模型下發展

以單核心為例,處理器一次只能處理一件工作
假設,有一件工作,處理完需要1分鐘
若要處理 100 件這樣的工作就需要 100 分鐘…

如果今天有100顆處理器來分擔工作,每個處理器 只負擔一件工作
在平行處理下,1分鐘就可以完成 100件工作了

CUDA 的原理就類似如此
在顯示晶片中,有上百個運算單元,負責處理3D影像中的每塊小三角形
(3D 動畫中的每個物體模型,都是由一堆小三角形面積組合成的)
每一塊小三角形有著自己本身的材質屬性、隨著光線、角度改變顯示結果
讓我們看到栩栩如生的模擬影像

GPU 很適合處理這樣的向量矩陣運算,將資料讓一堆運算單元去分工合作
在科學運算上,同樣有著類似需求
像:
物理上的流體力學模擬、核子彈研發、電磁波模擬(設計出更小、更好的手機天線…)
化學上的分子反應模擬、醫學上藥物研發、MRI解析度提昇…等等

CUDA 讓這類應用變的更容易些
看過CUDA的Code 後發現跟C 的差距不大
可說是從C 擴增一些新語法來標示平行運算部份
基本上,是GPU與CPU協同運作的模式
所以對於移植上,也方便許多
選擇將最耗時間 又 可以平行處理 的部份改寫就可以提昇 數十倍到數百倍的運算速度

CUDA目前一般應用還很少
但是,很多市面上的顯示卡都有這能力了
nVidia 也整合 ARM 11 + CUDA 技術出了一顆處理器
對於未來,我想影響是非常廣泛的
包括 影像辨識、類神經網路…等等

而我們又向著智慧型機器人的世界前進了一步

PS:為什麼放貓圖?
那隻貓的名字是 Dayan, 每次念到CUDA就會聯想到那隻搞笑貓 ~ 哈




沒有留言: