電腦計算的速度,過去有所謂的摩爾定律Moore's law,即預計18個月會將晶片的效能提高一倍,終究將面臨物理上的限制,另外如果考慮綠能減碳的思維,從過去傳統的單核處理器走向多核,甚至採用異質加速器如GPU,成為一個必然的趨勢。
從家用電腦,如laptop desktop採用多核心的硬體技術後,過去談論數十年的平行計算(Parallel Computation)重新受到重視,其技術也從過去僅是少數專家級所能掌握的,逐步面對必然面臨一般程式設計所必須考量的課題。平行計算或平行程式的方案有許多,以GPU加速計算為主的,有openCL、CUDA C等不同的方案。
CUDA(Compute Unified Device Architecture,統一計算架構)是由NVIDIA所推出的一種整合技術,是該公司對於GPGPU的正式名稱。透過這個技術,使用者可利用NVIDIA的GeForce 8以後的GPU和較新的Quadro GPU進行計算。
以矩陣乘法為例,假設兩個相乘的矩陣皆為1024x1024,如果是以傳統的序列式(serial)CPU計算,以GCC 4.6的編譯器處理,其執行時間經過測試,需要10~11秒的計算時間。在相同的硬體配置、作業系統、軟體配置下,如果是考慮以CUDA C 6.0編譯,採用tile演算法計算,Kepler 架構的GPU上,每個block上進行1024個執行序(Thread),執行時間大約只需0.011秒,加速的效果達九百至一千倍,很明顯的,原先序列計算需時O(n^3)已經降低到GPU平行計算的O(n^2)。
相同的程式,如果改用在一般的家用電腦,於64-bit win 7的作業系統,配上一般OEM版本Nvidia的Geforce GT 630 GPU,在visual studio 2013 C++ professional版本的C++編譯器執行,序列式(serial)CPU計算(該版VC release版的優化是採O2),其執行時間有1.48秒。而GPU版也有0.096秒其加速比例也有15倍之譜。
平行計算cuda C測試矩陣乘法,比起CPU計算,要快上95倍以上。