Suchen

Definition Was ist CUDA?

| Autor / Redakteur: Dipl.-Ing. (FH) Stefan Luber / Nico Litzel

CUDA ist eine von NVIDIA entwickelte Technologie und Programmierschnittstelle, mit der sich die Rechenleistung von Grafikprozessoren (GPUs) für Anwendungen nutzen lässt. Aufgrund der hohen Rechenleistung und parallelen Arbeitsweise der GPUs sind bei bestimmten Anwendungen enorme Performancegewinne erzielbar.

Firmen zum Thema

(Bild: © aga7ta - stock.adobe.com)

Die Abkürzung CUDA steht für Compute Unified Device Architecture. Es handelt sich um eine Schnittstellentechnologie und Computing-Plattform, mit der sich Grafikprozessoren ansprechen und auch für nicht grafikspezifische Berechnungen nutzen lassen. CUDA wurde von NVIDIA entwickelt und beschleunigt Programme, indem neben der CPU bestimmte Programmteile von einer oder mehreren GPUs parallelisiert bearbeitet werden.

Im Vergleich zu einer CPU besteht eine GPU aus einer größeren Anzahl parallel nutzbarer Cores, die eine Vielzahl von Berechnungen gleichzeitig ausführen können. Die Compute Unified Device Architecture ist mit Programmiersprachen wie Python, Fortran, C, C++ oder mit Software wie MATLAB nutzbar. CUDA besteht aus Bibliotheken, Entwicklungstools, Runtime-Umgebung und Compiler. Unterstützt wird die CUDA-Technologie von NVIDIA-GPUs aus verschiedenen Serien wie Tesla, GeForce, Quadro und anderen.

Im Gegensatz zu APIs wie DirectX und OpenGL ist CUDA nicht auf reine Multimediaanwendungen spezialisiert, sondern lässt sich für Applikationen unterschiedlichster Art verwenden. Veröffentlicht wurde CUDA erstmals im Jahr 2007. Die aktuelle Version ist 10.1 (Stand 2019) und ist für Betriebssysteme wie Linux, Windows oder macOS erhältlich. Das komplette CUDA-Toolkit kann direkt von den NVIDIA-Seiten heruntergeladen werden.

CUDA, Grafikprozessoren und die parallele Bearbeitung von Rechenaufgaben

Die Architektur einer CPU ist auf generelle Programmanforderungen ausgelegt und muss eine Vielzahl Befehle und Datentypen unterstützen. Neben einer geringen Anzahl von Kernen (Cores) nehmen Cache und Controller größere Teile der Architektur der CPU in Anspruch. Eine GPU hingegen ist auf Grafikberechnungen spezialisiert und arbeitet mit relativ wenigen Befehlen und vielen Cores. Dies ist darauf zurückzuführen, dass GPUs hauptsächlich für Pixelberechnungen konzipiert wurden. Die Architektur erlaubt es, viele einfache Befehle gleichzeitig an die Cores zu übertragen und parallel abzuarbeiten. Cache und Controller sind wesentlich einfacher aufgebaut und kleiner.

Liegt die Anzahl an Cores einer CPU im Bereich zwischen zwei und acht, haben moderne Grafikprozessoren teilweise bis zu mehrere tausend Cores. Eine GPU lässt sich mit CUDA nicht nur für Grafikberechnungen verwenden. Sie eignet sich für alle Anwendungen, die mit vielen parallelen Prozessen und gleichzeitigen Berechnungen arbeiten. CUDA und GPUs sind daher überall dort effizient einsetzbar, wo in Programmen viele Berechnungen parallel ablaufen müssen. Dies ist beispielsweise bei wissenschaftlichen Anwendungen oder bei Berechnungen im Umfeld der Künstlichen Intelligenz (KI) der Fall.

CUDA, OpenGL und DirectX

Auch OpenGL (Open Graphics Library) oder DirectX von Microsoft ermöglichen die Interaktion von Anwendungscode mit einer GPU. Allerdings sind OpenGL oder DirectX speziell auf die von Multimediaanwendungen benötigten Prozesse und Berechnungen ausgelegt. Will man die Rechenleistung eines Grafikprozessors für nicht grafikspezifischen Programmcode nutzen, ist eine Umsetzung der Berechnungen auf grafische Operatoren notwendig. Diese Umsetzung sorgt für eine zusätzliche Komplexität und schränkt die Funktionalität ein.

CUDA bietet ein vollständiges Programmiermodell, das die Unzulänglichkeiten von OpenGL und DirectX in diesem Bereich überwindet. Anwendungen, die nicht auf grafische Operationen spezialisiert sind, können dank des Programmiermodells CUDA GPUs einfach und effizient ansprechen. Der Entwickler erhält einen direkten, standardisierten Zugriff auf den Befehlssatz und den Speicher einer GPU.

Vorteile durch den Einsatz von CUDA

Der Einsatz von CUDA bietet unter anderem folgende Vorteile:

  • optimale Ausnutzung der Ressourcen eines Rechners durch die Verwendung der GPU und CPU für den Programmcode
  • hoher Performancegewinn bei parallelisierten Berechnungen aufgrund der besonderen Architektur der GPUs mit ihren vielen Cores
  • keine Notwendigkeit der Entwicklung und Bereitstellung spezieller Hardware für mehr Rechenleistung, sondern Nutzung der vorhandenen GPU
  • definierte Schnittstelle zur Nutzung der GPU-Rechenleistung
  • einsetzbar mit vielen NVIDIA-GPUs
  • kompatibel mit zahlreichen Programmiersprachen und Betriebssystemen

Anwendungsbereiche von CUDA

Obwohl es sich bei CUDA um eine herstellerspezifische Entwicklung von NVIDIA handelt, hat sich das Computing-Modell in vielen Bereichen etabliert. Die Compute Unified Device Architecture kommt im wissenschaftlichen und kommerziellen Bereich in vielen Anwendungen zum Einsatz. Unter anderem profitieren Anwendungen im Umfeld der Künstlichen Intelligenz, neuronaler Netze und des Machine Learnings von der hohen Rechenleistung der Grafikprozessoren. So nutzen beispielsweise das Finanzwesen, die Energiewirtschaft und die Seismologie oder Geologie CUDA für diverse Anwendungen und Modellrechnungen.

Eine sehr bekannte Anwendung von CUDA ist das Projekt SETI@home der Universität Berkeley, das nach außerirdischem intelligentem Leben sucht. Ein weiterer wichtiger Einsatzbereich von CUDA ist die Video- und Bildbearbeitung. So nutzt die Medizin CUDA beispielsweise für die CT-Bildrekonstruktionen.

(ID:46053380)

Über den Autor