本項目為CUDA官方手冊的中文翻譯版,有個人翻譯并添加自己的理解。主要介紹CUDA編程模型和接口。
1.1 我們?yōu)槭裁匆褂?a href="http://www.xsypw.cn/tags/gpu/" target="_blank">GPU
GPU(Graphics Processing Unit)在相同的價格和功率范圍內(nèi),比CPU提供更高的指令吞吐量和內(nèi)存帶寬。許多應(yīng)用程序利用這些更高的能力,在GPU上比在CPU上運行得更快(參見GPU應(yīng)用程序)。其他計算設(shè)備,如FPGA,也非常節(jié)能,但提供的編程靈活性要比GPU少得多。
GPU和CPU在功能上的差異是因為它們的設(shè)計目標不同。雖然 CPU 旨在以盡可能快的速度執(zhí)行一系列稱為線程的操作,并且可以并行執(zhí)行數(shù)十個這樣的線程。但GPU卻能并行執(zhí)行成千上萬個(攤銷較慢的單線程性能以實現(xiàn)更大的吞吐量)。
GPU 專門用于高度并行計算,因此設(shè)計時更多的晶體管用于數(shù)據(jù)處理,而不是數(shù)據(jù)緩存和流量控制。
下圖顯示了 CPU 與 GPU 的芯片資源分布示例。
將更多晶體管用于數(shù)據(jù)處理,例如浮點計算,有利于高度并行計算。GPU可以通過計算隱藏內(nèi)存訪問延遲,而不是依靠大數(shù)據(jù)緩存和復(fù)雜的流控制來避免長時間的內(nèi)存訪問延遲,這兩者在晶體管方面都是昂貴的。
1.2 CUDA?:通用并行計算平臺和編程模型
2006 年 11 月,NVIDIA? 推出了 CUDA?,這是一種通用并行計算平臺和編程模型,它利用 NVIDIA GPU 中的并行計算引擎以比 CPU 更有效的方式解決許多復(fù)雜的計算問題。
CUDA 附帶一個軟件環(huán)境,允許開發(fā)人員使用 C++ 作為高級編程語言。 如下圖所示,支持其他語言、應(yīng)用程序編程接口或基于指令的方法,例如 FORTRAN、DirectCompute、OpenACC。
1.3 可擴展的編程模型
多核 CPU 和眾核 GPU 的出現(xiàn)意味著主流處理器芯片現(xiàn)在是并行系統(tǒng)。挑戰(zhàn)在于開發(fā)能夠透明地擴展可并行的應(yīng)用軟件,來利用不斷增加的處理器內(nèi)核數(shù)量。就像 3D 圖形應(yīng)用程序透明地將其并行性擴展到具有廣泛不同內(nèi)核數(shù)量的多核 GPU 一樣。
CUDA 并行編程模型旨在克服這一挑戰(zhàn),同時為熟悉 C 等標準編程語言的程序員保持較低的學(xué)習(xí)曲線。
其核心是三個關(guān)鍵抽象——線程組的層次結(jié)構(gòu)、共享內(nèi)存和屏障同步——它們只是作為最小的語言擴展集向程序員公開。
這些抽象提供了細粒度的數(shù)據(jù)并行和線程并行,嵌套在粗粒度的數(shù)據(jù)并行和任務(wù)并行中。它們指導(dǎo)程序員將問題劃分為可以由線程塊并行獨立解決的粗略子問題,并將每個子問題劃分為可以由塊內(nèi)所有線程并行協(xié)作解決的更精細的部分。
這種分解通過允許線程在解決每個子問題時進行協(xié)作來保留語言表達能力,同時實現(xiàn)自動可擴展性。實際上,每個線程塊都可以在 GPU 內(nèi)的任何可用multiprocessor上以亂序、并發(fā)或順序調(diào)度,以便編譯的 CUDA 程序可以在任意數(shù)量的多處理器上執(zhí)行,如下圖所示,并且只有運行時系統(tǒng)需要知道物理multiprocessor個數(shù)。
這種可擴展的編程模型允許 GPU 架構(gòu)通過簡單地擴展multiprocessor和內(nèi)存分區(qū)的數(shù)量來跨越廣泛的市場范圍:高性能發(fā)燒友 GeForce GPU ,專業(yè)的 Quadro 和 Tesla 計算產(chǎn)品 (有關(guān)所有支持 CUDA 的 GPU 的列表,請參閱支持 CUDA 的 GPU)。
注意:GPU 是圍繞一系列流式多處理器 (SM: Streaming Multiprocessors) 構(gòu)建的(有關(guān)詳細信息,請參閱硬件實現(xiàn))。 多線程程序被劃分為彼此獨立執(zhí)行的線程塊,因此具有更多multiprocessor的 GPU 將比具有更少多處理器的 GPU 在更短的時間內(nèi)完成程序執(zhí)行。
關(guān)于作者
Ken He 是 NVIDIA 企業(yè)級開發(fā)者社區(qū)經(jīng)理 & 高級講師,擁有多年的 GPU 和人工智能開發(fā)經(jīng)驗。自 2017 年加入 NVIDIA 開發(fā)者社區(qū)以來,完成過上百場培訓(xùn),幫助上萬個開發(fā)者了解人工智能和 GPU 編程開發(fā)。在計算機視覺,高性能計算領(lǐng)域完成過多個獨立項目。并且,在機器人和無人機領(lǐng)域,有過豐富的研發(fā)經(jīng)驗。對于圖像識別,目標的檢測與跟蹤完成過多種解決方案。曾經(jīng)參與 GPU 版氣象模式GRAPES,是其主要研發(fā)者。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5038瀏覽量
103309 -
gpu
+關(guān)注
關(guān)注
28文章
4754瀏覽量
129100 -
人工智能
+關(guān)注
關(guān)注
1792文章
47456瀏覽量
239081
發(fā)布評論請先 登錄
相關(guān)推薦
評論