CUDA - 维基百科,自由的百科全书
文章推薦指數: 80 %
显卡的受支持情况
CUDA
維基百科,自由的百科全書
跳至導覽
跳至搜尋
此條目需要更新。
(2021年3月6日)請更新本文以反映近況和新增內容。
完成修改時,請移除本模板。
CUDA開發者Nvidia初始版本2007年6月23日,14年前(2007-06-23)穩定版本11.2.0(2020年12月15日,14個月前(2020-12-15))
作業系統Windows、macOS、Linux類型GPGPU許可協定專有軟體網站developer.nvidia.com/cuda-zone
CUDA(ComputeUnifiedDeviceArchitecture,統一計算架構[1])是由輝達NVIDIA所推出的一種整合技術,是該公司對於GPGPU的正式名稱。
透過這個技術,使用者可利用NVIDIA的GeForce8以後的GPU和較新的QuadroGPU進行計算。
亦是首次可以利用GPU作為C-編譯器的開發環境。
NVIDIA行銷的時候[2],往往將編譯器與架構混合推廣,造成混亂。
實際上,CUDA可以相容OpenCL或者自家的C-編譯器。
無論是CUDAC-語言或是OpenCL,指令最終都會被驅動程式轉換成PTX代碼,交由顯示核心計算。
[3]
目次
1概要
2優點
3限制
4顯卡的受支持情況
5應用
6支援的產品
7示例
8相關條目
9參考文獻
10外部連結
概要[編輯]
CUDA處理流例子1.將主記憶體的處理資料複製入視訊記憶體中2.CPU指令驅動GPU3.GPU每一核心並列處理4.GPU將視訊記憶體結果傳回主記憶體
以GeForce8800GTX為例,其核心擁有128個內處理器。
利用CUDA技術,就可以將那些內處理器串通起來,成為執行緒處理器去解決資料密集的計算。
而各個內處理器能夠交換、同步和共享資料。
利用NVIDIA的C-編譯器,通過驅動程式,就能利用這些功能。
亦能成為流處理器,讓應用程式利用進行運算。
GeForce8800GTX顯示卡的運算能力可達到520GFlops,如果建設SLI系統,就可以達到1TFlops。
[4]
但程式設計師在利用CUDA技術時,須分開三種不同的暫存器,要面對繁複的執行緒層次,編譯器亦無法自動完成多數任務,以上問題就會提高開發難度。
而目前更新的G100以及更高核心型號已採用第二代的CUDA技術,可提高效率,降低開發難度。
目前,已有軟體廠商利用CUDA技術,研發出AdobePremierePro的外掛程式。
通過外掛程式,使用者就可以利用顯示核心去加速H.264/MPEG-4AVC的編碼速度。
速度是單純利用CPU作軟體加速的7倍左右。
在NVIDIA收購AGEIA後,NVIDIA取得相關的物理加速技術,即是PhysX物理引擎。
配合CUDA技術,顯示卡可以類比成一顆PhysX物理加速晶片[5]。
目前,全系列的GeForce8顯示核心都支援CUDA。
而NVIDIA亦不會再推出任何的物理加速卡,顯示卡將會取代相關產品。
為了將CUDA推向民用,NVIDIA舉行一系列的編程比賽,要求參賽者開發程式,充分利用CUDA的計算潛能。
但是,要將GPGPU普及化,還要看微軟能否在Windows作業系統中,提供相關的編程介面。
[6]
2008年8月,NVIDIA推出CUDA2.0[7]。
2010年3月22日,NVIDIA推出CUDA3.0,僅支援Fermi及之後的架構[8]。
CUDA是一種由NVIDIA提出的並由其製造的圖形處理單元(GPUs)實現的一種平行計算平臺及程式設計模型。
CUDA給程式開發人員提供直接存取CUDAGPUs中的虛擬指令集和平行計算元件的記憶體。
使用CUDA技術,GPUs可以用來進行通用處理(不僅僅是圖形);這種方法被稱為GPGPU。
與CPUs不同的是,GPUs有著側重以較慢速度執行大量併發執行緒的並行流架構,而非快速執行單一執行緒。
軟體發展者可以通過CUDA加速庫,編譯器指令(如OpenACC)以及符合工業標準的程式設計語言(如C,C++和Fortran)擴展對CUDA平臺進行操作。
C/C++程式師可以使用「CUDAC/C++」,使用「NVCC」——NVIDIA基於LLVM的C/C++編譯器進行編譯;Fortran程式師可以使用「CUDAFortran」,使用PGI公司的PGICUDAFortran編譯器進行編譯。
除了庫、編譯器指令、CUDAC/C++和CUDAFortran,CUDA平臺還支援其它計算介面,如KhronosGroup的OpenCL,Microsoft的DirectCompute,以及C++AMP。
其協力廠商封裝也可用於Python,Perl,Fortran,Java,Ruby,Lua,Haskell,MATLAB,IDL及Mathematica的原生支援。
在電腦遊戲行業中,GPUs不僅用於進行圖形彩現,而且用於遊戲物理運算(物理效果如碎片、煙、火、流體),比如PhysX和Bullet。
在計算生物學與密碼學等領域的非圖形應用上,CUDA的加速效果達到可以用數量級來表示的程度。
CUDA同時提供底層API與高階API。
最初的CUDA軟體發展包(SDK)於2007年2月15日公佈,支援MicrosoftWindows和Linux。
而後在第二版中加入對MacOSX的支援,取代2008年2月14日發佈的測試版。
所有G8x系列及以後的NVIDIAGPUs皆支援CUDA技術,包括GeForce,Quadro和Tesla系列。
CUDA與大多數標準作業系統相容。
Nvidia聲明:根據二進位相容性,基於G8x系列開發的程式無需修改即可在未來所有的Nvidia顯示卡上運行。
優點[編輯]
在GPUs(GPGPU)上使用圖形APIs進行傳統通用計算,CUDA技術有下列幾個優點:
分散讀取——代碼可以從記憶體的任意位址讀取
統一虛擬記憶體(CUDA4)
共享記憶體——CUDA公開一個快速的共享儲存區域(每個處理器48K),使之在多個執行緒之間共享。
其作為一個使用者管理的快取記憶體,比使用紋理尋找可以得到更大的有效頻寬。
與GPU之間更快的下載與回讀
全面支援整型與位元運算,包括整型紋理尋找
限制[編輯]
CUDA不支援完整的C語言標準。
它在C++編譯器上運行主機代碼時,會使一些在C中合法(但在C++中不合法)的代碼無法編譯。
不支援紋理彩現(CUDA3.2及以後版本通過在CUDA陣列中引入「表面寫操作」——底層的不透明資料結構——來進行處理)
受系統主線的頻寬和延遲的影響,主機與裝置記憶體之間資料複製可能會導致效能下降(通過過GPU的DMA引擎處理,非同步記憶體傳輸可在一定範圍內緩解此現象)
當執行緒總數為數千時,執行緒應按至少32個一組來運行才能獲得最佳效果。
如果每組中的32個執行緒使用相同的執行路徑,則程式分支不會顯著影響效果;在處理本質上不同的任務時,SIMD執行模型將成為一個瓶頸(如在光線追蹤演算法中遍歷一個空間分割的資料結構)
與OpenCL不同,只有NVIDIA的GPUs支援CUDA技術
由於編譯器需要使用優化技術來利用有限的資源,即使合法的C/C++有時候也會被標記並中止編譯
CUDA(計算能力1.x)使用一個不包含遞迴、函式指標的C語言子集,外加一些簡單的擴展。
而單個進程必須運行在多個不相交的記憶體空間上,這與其它C語言運行環境不同。
CUDA(計算能力2.x)允許C++類功能的子集,如成員函式可以不是虛擬的(這個限制將在以後的某個版本中移除)[參見《CUDAC程式設計指南3.1》-附錄D.6]
雙精度浮點(CUDA計算能力1.3及以上)與IEEE754標準有所差異:倒數、除法、平方根僅支援捨入到最近的偶數。
單精確度中不支援反常值(denormal)及sNaN(signalingNaN);只支援兩種IEEE捨入模式(舍位與捨入到最近的偶數),這些在每條指令的基礎上指定,而非控制字碼;除法/平方根的精度比單精確度略低。
顯示卡的受支援情況[編輯]
不同CUDA版本支援的計算能力列表[9]
CUDA版本
支援的計算能力
微架構
備註
1.0[10]
1.0–1.1
Tesla(英語:Tesla(microarchitecture))
1.1
1.0–1.1+x
Tesla(英語:Tesla(microarchitecture))
2.0
1.0–1.1+x
Tesla(英語:Tesla(microarchitecture))
2.1–2.3.1[11][12][13][14]
1.0–1.3
Tesla(英語:Tesla(microarchitecture))
3.0–3.1[15][16]
1.0–2.0
Tesla(英語:Tesla(microarchitecture)),Fermi
3.2[17]
1.0–2.1
Tesla(英語:Tesla(microarchitecture)),Fermi
4.0–4.2
1.0–2.1+x
Tesla(英語:Tesla(microarchitecture)),Fermi
5.0–5.5
1.0–3.5
Tesla(英語:Tesla(microarchitecture)),Fermi,Kepler
6.0
1.0–3.5
Tesla(英語:Tesla(microarchitecture)),Fermi,Kepler
6.5
1.1–5.x
Tesla(英語:Tesla(microarchitecture)),Fermi,Kepler,Maxwell(英語:Maxwell(microarchitecture))
最後支援計算能力1.x(Tesla(英語:Tesla(microarchitecture)))的版本
7.0–7.5
2.0–5.x
Fermi,Kepler,Maxwell(英語:Maxwell(microarchitecture))
8.0
2.0–6.x
Fermi,Kepler,Maxwell(英語:Maxwell(microarchitecture)),Pascal
最後支援計算能力2.x(Fermi)的版本;GTX1070Ti不受支援
9.0–9.2
3.0–7.2
Kepler,Maxwell(英語:Maxwell(microarchitecture)),Pascal,Volta
PascalGTX1070Ti不受CUDASDK9.0支援,但受CUDASDK9.2支援
10.0–10.2
3.0–7.5
Kepler,Maxwell(英語:Maxwell(microarchitecture)),Pascal,Volta,Turing
最後支援計算能力3.x(Kepler)的版本;CUDASDK10.2是最後能用於macOS的官方版本,在未來的版本中macOS將不被支援
11.0–
3.5-8.6
Maxwell(英語:Maxwell(microarchitecture)),Pascal,Volta,Turing,Ampere
不同計算能力對應的顯示卡列表
計算能力(版本)
微架構
GPU
GeForce系列
QuadroNVS系列
Tesla系列
Tegra系列,Jetson(英語:NvidiaJetson)系列,DRIVE(英語:NvidiaDrive)系列
1.0
Tesla(英語:Tesla(microarchitecture))
G80
GeForce8800Ultra,GeForce8800GTX,GeForce8800GTS(G80)
QuadroFX5600,QuadroFX4600,QuadroPlex2100S4
TeslaC870,TeslaD870,TeslaS870
1.1
G92,G94,G96,G98,G84,G86
GeForceGTS250,GeForce9800GX2,GeForce9800GTX,GeForce9800GT,GeForce8800GTS(G92),GeForce8800GT,GeForce9600GT,GeForce9500GT,GeForce9400GT,GeForce8600GTS,GeForce8600GT,GeForce8500GT,GeForceG110M,GeForce9300MGS,GeForce9200MGS,GeForce9100MG,GeForce8400MGT,GeForceG105M
QuadroFX4700X2,QuadroFX3700,QuadroFX1800,QuadroFX1700,QuadroFX580,QuadroFX570,QuadroFX470,QuadroFX380,QuadroFX370,QuadroFX370LowProfile,QuadroNVS450,QuadroNVS420,QuadroNVS290,QuadroNVS295,QuadroPlex2100D4,QuadroFX3800M,QuadroFX3700M,QuadroFX3600M,QuadroFX2800M,QuadroFX2700M,QuadroFX1700M,QuadroFX1600M,QuadroFX770M,QuadroFX570M,QuadroFX370M,QuadroFX360M,QuadroNVS320M,QuadroNVS160M,QuadroNVS150M,QuadroNVS140M,QuadroNVS135M,QuadroNVS130M,QuadroNVS450,QuadroNVS420,[18]QuadroNVS295
1.2
GT218,GT216,GT215
GeForceGT340*,GeForceGT330*,GeForceGT320*,GeForce315*,GeForce310*,GeForceGT240,GeForceGT220,GeForce210,GeForceGTS360M,GeForceGTS350M,GeForceGT335M,GeForceGT330M,GeForceGT325M,GeForceGT240M,GeForceG210M,GeForce310M,GeForce305M
QuadroFX380LowProfile,QuadroFX1800M,QuadroFX880M,QuadroFX380M,NvidiaNVS300,NVS5100M,NVS3100M,NVS2100M,ION
1.3
GT200,GT200b
GeForceGTX295,GTX285,GTX280,GeForceGTX275,GeForceGTX260
QuadroFX5800,QuadroFX4800,QuadroFX4800forMac,QuadroFX3800,QuadroCX,QuadroPlex2200D2
TeslaC1060,TeslaS1070,TeslaM1060
2.0
Fermi(英語:Fermi(microarchitecture))
GF100,GF110
GeForceGTX590,GeForceGTX580,GeForceGTX570,GeForceGTX480,GeForceGTX470,GeForceGTX465,GeForceGTX480M
Quadro6000,Quadro5000,Quadro4000,Quadro4000forMac,QuadroPlex7000,Quadro5010M,Quadro5000M
TeslaC2075,TeslaC2050/C2070,TeslaM2050/M2070/M2075/M2090
2.1
GF104,GF106GF108,GF114,GF116,GF117,GF119
GeForceGTX560Ti,GeForceGTX550Ti,GeForceGTX460,GeForceGTS450,GeForceGTS450*,GeForceGT640(GDDR3),GeForceGT630,GeForceGT620,GeForceGT610,GeForceGT520,GeForceGT440,GeForceGT440*,GeForceGT430,GeForceGT430*,GeForceGT420*,GeForceGTX675M,GeForceGTX670M,GeForceGT635M,GeForceGT630M,GeForceGT625M,GeForceGT720M,GeForceGT620M,GeForce710M,GeForce610M,GeForce820M,GeForceGTX580M,GeForceGTX570M,GeForceGTX560M,GeForceGT555M,GeForceGT550M,GeForceGT540M,GeForceGT525M,GeForceGT520MX,GeForceGT520M,GeForceGTX485M,GeForceGTX470M,GeForceGTX460M,GeForceGT445M,GeForceGT435M,GeForceGT420M,GeForceGT415M,GeForce710M,GeForce410M
Quadro2000,Quadro2000D,Quadro600,Quadro4000M,Quadro3000M,Quadro2000M,Quadro1000M,NVS310,NVS315,NVS5400M,NVS5200M,NVS4200M
3.0
Kepler
GK104,GK106,GK107
GeForceGTX770,GeForceGTX760,GeForceGT740,GeForceGTX690,GeForceGTX680,GeForceGTX670,GeForceGTX660Ti,GeForceGTX660,GeForceGTX650TiBOOST,GeForceGTX650Ti,GeForceGTX650,GeForceGTX880M,GeForceGTX780M,GeForceGTX770M,GeForceGTX765M,GeForceGTX760M,GeForceGTX680MX,GeForceGTX680M,GeForceGTX675MX,GeForceGTX670MX,GeForceGTX660M,GeForceGT750M,GeForceGT650M,GeForceGT745M,GeForceGT645M,GeForceGT740M,GeForceGT730M,GeForceGT640M,GeForceGT640MLE,GeForceGT735M,GeForceGT730M
QuadroK5000,QuadroK4200,QuadroK4000,QuadroK2000,QuadroK2000D,QuadroK600,QuadroK420,QuadroK500M,QuadroK510M,QuadroK610M,QuadroK1000M,QuadroK2000M,QuadroK1100M,QuadroK2100M,QuadroK3000M,QuadroK3100M,QuadroK4000M,QuadroK5000M,QuadroK4100M,QuadroK5100M,NVS510,Quadro410
TeslaK10,GRIDK340,GRIDK520
3.2
GK20A
Tegra K1,Jetson TK1
3.5
GK110,GK208
GeForceGTXTitanZ,GeForceGTXTitanBlack,GeForceGTXTitan,GeForceGTX780Ti,GeForceGTX780,GeForceGT640(GDDR5),GeForceGT630v2,GeForceGT730,GeForceGT720,GeForceGT710,GeForceGT740M(64-bit,DDR3),GeForceGT920M
QuadroK6000,QuadroK5200
TeslaK40,TeslaK20x,TeslaK20
3.7
GK210
TeslaK80
5.0
Maxwell(英語:Maxwell(microarchitecture))
GM107,GM108
GeForceGTX750Ti,GeForceGTX750,GeForceGTX960M,GeForceGTX950M,GeForce940M,GeForce930M,GeForceGTX860M,GeForceGTX850M,GeForce845M,GeForce840M,GeForce830M,GeForceGTX870M
QuadroK1200,QuadroK2200,QuadroK620,QuadroM2000M,QuadroM1000M,QuadroM600M,QuadroK620M,NVS810
TeslaM10
5.2
GM200,GM204,GM206
GeForceGTXTitanX,GeForceGTX980Ti,GeForceGTX980,GeForceGTX970,GeForceGTX960,GeForceGTX950,GeForceGTX750SE,GeForceGTX980M,GeForceGTX970M,GeForceGTX965M
QuadroM600024GB,QuadroM6000,QuadroM5000,QuadroM4000,QuadroM2000,QuadroM5500,QuadroM5000M,QuadroM4000M,QuadroM3000M
TeslaM4,TeslaM40,TeslaM6,TeslaM60
5.3
GM20B
Tegra X1,Jetson TX1,Jetson Nano,DRIVE CX,DRIVE PX
6.0
Pascal
GP100
QuadroGP100
TeslaP100
6.1
GP102,GP104,GP106,GP107,GP108
NvidiaTITANXp,TitanX,GeForceGTX1080Ti,GTX1080,GTX1070Ti,GTX1070,GTX1060,GTX1050Ti,GTX1050,GT1030,MX350,MX330,MX250,MX230,MX150
QuadroP6000,QuadroP5000,QuadroP4000,QuadroP2200,QuadroP2000,QuadroP1000,QuadroP400,QuadroP500,QuadroP520,QuadroP600,QuadroP5000(Mobile),QuadroP4000(Mobile),QuadroP3000(Mobile)
TeslaP40,TeslaP6,TeslaP4
6.2
GP10B[19]
Tegra X2,Jetson TX2,DRIVE PX 2
7.0
Volta
GV100
NVIDIATITANV
QuadroGV100
TeslaV100,TeslaV100S
7.2
GV10B[20]
TegraXavier,JetsonXavierNX,JetsonAGXXavier,DRIVEAGXXavier,DRIVEAGXPegasus
7.5
Turing
TU102,TU104,TU106,TU116,TU117
NVIDIATITANRTX,GeForceRTX2080Ti,RTX2080Super,RTX2080,RTX2070Super,RTX2070,RTX2060Super,RTX2060,GeForceGTX1660Ti,GTX1660Super,GTX1660,GTX1650Super,GTX1650
GeForceMX450
QuadroRTX8000,QuadroRTX6000,QuadroRTX5000,QuadroRTX4000,QuadroT2000,QuadroT1000
TeslaT4
8.0
Ampere(英語:Ampere_(microarchitecture))
GA100,GA102,GA104,GA106
NVIDIAGeforceRTX3090,GeforceRTX3080,RTX3070,RTX3060Ti,RTX3060
A100
'*'–僅限OEM產品
詳情請參見Nvidia(頁面存檔備份,存於網際網路檔案館):
應用[編輯]
利用CUDA技術,配合適當的軟體(例如MediaCoder[21]、FreemakeVideoConverter),就可以利用顯示核心進行高畫質影片編碼加速。
影片解碼方面,同樣可以利用CUDA技術實現。
此前,NVIDIA的顯示核心本身已整合PureVideo單元。
可是,實現相關加速功能的一個微軟API-DXVA,偶爾會有加速失效問題。
所以利用CoreAVC配合CUDA,變相在顯示核心上實現軟體解碼,解決相容性問題[22]。
另外,配合適當的引擎,顯示核心就可以計算光線跟蹤。
NVIDIA就放出了自家的Optix即時光線跟蹤引擎,透過CUDA技術利用GPU計算光線跟蹤。
[23]
支援的產品[編輯]
所有基於G80及之後架構的民用與專業顯示卡或運算模組皆支援CUDA技術[24]。
範例[編輯]
下列的範例是如何用C++自GPU的image陣列中取得紋理(texture):
cudaArray*cu_array;
texture
延伸文章資訊
- 1查詢GPU是否支援CUDA | 程式前沿
登陸網址,https://developer.nvidia.com/cuda-gpus. 選擇對應的顯示卡系列,即可檢視你的GPU顯示卡是否支援CUDA ...
- 2硬體加速搞不懂?CUDA讓一切變得更簡單 - 電腦DIY
打從GPU問世以來對我們的生活有頗大的幫助,但大部分的人還是比較熟悉中央處理器CPU,對於GPU似乎了解不多,但我們換個方式來介紹,GPU就是顯示卡中的微處理器,當然不只是 ...
- 3請問Nvidia Cuda技術是顯卡內建的功能?還是需要另外下載 ...
"•針對CUDA 2.3增加支援,以提升GPU運算應用軟體的效能。" 說真的CUDA Zone那邊的顯卡驅動也過舊了 基本上如果要寫CUDA程式下載SDK就好了.
- 4CUDA | GeForce - Nvidia
CUDA 水模擬的最新進展造就了Avalanche Studio 的動作類遊戲「正當防衛2」. 了解更多>. 產品. 20 系列顯示卡 · 16 系列顯示卡 · 10 系列顯示卡 · 筆記型電腦...
- 5支援的GPU | GeForce - Nvidia
CUDA YouTube 頻道. GPU類型. - 任何-, Desktop, Notebook ... 此顯示卡配有極強大的遊戲馬力、新一代11 Gbps GDDR5X 記憶體以及龐大的11 ...