WikiDer > CUDA

CUDA
CUDA
Logo
EntwicklerNVIDIA
Veröffentlicht23. Juni 2007
Letzte Version9.1 
(12. September 2017)
StatusVeröffentlicht
BetriebssystemWindows XP , Windows Server 2003 , Linux und Mac OS X
KategorieGPU
LizenzProprietärFreeware
Webseite(und) Offizielle Website der Nvidia CUDA Zone
Portal  Portalsymbol  Informatik

CUDA, welches dafür steht Compute Unified Device Architecture, ist ein GPU-Technologie was es ist Programmierer macht es möglich, die Programmiersprache C zu Algorithmen auf der durchführen GPU.

Verarbeitungsprozess mit CUDA
1. Daten vom Hauptspeicher in den GPU-Speicher kopieren
2. CPU weist den Prozess auf der GPU an
3. GPU läuft parallel in jedem Kern
4. Kopieren Sie das Ergebnis vom GPU-Speicher in das Hauptspeicher

CUDA wurde entwickelt von NVIDIA und das zu nutzen Rechnerarchitektur gibt es eine NVIDIA GPU und ein Special a Stream-Verarbeitung Fahrer erforderlich. CUDA funktioniert nur auf den neueren GrafikkartenGeForce 8-Serie, die die G8x-GPUs verwenden; NVIDIA garantiert, dass Programme, die für die GeForce 8-Serie entwickelt wurden, ohne Änderungen auf allen zukünftigen NVIDIA-Grafikkarten funktionieren. CUDA gibt Entwicklern Zugriff auf den nativen Befehlssatz und Erinnerung der massiven parallelen Rechenelemente in CUDA-GPUs. Mit CUDA, der NVIDIA GeForce basierte GPUs führen effektiv leistungsstarke, programmierbare offene Architekturen aus, wie die heutigen Zentralprozessors.

Vor-und Nachteile

CUDA hat einige Vor- und Nachteile gegenüber der herkömmlichen Allzweckberechnung auf GPUs (GPGPU) durch die Verwendung von APIs.

Leistungen:

  • Verwendet Standard C, mit einigen einfachen Erweiterungen;
  • Verstreute Schreibvorgänge - Code kann an beliebige Adressen im Speicher schreiben;
  • geteilte Erinnerung;
  • Schnellere Downloads und Readbacks zur und von der GPU;
  • Volle Unterstützung für ganzzahlige und bitweise Operationen.

Nachteile:

  • Unterstützt nur bilineare Texturfilterung - Mipmapped-Texturen und anisotrope Filterung werden noch nicht unterstützt;
  • Rekursive Funktionen werden nicht unterstützt;
  • Einige Abweichungen von IEEE 754 Standard. Denormals und Signalisierungs-NaNs werden nicht unterstützt, es werden nur zwei Rundungsmethoden unterstützt (Chop und Round-to-Nearest Even);
  • CUDA-fähige GPUs werden nur von NVIDIA (GeForce, Quadro, Tesla) hergestellt.

Unterstützung

Eine Tabelle mit Geräten, die CUDA offiziell unterstützen (Viele Anwendungen benötigen mindestens 256 MB VRAM).[1]

Nvidia GeForce
GeForce GTX TITAN-Z
Geforce GTX TITAN-X
GeForce GTX TITAN SCHWARZ
GeForce GTX TITAN
GeForce GTX 1080 Ti
GeForce GTX 1080
GeForce GTX 1070 Ti
GeForce GTX 1070
GeForce GTX 1060 (6GB)
GeForce GTX 1060 (3GB)
GeForce GTX 1050 Ti
GeForce GTX 1050
GeForce GTX 980 Ti
GeForce GTX 980
GeForce GTX 970
GeForce GTX 960
GeForce GTX 950
GeForce GTX 780 Ti
GeForce GTX 780
GeForce GTX 770
GeForce GTX 750
GeForce GTX 760 (OEM)
GeForce GTX 760
GeForce GTX 690
GeForce GTX 680
GeForce GTX 680M
GeForce GTX 670
GeForce GTX 660
GeForce GTX 660 Ti
GeForce GTX 660
GeForce GTX 660M
GeForce GTX 650 Ti
GeForce GTX 650
GeForce GTX 650M
GeForce GT 640
GeForce GTX 640M
GeForce GTX 590
GeForce GTX 580
GeForce GTX 570
GeForce GTX 555
GeForce GTX 480
GeForce GTX 470
GeForce GTX 465
GeForce GTX 460
GeForce GTX 295
GeForce GTX 285
GeForce GTX 280
GeForce GTX 275
GeForce GTX 260
GeForce GTS 250
GeForce GTS 240
GeForce GT 240
GeForce GT 230
GeForce GT 220
GeForce 210/G210
GeForce 9800 GX2
GeForce 9800 GTX
GeForce 9800 GTX
GeForce 9800 GT
GeForce 9600 GSO
GeForce 9600 GT
GeForce 9500 GT
GeForce 9400 GT
GeForce 9400 mGPU
GeForce 9300 mGPU
GeForce 9100mGPU
GeForce 8800 Ultra
GeForce 8800 GTX
GeForce 8800 GTS
GeForce 8800 GT
GeForce 8800GS
GeForce 8600 GTS
GeForce 8600 GT
GeForce 8600mGT
GeForce 8500 GT
GeForce 8400GS
GeForce 8300mGPU
GeForce 8200mGPU
GeForce 8100mGPU
Nvidia GeForce Mobile
GeForce GTX 285M
GeForce GTX 840M
GeForce GTX 280M
GeForce GTX 260M
GeForce GTS 360M
GeForce GTS 350M
GeForce GTS 260M
GeForce GTS 250M
GeForce GT 555M
GeForce GT 540M
GeForce GT 335M
GeForce GT 330M
GeForce GT 325M
GeForce GT 320M
GeForce GT 240M
GeForce GT 230M
GeForce GT 220M
GeForce G210M
GeForce GTS 160M
GeForce GTS 150M
GeForce GT 130M
GeForce GT 120M
GeForce G110M
GeForce G105M
GeForce G103M
GeForce G102M
GeForce G100
GeForce 9800M GTX
GeForce 9800M GTS
GeForce 9800M GT
GeForce 9800M GS
GeForce 9700M GTS
GeForce 9700M GT
GeForce 9650M GT
GeForce 9650M GS
GeForce 9600M GT
GeForce 9600M GS
GeForce 9500M GS
GeForce 9500M G
GeForce 9400M G
GeForce 9300M GS
GeForce 9300M G
GeForce 9200M GS
GeForce 9100M G
GeForce 8800M GTX
GeForce 8800M GTS
GeForce 8700M GT
GeForce 8600M GT
GeForce 8600M GS
GeForce 8400M GT
GeForce 8400M GS
GeForce 8400M G
GeForce 8200M G
Nvidia Quadro
Quadro FX 5800
Quadro FX 5600
Quadro FX 4800
Quadro FX 4700 X2
Quadro FX 4600
Quadro FX 3800
Quadro FX 3700
Quadro FX 1800
Quadro FX 1700
Quadro FX 580
Quadro FX 570
Quadro FX 380
Quadro FX 370
Quadro NVS 450
Quadro NVS 420
Quadro NVS 295
Quadro NVS 290
Quadro Plex 1000 Modell IV
Quadro Plex 1000 Modell S4
Nvidia Quadro Mobile
Quadro FX 3800M
Quadro FX 3700M
Quadro FX 3600M
Quadro FX 2800M
Quadro FX 2700M
Quadro FX 1800M
Quadro FX 1700M
Quadro FX 1600M
Quadro FX 880M
Quadro FX 770M
Quadro FX 570M
Quadro FX 380M
Quadro FX 370M
Quadro FX 360M
Quadro NVS 320M
Quadro NVS 160M
Quadro NVS 150M
Quadro NVS 140M
Quadro NVS 135M
Quadro NVS 130M
Nvidia Tesla
Tesla S1070
Tesla M1060
Tesla C1060
Tesla C870
Tesla D870
Tesla S870

Beispiel

Dieser Beispielcode in C lädt eine Textur aus einem Bild in ein Array auf der GPU:

cudaArray*cu_array;Textur<schweben,2>tex;// Ordnet Array zucudaChannelFormatDescBeschreibung=cudaCreateChannelDesc<schweben>();cudaMallocArray(&cu_array,&Beschreibung,Breite,Höhe);// Kopiert Bilddaten in das ArraycudaMemcpy(cu_array,Bild,Breite*Höhe*Größe von(schweben),cudaMemcpyHostToDevice);// Binden Sie das Array an die TexturcudaBindTextureToArray(tex,cu_array);// Kernel ausführendim3blockDim(16,16,1);dim3GitterDim(Breite/blockDim.X,Höhe/blockDim.ja,1);Kernel<<<GitterDim,blockDim,0>>>(d_odata,Höhe,Breite);cudaUnbindTexture(tex);__global__LeereKernel(schweben*odata,intHöhe,intBreite){ohne VorzeichenintX=blockIdx.X*blockDim.XthreadIdx.X;ohne Vorzeichenintja=blockIdx.ja*blockDim.jathreadIdx.ja;schwebenc=tex2D(tex,X,ja);odata[ja*BreiteX]=c;}

Unten ist ein Beispiel in Python, das das Produkt zweier Arrays auf der GPU berechnet. Die inoffiziellen Python-Anbindungen sind erhältlich bei PyCUDA.

importierenpycuda.driverAschedrvimportierennumpyimportierenpycuda.autoinitmod=drv.Quellmodul("""__global__ void multiply_them(float *dest, float *a, float *b){  const int i = threadIdx.x;  Ziel[i] = a[i] * b[i];}""")multiplizieren_them=mod.get_function("multiply_them")ein=numpy.zufällig.Randn(400).Achstyp(numpy.float32)b=numpy.zufällig.Randn(400).Achstyp(numpy.float32)dest=numpy.zeros_like(ein)multiplizieren_them(drv.aus(dest),drv.Im(ein),drv.Im(b),Block=(400,1,1))druckendest-ein*b

Zusätzliche Python-Bindungen zur Vereinfachung der Matrixmultiplikation finden Sie im Programm pycublas.

importierennumpyvonpycublasimportierenCUBLASMatrixein=CUBLASMatrix(numpy.Matte([[1,2,3],[4,5,6]],numpy.float32))B=CUBLASMatrix(numpy.Matte([[2,3],[4,5],[6,7]],numpy.float32))C=ein*BdruckenC.np_mat()

Programmiertools

Fermic

Die Generation von GPUs mit dem Codenamen Fermic (veröffentlicht am 27. März 2010, GeForce 400-Serie [GF100])[2] wurde von Grund auf entwickelt, um weitere Programmiersprachen zu unterstützen, wie z C . Erwartet, dass im Vergleich zur vorherigen Generation von Nvidia die achtfache maximale Gleitkommaleistung mit doppelter Genauigkeit erreicht wird Tesla GPU. Es führt auch einige neue Funktionen ein[3] wie:

  • Bis zu 512 CUDA-Kerne und 3 Milliarden Transistoren
  • NVIDIA Paralleler Datencache
  • NVIDIA GigaThread-Engine
  • Unterstützung für ECC-Speicher
  • Solide Unterstützung für Microsoft Visual Studio

Kepler

Kepler (2016) unterstützt auch CUDA.[4]

Volta

Volta ist die neueste Grafikkartengeneration im Jahr 2018. Es unterstützt auch CUDA.

Siehe auch

Externer Link