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