最近,注意到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就會聯想到那隻搞笑貓 ~ 哈