GPU Computing oder GPGPU bezeichnet die Verwendung eines Grafikprozessors (engl. Graphics Processing Unit oder GPU) für allgemeine Berechnungen im wissenschaftlich-technischen Bereich.
Beim GPU Computing werden eine CPU und ein Grafikprozessor gemeinsam für Berechnungen eingesetzt. Der sequenzielle Teil der Anwendung läuft auf der CPU, während der Grafikprozessor die Ausführung des rechenintensiveren Teils der Anwendung beschleunigt. Aus Sicht des Benutzers läuft die Anwendung dadurch schneller, da die Verwendung des leistungsstarken Grafikprozessors die Ausführung beschleunigt.

Grafikprozessoren wurden über die letzten Jahre immer weiter entwickelt und verfügen heute über eine Gleitkommaleistung im Terraflopbereich. NVIDIA ist ein Pionier im Gebiet der GPGPUs und hat allgemeine Berechnungen in den Jahren 2006-2007 durch die Einführung der neuen, massiv-parallelen „CUDA“ Architektur maßgeblich beschleunigt. Die CUDA-Architektur besteht aus Hunderten von Prozessorkernen, die im Verbund wirken, um die in der Anwendung abgelegten Daten zu verarbeiten.
Der Erfolg von GPGPUs in den letzten Jahren ist auf die einfache Programmierbarkeit mit dem parallelen CUDA Programmiermodell zurückzuführen. Mit diesem Programmiermodell kann der Anwendungsentwickler seine Anwendung dahingehend bearbeiten, dass die rechenintensiven Kernel auf den Grafikprozessor ausgelagert werden. Der Rest der Anwendung läuft auf der CPU. Um eine Funktion dem Grafikprozessor zuzuweisen, muss sie so umgeschrieben werden, dass ihre Parallelität genutzt werden kann. Außerdem müssen bestimmte „C“ Keywords hinzugefügt werden, um Daten zum und vom Grafikprozessor zu übertragen. Der Entwickler steht damit vor der anspruchsvollen Aufgabe, Zehntausende Threads gleichzeitig zu starten. Um diese Threads und das Thread-Scheduling kümmert sich die Grafikprozessor Hardware.
Die Grafikprozessoren der Tesla 20 Serie basieren auf der neuen „Fermi“ Architektur, der dritten Generation der CUDA Architektur. Fermi ist für wissenschaftliche Anwendungen optimiert. Wesentliche Merkmale von Fermi sind Hardwareunterstützung für mehr als 500 Gigaflops doppelte Gleitkommapräzision nach IEEE Standard, L1 und L2 Caches, ECC Schutz vor Speicherfehlern, lokale, benutzerverwaltete Datencaches in Form von verteiltem, gemeinsam genutztem Speicher auf dem ganzen Grafikprozessor, Verschmelzung von Speicherzugriffen, und viele mehr.
Die Geschichte des GPU-Computing
Am Anfang standen Grafikchips als Grafikpipelines mit festgelegten Funktionen. Im Laufe der Jahre wurden diese Grafikchips in immer größerem Umfang programmierbar, sodass NVIDIA schließlich den ersten Grafikprozessor (GPU) vorstellen konnte. In den Jahren 1999–2000 begannen Forscher auf Gebieten wie der medizinischen Bildgebung und des Elektromagnetismus und ganz besonders Computerwissenschaftler, Grafikprozessoren für allgemeine Rechneranwendungen einzusetzen. Sie fanden heraus, dass das hervorragende Leistungsverhalten der Grafikprozessoren bei Gleitkommaberechnungen bei einer Vielzahl von wissenschaftlichen Anwendungen zu einer gewaltigen Leistungssteigerung führte. Eine neue Entwicklung mit Namen GPGPU (General Purpose Computing on GPUs – „allgemeine Berechnungen auf Grafikprozessoren“) war geboren.
Das Problem dabei war jedoch, dass GPGPU zur Programmierung des Grafikprozessors spezielle Grafikprogrammiersprachen wie OpenGL und Cg erforderte. Die Entwickler mussten ihren wissenschaftlichen Anwendungen das Aussehen von Grafikanwendungen geben und bei Problemstellungen mit Dreiecken und Polygonen operieren. Dadurch konnte die enorme Leistung der Grafikprozessoren nicht in dem gewünschten Ausmaß der Wissenschaft zugänglich gemacht werden.
NVIDIA hat erkannt, welches Potenzial darin steckt, diese Leistung der gesamten Wissenschaft zur Verfügung zu stellen. Daher wurde beschlossen, in eine Veränderung des Grafikprozessors zu investieren, um ihn für wissenschaftliche Anwendungen vollständig programmierbar zu machen und Unterstützung für High-Level Programmiersprachen wie C, C++ und Fortran hinzuzufügen. Daraus entwickelte sich die CUDA-Architektur für Grafikprozessoren.
CUDA-Parallelarchitektur und paralleles CUDA-Programmiermodell
Die parallele CUDA-Hardwarearchitektur tritt zusammen mit dem parallelen CUDA-Programmiermodell auf. Dieses stellt einen Satz Abstraktionen zur Verfügung, mit denen sich Fein und Grobdaten und die parallele Ausführung von Aufgaben formulieren lassen. Der Programmierer kann wählen, ob er die Parallelität in Hochsprachen wie C, C++ oder Fortran oder aber mit Treiber-APIs wie OpenCL™ oder DirectX™ 11 Compute formulieren will.

Heute unterstützt NVIDIA die Programmierung des Grafikprozessors mit C, C++, Fortran, OpenCL und DirectCompute. Ein Satz Software-Entwicklungstools, Bibliotheken und Middleware stehen ebenfalls für Entwickler zur Verfügung, wie oben dargestellt und hier einsehbar. Grafikprozessoren sind jetzt mit C und einem minimalen Satz an Keywords und Erweiterungen programmierbar. In naher Zukunft werden auch Fortran, OpenCL und andere Sprachen unterstützt werden.
Das parallele CUDA-Programmiermodell leitet Programmierer an, das jeweilige Problem grob in mehrere Unterprobleme aufzuteilen, die unabhängig voneinander parallel gelöst werden. Fein aufgelöste Parallelität in den Unterproblemen wird dann so formuliert, dass jedes Unterproblem gemeinsam parallel gelöst werden kann.
OpenCL ist eine Marke von Apple Inc., in Lizenz verwendet von der Khronos Group Inc.
DirectX ist eine eingetragene Marke der Microsoft Corporation.