Fiori-like Prototype ( Nvidia CUDA C / C++ )
Play with Visual C / C++
Model rendering
Demos / Prototypes / Mockups
ZFiori Studio ( Nvidia CUDA C/C++ Mockups ) S1
Nvidia CUDA Community
CUDA 是 NVIDIA 發(fā)明的一種并行計算平臺和編程模型藐石。它通過利用圖形處理器 (GPU) 的處理能力壮虫,可大幅提升計算性能。
2006 年 11 月,NVIDIA? 推出了 CUDA?纯命,這是一種通用并行計算平臺和編程模型,它利用 NVIDIA GPU 中的并行計算引擎以比 CPU 更有效的方式解決許多復(fù)雜的計算問題。
CUDA 附帶一個軟件環(huán)境,允許開發(fā)人員使用 C++ 作為高級編程語言伙单。
如下圖所示,支持其他語言哈肖、應(yīng)用程序編程接口或基于指令的方法吻育,例如 FORTRAN、DirectCompute淤井、OpenACC布疼。
可擴展的編程模型
多核 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 等標(biāo)準(zhǔn)編程語言的程序員保持較低的學(xué)習(xí)曲線器罐。
其核心是三個關(guān)鍵抽象——線程組的層次結(jié)構(gòu)、共享內(nèi)存和屏障同步——它們只是作為最小的語言擴展集向程序員公開渐行。
這些抽象提供了細(xì)粒度的數(shù)據(jù)并行和線程并行,嵌套在粗粒度的數(shù)據(jù)并行和任務(wù)并行中铸董。它們指導(dǎo)程序員將問題劃分為可以由線程塊并行獨立解決的粗略子問題祟印,并將每個子問題劃分為可以由塊內(nèi)所有線程并行協(xié)作解決的更精細(xì)的部分。
這種分解通過允許線程在解決每個子問題時進行協(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)品 。
注意:GPU 是圍繞一系列流式多處理器 (SM: Streaming Multiprocessors) 構(gòu)建的(有關(guān)詳細(xì)信息吟孙,請參閱硬件實現(xiàn))澜倦。 多線程程序被劃分為彼此獨立執(zhí)行的線程塊,因此具有更多multiprocessor的 GPU 將比具有更少多處理器的 GPU 在更短的時間內(nèi)完成程序執(zhí)行杰妓。
英偉達GPU硬件架構(gòu)
在英偉達的設(shè)計里藻治,多個核心組成一個Streaming Multiprocessor(SM),一張GPU卡有多個SM巷挥。從“Multiprocessor”這個名字上也可以看出SM包含了多個處理器桩卵。實際上,英偉達主要以SM為運算和調(diào)度的基本單元倍宾。
英偉達不同時代產(chǎn)品的芯片設(shè)計不同凿宾,每代產(chǎn)品背后有一個微架構(gòu)代號矾屯,微架構(gòu)均以著名的物理學(xué)家為名,以向先賢致敬初厚。當(dāng)前比較火熱的架構(gòu)有:
Ampere 安培2020年5月發(fā)布專業(yè)顯卡:Telsa A100
Turing 圖靈2018年發(fā)布消費顯卡:GeForce RTX 2080 Ti件蚕、Titan RTX
Volta 伏特2017年末發(fā)布專業(yè)顯卡:Telsa V100 (16或32GB顯存 5120個CUDA核心)
Pascal 帕斯卡2016年發(fā)布專業(yè)顯卡:Telsa P100(12或16GB顯存 3584個CUDA核心)
上圖為Tesla V100的設(shè)計,它共有84個SM产禾。圖中密密麻麻的綠色小格子就是GPU計算核心排作,多個計算核心一起組成了一個SM。將SM放大亚情,單個SM如下圖所示妄痪。
可以看到一個SM中包含了計算核心衫生、存儲等部分:
針對不同類型計算的小核心,包括64位浮點核心(FP64)土浸,整型核心(INT)罪针,32位浮點核心(FP32),優(yōu)化深度學(xué)習(xí)的Tensor Core黄伊。
計算核心直接從寄存器(Register)中讀寫數(shù)據(jù)泪酱。
調(diào)度和分發(fā)器(Scheduler和Dispatch Unit)。
L0和L1級緩存。
具體而言:
SM中的FP32進行32位浮點加乘運算墓阀,INT進行整型加乘運算毡惜,SFU(Special Functional Unit)執(zhí)行一些倒數(shù)和三角函數(shù)等運算。
這里對Tensor Core做一些簡單解釋斯撮。
Tensor Core是英偉達新的微架構(gòu)中提出的一種混合精度的計算核心经伙。
我們知道,當(dāng)前深度神經(jīng)網(wǎng)絡(luò)中使用到最頻繁的矩陣運算是:D=A×B+CD = A \times B + CD=A×B+C吮成。
Tensor Core可以對4*4的矩陣做上述運算橱乱。
其中,涉及乘法的AAA和BBB使用FP16的16位浮點運算粱甫,精度較低泳叠;涉及加法的CCC和DDD使用FP16或FP32精度。
Tensor Core是在Volta架構(gòu)開始提出的茶宵,使用Volta架構(gòu)的V100在深度學(xué)習(xí)上的性能遠(yuǎn)超Pascal架構(gòu)的P100危纫。
前面提到的以物理學(xué)家命名的名稱是英偉達各代GPU的微架構(gòu)代號,微架構(gòu)表示英偉達不同時代的芯片設(shè)計乌庶。不同微架構(gòu)里各類計算核心和顯卡存儲的設(shè)計不同种蝶。2020年,比較流行的微架構(gòu)為Volta和Turing瞒大。
對于消費者而言螃征,英偉達主要有兩條產(chǎn)品線:
消費級產(chǎn)品 GeForce 系列:GeForce RTX 2080 Ti ...
針對數(shù)據(jù)中心的高性能計算產(chǎn)品 Telsa 系列:Telsa V100、Telsa P100透敌、Telsa P40 ...
其中盯滚,消費級產(chǎn)品GeForce可以用在個人電腦上,用來加速游戲和視頻酗电,Telsa系列產(chǎn)品一般用在數(shù)據(jù)中心的高性能計算加速場景上魄藕。
此外,還有使用在工作站上的Quadro系列撵术,一般用在CAD背率、視頻制作和部分科學(xué)計算上,是一個介于GeForce和Telsa之間的產(chǎn)品線嫩与。英偉達產(chǎn)品的命名中暗含了微架構(gòu):Telsa V100的V表示使用Volta微架構(gòu)寝姿,Telsa P100的P表示使用Pascal微架構(gòu);GeForce系列中划滋,20xx系列使用了Turing微架構(gòu)会油。
英偉達顯卡型號眾多,但是歸根結(jié)底需要關(guān)注兩方面問題:采用哪種微架構(gòu)古毛、顯卡存儲(簡稱顯存)多大。
為什么選擇GPU
GPU(Graphics Processing Unit)在相同的價格和功率范圍內(nèi),比CPU提供更高的指令吞吐量和內(nèi)存帶寬稻薇。許多應(yīng)用程序利用這些更高的能力嫂冻,在GPU上比在CPU上運行得更快(參見GPU應(yīng)用程序)。其他計算設(shè)備塞椎,如FPGA桨仿,也非常節(jié)能,但提供的編程靈活性要比GPU少得多案狠。
GPU和CPU在功能上的差異是因為它們的設(shè)計目標(biāo)不同服傍。雖然 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)存訪問延遲烁挟,這兩者在晶體管方面都是昂貴的婴洼。
Reference
GPU加速02:超詳細(xì)Python Cuda零基礎(chǔ)入門教程,沒有顯卡也能學(xué)
anaconda的安裝和使用(管理python環(huán)境看這一篇就夠了)