WikiDer > CUDA
CUDA | ||||
| Entwickler | NVIDIA | |||
| Veröffentlicht | 23. Juni 2007 | |||
| Letzte Version | 9.1 (12. September 2017) | |||
| Status | Veröffentlicht | |||
| Betriebssystem | Windows XP , Windows Server 2003 , Linux und Mac OS X | |||
| Kategorie | GPU | |||
| Lizenz | ProprietärFreeware | |||
| Webseite | (und) Offizielle Website der Nvidia CUDA Zone | |||
| ||||
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.
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]
|
|
|
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*bZusä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
- Python - PyCUDA
- Java - jCUDA, JCuda, JCublas, JCufft
- .GERADE - CUDA.NET
- MATLAB - MATLAB-Plug-in für CUDA, GPUmat, Jacke
- fortran - FORTRAN CUDA, PGI CUDA Fortran Compiler
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
- OpenCL
- GPU-Cluster
- Jacke, eine CUDA-Engine für MATLAB
- Skalierbare Link-Schnittstelle (SLI)
Externer Link
- (und) Offizielle Website
| Quellen, Anmerkungen und/oder Verweise |
| Nvidia Grafikprozessoren | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|