2009年6月18日 星期四

CUDA

NVIDIA 在自家的顯卡上,設計了這一種程式語言,目的是為了可以利用顯卡上的GPGPU (General purpose graphics processing units) 泛用圖形處理晶片,來進行平行化的運算。GPGPU 可以把他當成是一個小型的cpu,再目前顯卡上,GPGPU 的數量往往很多,有些高達上百顆,因此利用這些GPGPU來進行平行化運算,效率會快上許多。

在稍微摸過一下CUDA後,覺得CUDA 寫作並不困難,困難之處在於如何最佳化,它需要了解不少硬體的細節。一般而言未最佳化的程式在 GPGPU 上面執行,可以比傳統的 CPU 快上 5~10 倍,而最佳化過的程式,往往還能再增速 5~10 倍,達到 25~100 倍的效能。

CUDA 和傳統 C++ 最大的差異在於「平行化的程式設計」vs.「序列化的程式設計」,例如傳統上透過迴圈執行數千次的程式碼,在 CUDA 上就可以將它拆解成數百個同時執行的執行緒,每個執行緒只執行十幾次而己,因此產生數十到數百倍的效能。

CUDA 是在傳統 C++ 的基礎上,加入一些延伸語法,以及輔助的函式庫,而形成的一
種程式語言,一般而言只要熟悉 C 或 C++,就很容易上手,編譯好的程式碼,也可以跟其它語言做不錯的聯結。

不過由於是NVIDIA自己設計的,因此目前只有他們家的顯卡可以支援,且也不是每一種顯卡都能跑,至少要8系列以上才有辦法跑,限制滿多的。因此也有同類型的OpenCL發展起來,OpenCL是OpenGL發展起來的,因此是一套免費的工具,並且會制定公開的規格,因此目前我比較看好OpenCL就是了。

沒有留言:

張貼留言