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