GPU-Computing
Mit „GPU-Computing“ (wörtl.: Grafikprozessorberechnungen) ist die Verwendung von Grafikprozessoren für allgemeine wissenschaftliche und technische Berechnungen gemeint.
Beim GPU-Computing werden eine CPU und ein Grafikprozessor gemeinsam für heterogene Berechnungen eingesetzt. Der sequenzielle Teil der Anwendung läuft auf der CPU und der rechenintensive Teil auf dem Grafikprozessor. Aus Sicht des Benutzers läuft die Anwendung dadurch schneller, da die Verwendung des leistungsstarken Grafikprozessors die Ausführung beschleunigt.

Der Entwickler der Anwendung muss diese so modifizieren, dass die rechenintensiven Kernels dem Grafikprozessor zugeordnet werden. Die übrigen Teile der Anwendung verbleiben auf der CPU. Dass eine Funktion dem Grafikprozessor zugeordnet wird, beinhaltet auch, sie so umzuschreiben, dass die Parallelität in der Funktion offengelegt wird, und C-Schlüsselwörter zum Verschieben von Daten vom und zum Grafikprozessor hinzuzufügen.
GPU-Computing wird durch die massiv-parallele Architektur der NVIDIA-Grafikprozessoren, bekannt als CUDA-Architektur, möglich gemacht. Die CUDA-Architektur besteht aus Hunderten von Prozessorkernen, die im Verbund wirken, um die in der Anwendung abgelegten Daten zu verarbeiten.
Der Grafikprozessor der Tesla-10-Serie gehört zur zweiten Generation der CUDA-Architektur mit Funktionen, die für wissenschaftliche Anwendungen optimiert wurden. Solche Funktionen sind unterem Hardwareunterstützung mit doppelt genauen Gleitkommaberechnungen nach dem IEEE-Standard, lokale Datencaches in Form eines über den Grafikprozessor verteilten gemeinsam genutzten Speichers und Zugriffe auf miteinander verbundene Speicher.
Prof. Jack Dongarra
Leiter des Innovative Computing Laboratory
The University of Tennessee
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 erkannte das Potenzial, das darin lag, diese Leistung breiteren Wissenschaftskreisen verfügbar zu machen. NVIDIA entschloss sich, in die Modifizierung des Grafikprozessors zu investieren, um ihn für wissenschaftliche Anwendungen voll programmierbar zu machen, und zwar in Hochsprachen wie C und C++. 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.

Die erste Programmiersprache, die NVIDIA unterstützt hat, war C. Eine Reihe von Software-Entwicklertools für C für CUDA ermöglicht es, dass der Grafikprozessor in der Sprache C und nur mit einem minimalen Vorrat an Schlüsselwörtern oder Erweiterungen programmiert werden kann. In Kürze werden auch Fortran, OpenCL und weitere 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.