CUDA

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
CUDA
Entwickler Nvidia
Aktuelle Version 6.5
(21. August 2014)
Betriebssystem Windows, Linux, Mac OS X
Kategorie GPGPU
developer.nvidia.com

CUDA (früher auch Compute Unified Device Architecture genannt) ist eine von Nvidia entwickelte Programmier-Technik, mit der Programmteile durch den Grafikprozessor (GPU) abgearbeitet werden können. In Form der GPU wird zusätzliche Rechenkapazität bereitgestellt, wobei die GPU im Allgemeinen bei hochgradig parallelisierbaren Programmabläufen (hohe Datenparallelität) signifikant schneller arbeitet als die CPU. CUDA wird vor allem bei wissenschaftlichen und technischen Berechnungen eingesetzt.

Technische Details[Bearbeiten]

Der nur für Grafikberechnungen genutzte Grafikprozessor kommt mittels der CUDA-API auch als Koprozessor zum Einsatz. Als Anwendungsbeispiele seien die Lösung seismologischer oder geologischer Probleme oder die Simulation elektromagnetischer Felder genannt. Anwendung findet CUDA unter anderem bei dem Projekt SETI@home im Rahmen der Berkeley Open Infrastructure for Network Computing (BOINC). Allgemein lässt es sich nur dort effizient anwenden, wo (neben anderen Bedingungen) Berechnungen stark parallelisiert werden können.

Eingesetzt werden kann die CUDA-Technologie mit einer Grafikkarte ab der „GeForce 8“-Serie und auf den Quadro-Karten ab der Quadro FX 5600. Die Tesla-Karten von Nvidia wurden zum Einsatz für Hochleistungsrechnen optimiert und werden überwiegend mit CUDA angesprochen, unterstützen aber auch offene Standards wie OpenCL. Einigen fehlen sogar die Anschlüsse für Monitore.

Seit dem Zukauf der PhysX-Technologie von Ageia entwickelt Nvidia diese Technologie weiter und hat sie auf CUDA umgeschrieben. PhysX wird in zahlreichen neuen Spielen eingesetzt.

Im Oktober 2012 wurde von Nvidia die CUDA-Version 5.0 veröffentlicht.

Programmieren[Bearbeiten]

Programmierer verwenden zurzeit C for CUDA (C mit Nvidia-Erweiterungen). Es existieren auch Wrapper für die Programmiersprachen Perl, Python, Ruby, Java, Fortran und .NET bzw. Anbindungen an MATLAB und Mathematica. Nvidia erstellte CUDA mit dem optimierenden C-Compiler Open64.[1] Seit der Fermi-Architektur kann auch C++ verwendet werden.

Als CUVID (CUDA Video Decoding API) bezeichnet man eine Programmierschnittstelle für Decodieren von Videos.[2]

Alternativen[Bearbeiten]

Beispiele für andere GPGPU-Lösungen:

  • OpenCL ist ein von der Khronos Group initiierter offener Standard, der für alle Grafikkarten funktioniert und für die meisten Betriebssysteme verfügbar ist.
  • DirectCompute eine in die DirectX-API integrierte Schnittstelle für GPGPUs.

Software[Bearbeiten]

Eines der ersten Programme, die CUDA unterstützen, ist der Client von folding@home, der die Geschwindigkeit biochemischer Berechnungen vervielfacht. Am 17. Dezember 2008 folgte der Client von SETI@home, der die Suche nach außerirdischem Leben um den Faktor 10 beschleunigt. Nvidia brachte die Software „Badaboom“ heraus, ein Videokonverter, der bis zu 20-mal schneller Videos konvertieren kann, als durch eine Berechnung mit der CPU. Andere Programme, welche CUDA verwenden, sind „TMPGEnc“, Sorenson Squeeze 7, Adobe Photoshop ab CS4 – hierbei wird der Einsatz von Filtern beschleunigt –, Adobe Premiere Pro ab CS5.5 und Mathematica 8+.

Kritik, Nachteile[Bearbeiten]

Grafikprozessoren (GPUs) sind Prozessoren mit einem anwendungsspezifischen Design, daher kennen GPUs eher exotische Datentypen wie 9 Bit oder 12 Bit mit Festkommastelle, verzichten hingegen aber häufig auf die für Allzweck-CPUs und NPUs üblichen Registerbreiten von 32, 48, 64 oder 80 Bit (usw.). Somit sind Berechnungen, beispielsweise mit den Genauigkeiten nach IEEE 754 (64 Bit für double precision), häufig nicht im Befehlssatz der GPU vorgesehen und müssen relativ aufwändig per Software emuliert werden. Daher eignen sich GPUs vor allem zur Berechnung von Datentypen, die mit vergleichsweise geringen Bit-Breiten arbeiten.

Zum aktuellen Stand (2010) fertigen erste Hersteller bereits erweiterte GPUs, die neben den von der GPU benötigten Datentypen auch universelle Datentypen und Operationen z. B. zur direkten Berechnung IEEE 754 konformer Ergebnisse beinhalten. Als einer der aktuell führenden Hersteller stellt Nvidia mit der Fermi-Generation GPUs bereit, die sowohl 32-Bit-Integer, als auch einfach- und doppelt-genaue Gleitkomma-Datenformate nativ bereitstellen (float/double).[3]

Ein anderer Nachteil ist die Anbindung an die Rechnerarchitektur, sie erfolgt bei aktuellen GPUs meist über PCIe und bringt, im Vergleich zur direkten Anbindung von Prozessoren, schlechtere (höhere) Latenzzeiten und geringere I/O-Durchsatzraten mit sich. Daher lohnt die Auslagerung nur bei Funktionen mit einigem Rechenaufwand – besonders dann, wenn eine GPU für diese Aufgaben vom Befehlssatz her (z. B. für große Matrizen) besser geeignet ist.

Weiter wird die feste Bindung an einen Hersteller kritisiert. Nutzt man CUDA, im Unterschied zu Bibliotheken für CPUs mit MMX- oder SSE-Erweiterungen (die praktisch auf allen CPUs der verschiedenen Hersteller von x86-Prozessoren laufen), so bindet man ein Programm an den GPU-Hersteller Nvidia und somit an das Vorhandensein von Nvidia-Hardware. OpenCL ist universeller und bietet eine Implementierung für GPUs von Nvidia,[4] AMD (vormals ATI),[5] VIA,[6] S3[7] und Anderen. Dazu ist eine CPU-Unterstützung für x86-Prozessoren über die SSE3-Erweiterungen implementiert, weiter bietet IBM eine OpenCL-Implementierung für die Power-Architektur und die Cell Broadband Engine an.[8] Aus dem breiteren Ansatz von OpenCL ergibt sich im Vergleich von CUDA mit OpenCL (auf identischer Nvidia-Hardware) allerdings ein merklicher Performance-Nachteil. Bei der Verwendung von OpenCL sind je nach Problemstellung Einbußen zwischen 5 und 50 % zu beobachten.[9][10]

Siehe auch[Bearbeiten]

Literatur[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatMike Murphy: Nvidia’s Experience with Open64. Abgerufen am 6. August 2009 (MS Word; 83 kB).
  2. LAV CUVID
  3. Fermi Compute Architecture Whitepaper, Nvidia über Fermi (PDF; 876 kB) abgerufen am 21. September 2010
  4. Nvidia zu OpenCL (28. September 2009)
  5. AMD zu ATI Stream und OpenCL (1. Oktober 2009)
  6. VIA Brings Enhanced VN1000 Graphics Processor (10 Dezember 2009)
  7. S3 Graphics launched the Chrome 5400E embedded graphics processor (27. Oktober 2009)
  8. OpenCL Development Kit for Linux on Power (30. Oktober 2009)
  9. A Performance Comparison of CUDA and OpenCL(12. August 2010; PDF; 62 kB)
  10. OpenCL GPGPU Performance OpenCL vs. CUDA/STREAM (1. November 2009)