CUDA為GPU賦予了新的使命,推進計算行業(yè)快速發(fā)展,讓計算從“CPU處理”時代向CPU與GPU“協(xié)同處理”時代邁進。今天讓我一起來聊一聊加速計算行業(yè)發(fā)展的時代引擎--CUDA!
一、CUDA提出背景:發(fā)揮GPU強大的并行計算能力,拓展GPU應用場景
2006年,英偉達推出殺手級產品-GeForce 7300GT,精準定位中低端GPU市場,其憑借超高性價比成功擊敗老對手的ATi Radeon X1600。
憑借GeForce 7300GT的成功,英偉達在圖形處理市場份額持續(xù)攀升,截至2006年底,其市場份額超過70%,占據(jù)絕對領先地位。
但英偉達并不滿足于圖形處理市場的成功,想為GPU開拓更多的應用場景,讓其充分發(fā)揮并行計算能力強大的優(yōu)勢,使其不再局限于“圖形處理”領域。
想要實現(xiàn)這個想法并不容易,因為當時的GPU和CPU之間存在著很大的差異:首先,GPU和CPU之間使用PCIe接口來通信,這個接口的帶寬低和延遲高,導致數(shù)據(jù)傳輸效率很差。其次,GPU和CPU之間使用不同的內存空間和管理方式,導致內存訪問和同步復雜。最重要的是,GPU和CPU之間使用不同的指令集和編程模型,導致程序開發(fā)和移植困難。同時,由于GPU和CPU之間使用不同的調度和執(zhí)行機制,導致任務分配和協(xié)調困難。
為了解決這些問題,NVIDIA需要找到一個合作伙伴,一個能夠提供強大的CPU,并且愿意支持NVIDIA的想法的合作伙伴。當時的英特爾已經是CPU市場的霸主,它擁有強大的技術實力和市場影響力。但同時也面臨著諸多挑戰(zhàn),例如:摩爾定律的瓶頸,功耗墻的限制,多核心擴展的困難,新興領域的競爭,即科學計算、機器學習、密碼學等領域對CPU提出了更高的要求。英特爾也在尋找一種新的技術方案,一種可以提高CPU性能、降低CPU功耗、增強CPU并行性、拓展CPU應用領域的技術方案。2006年,由英偉達首席科學家David Kirk親自帶隊,開發(fā)了一個基于英偉達 GPU 平臺上面定制的特殊計算體系/算法?- CUDA(Compute Unified Device Architecture,統(tǒng)一計算架構)!它讓GPU和CPU通過一種全新的方式實現(xiàn)高效地交換數(shù)據(jù),它使GPU不僅能處理圖形任務,還能處理通用計算任務,擴展GPU在科學計算、機器學習、密碼學等領域應用。2006年,英偉達和英特爾達成了一項歷史性的合作協(xié)議,他們共同開發(fā)了一種基于CUDA的新型GPU,即G80 GPU(GeForce 8800 GTX)。
二、CUDA魔法加持:GPU計算效率實現(xiàn)最大化
CUDA本身是一種并行計算平臺和編程模型,其編程語言是一種“類C語言”,兼容C語言,CUDA編程語言和C語言差異并不大,非常適合普通開發(fā)者使用。CUDA改進了DRAM的讀寫靈活性,使得GPU與CPU的機制相吻合,同時,CUDA也提供了片上(on-chip)共享內存,使得線程之間可以共享數(shù)據(jù)。應用程序可以利用共享內存來減少DRAM的數(shù)據(jù)傳送,減少對DRAM內存帶寬的依賴。在CUDA的加持下GPU計算效率實現(xiàn)最大化,從而幫助GPU擴展到所有適合并行計算的領域,GPU也逐漸成為了GPGPU。下面我們通過一個具體例子來說明CPU、GPU 與CUDA優(yōu)化的GPU運算能力的差異。
當我們要算100次從1到100的加法:如果使用一個4線程的CPU,CPU需要進行100/4*100=2500次計算。如果使用一個1000線程的GPU,GPU需要進行100/1000*100=10次計算。如果使用CUDA優(yōu)化的英偉達的GPU,它能提供優(yōu)化算法的“1+100,2+99的這種利用首尾相加再除以2”的方法來簡化計算,那么使用CUDA優(yōu)化的GPU只需要100/1000*100/5=2 次計算。相比CPU,采用CUDA優(yōu)化的GPU計算效率提升了近百倍。相比普通GPU,CUDA優(yōu)化的GPU計算效率也提升了5倍,所以,即便競爭對手的GPU在硬件參數(shù)上比肩英偉達GPU,但缺少CUDA的優(yōu)化,其計算效率還是無法比肩英偉達GPU。
三、CUDA架構組成:開發(fā)庫、運行期環(huán)境和驅動
從體系結構的組成來說,CUDA包含了三個部分:開發(fā)庫、運行期環(huán)境和驅動。
1.開發(fā)庫
它是基于CUDA所提供的應用開發(fā)庫。以CUDA 1.1為例,它提供了兩個標準數(shù)學運算庫——CUFFT(離散快速傅立葉變換)和CUBLAS(離散基本線性計算)的實現(xiàn)。這兩個數(shù)學運算庫所解決的是典型的大規(guī)模的并行計算問題,也是在密集數(shù)據(jù)計算中非常常見的計算類型。開發(fā)人員可以在開發(fā)庫基礎上快速、方便的建立起自己的計算應用。此外,開發(fā)人員也可以在CUDA的技術基礎上實現(xiàn)出更多的開發(fā)庫。
2.運行期環(huán)境
它提供了應用開發(fā)接口和運行期組件,包括基本數(shù)據(jù)類型的定義和各類計算、類型轉換、內存管理、設備訪問和執(zhí)行調度等函數(shù)?;贑UDA開發(fā)的程序代碼在實際執(zhí)行中分為兩種,一種是運行在CPU上的宿主代碼(Host Code),一種是運行在GPU上的設備代碼(Device Code)。由于不同類型的代碼運行的物理位置不同,以及訪問到的資源不同,因此對應的運行期組件也分為公共組件、宿主組件和設備組件三個部分,基本上囊括了所有在GPGPU開發(fā)中所需要的功能和能夠使用到的資源接口,開發(fā)人員可以通過運行期環(huán)境的編程接口實現(xiàn)各種類型的計算。
3.驅動
基于CUDA開發(fā)的應用必須有NVIDIA CUDA-enable的硬件支持,而不同版本GPU之間存在差異,因此驅動部分基本上可以理解為是CUDA-enable的GPU的設備抽象層,提供硬件設備的抽象訪問接口。CUDA提供運行期環(huán)境也是通過這一層來實現(xiàn)各種功能。
四、CUDA推廣策略:完全免費使用,不求短期回報,快速占領市場
英偉達CEO黃仁極具遠見,將拓展GPU應用領域作為公司首要任務。因此,CUDA推出后完全免費,不求短期回報,完全推廣的策略,使CUDA平臺開發(fā)者快速增長,同時也幫助英偉達在AI市場搶占先機。英偉達大力支持CUDA系統(tǒng)在AI及相關領域的開發(fā)與推廣,早在2006年,英偉達每年投入高達5億美元的研發(fā)經費(全年營收 30 億美元),對CUDA進行持續(xù)更新與優(yōu)化?,并讓當時美國大學與科研機構免費使用,這讓CUDA迅速在AI以及通用計算領域開花結果。
五、CUDA發(fā)展歷程:持續(xù)演進與優(yōu)化,革命從未停止
為了讓廣大開發(fā)者更方便的使用GPU的計算能力,英偉達不斷優(yōu)化CUDA開發(fā)庫與驅動系統(tǒng)。從2006年發(fā)布至今,共發(fā)布了12個大版本,52個小版本,經過英偉達持續(xù)地更與新迭代,CUDA功能與性能進一步優(yōu)化、兼容性不斷調整、支持更多計算架構、錯誤得到修復、穩(wěn)定性逐步改善。
1.功能增強
CUDA的每個新版本都會帶來一些新功能或API。例如,CUDA 10引入了一個全新的任務圖功能,它允許用戶將一系列的任務(例如內核、數(shù)據(jù)傳輸?shù)龋┙M織成一個圖形,從而提高執(zhí)行效率。而CUDA 11則引入了新的編程模型和庫功能。
2.性能提升
隨著版本升級,CUDA性能持續(xù)不斷地優(yōu)化,以提高運行速度和效率。例如,CUDA 9引入了Cooperative Groups(一個新的編程模型),可以幫助開發(fā)者更容易地編寫并行和并發(fā)代碼。
3.兼容性調整
每個新版本對舊版編譯的代碼的兼容性有所不同。有些新版本可能不再支持一些舊版本的特性,或者對某些API的行為進行了修改。
4.錯誤修復和穩(wěn)定性改進
每一個新版本的CUDA都會修復一些已知的錯誤,并且提高CUDA的穩(wěn)定性和可靠性。這些改進使得新版本的CUDA在實際使用中更加穩(wěn)定,可以處理更多的任務。
5.支持更多計算架構
每個CUDA版本都支持一系列的計算架構,隨著版本的升級,支持的計算架構列表也會更新。有些新的計算價格可能只在新版本的CUDA中得到支持。例如:CUDA8.0,9.x,10.x。
CUDA8.0:● 費米 (Fermi,GTX580)●?開普勒(Kepler,GTX680,GTX780Ti,GTX Titan,Titan Z,Tesla K80)●?麥克斯韋(Maxwell,GTX980Ti,Titan X,Tesla M40)●?帕斯卡(Pascal,GTX1080Ti,Titan Xp,Tesla P100)
CUDA9.x:●?開普勒(Kepler,GTX680,GTX780Ti,GTX Titan,Titan Z,Tesla K80)●?麥克斯韋(Maxwell,GTX980Ti,Titan X,Tesla M40)●?帕斯卡(Pascal,GTX1080Ti,Titan Xp,Tesla P100)●?伏特(Volta,Titan V,Tesla V100)
CUDA10.x:●?開普勒(Kepler,GTX680,GTX780Ti,GTX Titan,Titan Z,Tesla K80)●?麥克斯韋(Maxwell,GTX980Ti,Titan X,Tesla M40)●?帕斯卡(Pascal,GTX1080Ti,Titan Xp,Tesla P100)●?伏特(Volta,Titan V,Tesla V100)●?圖靈(Turing,RTX2080Ti,Titan RTX,Tesla T4)經過多年優(yōu)化與迭代,CUDA已經形成獨特軟硬件配合的生態(tài)系統(tǒng),為英偉達GPU產品構建了極深的護城河。
六、CUDA應用場景:從圖形處理到科學計算,持續(xù)探索創(chuàng)新應用領域
時至今日,支持CUDA的GPU銷量已經超過1億,成千上萬的軟件開發(fā)人員使用免費的CUDA軟件開發(fā)工具來解決各種應用程序中的問題,而這些應用程序從視頻與音頻處理和物理效果模擬到石油天然氣勘探、產品設計、醫(yī)學成像以及科學研究,涵蓋了各個領域。
1.圖形渲染與視覺效果作為GPU技術的基石,CUDA不僅加速了3D圖形渲染,還促進了電影特效、建筑設計可視化、游戲開發(fā)等領域的實時渲染和物理模擬。
2.深度學習與人工智能CUDA是推動深度學習革命的關鍵技術之一。它支持諸如TensorFlow、PyTouch等主流深度學習框架,加速神經網絡的訓練和推理過程,廣泛應用于圖像識別、自然語言處理等AI應用。
3.科學計算與工程模擬在物理與化學模擬、氣候研究、天文學、生物信息學等領域,CUDA被用來加速復雜的數(shù)值計算和模擬過程,例如分子動力學模擬軟件AMBER就利用CUDA來加速新藥的研發(fā)(AMBER 是一款分子動力學模擬程序,全世界在學術界與制藥企業(yè)中有超過60,000名研究人員使用該程序來加速新藥的探索工作)。
4.高性能計算與大數(shù)據(jù)處理在超級計算中心,CUDA被用于構建高性能計算集群,例如德國、波蘭、日本的量子計算中心采用CUDA-Q平臺推進量子計算研究。另一方面,CUDA加速了大數(shù)據(jù)的清洗、轉換、分析流程,極大地提升了數(shù)據(jù)科學家和分析師的工作效率。CUDA賦予GPU新的生命!它讓GPU不再只是一個圖像加速處理器,而是成為一個通用計算器。它讓開發(fā)者不再只是一個游戲開發(fā)者,而是一個工程師、科學家、藝術家。