General Purpose Computation on Graphics Processing Unit, kurz GPGPU, bezeichnet die Verwendung des Grafikprozessors für Berechnungen außerhalb der Grafikberechnungen, seinem eigentlichen Aufgabenbereich. Dies können z. B. Berechnungen zu technischen oder wirtschaftlichen Simulationen sein.
Unter Umständen kann so eine Geschwindigkeitssteigerung im Vergleich zur CPU erzielt werden.
Inhaltsverzeichnis |
GPGPU ist eine Entwicklung im Bereich der Grafik-Hardware, die Algorithmen für gewöhnliche Probleme, die sonst auf der CPU ausgeführt werden, auf Grund der höheren Geschwindigkeit auf der GPU ausführt.
Die Beschränkung der GPU auf spezielle Probleme ohne großen Verwaltungsaufwand ermöglicht es, diese so zu entwerfen, dass der Großteil der Transistoren für Rechenoperationen verwendet wird und nicht für Steuerungsaufgaben und Caching, wie es auf CPUs der Fall ist. Hierdurch ergibt sich eine optimale Leistung bei GPGPU-Anwendungen, die eine hohe arithmetische Dichte aufweisen (also Algorithmen, bei denen verhältnismäßig viele Rechenoperationen und wenige Lese-/Schreiboperationen durchgeführt werden). In vielen Aufgabenbereichen des nicht-fotorealistischen Renderns ist dies der Fall, sodass dieser Bereich als Grenze zwischen "normaler" Grafikberechnung und allgemeiner Verwendung der GPU die Forschung auf dem Gebiet wesentlich vorantreibt.
Die Anfänge des GPGPU sind gleichzusetzen mit den Anfängen der programmierbaren Grafikpipeline, also im Jahr 2000. Auch wenn heute viele GPGPU-Anwendungen einzelne Elemente der Fixed-Function-Pipeline wie z. B. Z-Culling verwenden, so ist die Flexibilität nicht groß genug, um allgemeinen Aufgaben gerecht zu werden. Bekanntheit erreichte GPGPU sicherlich durch einen entsprechenden Kurs auf der SIGGRAPH 2004 [1]. Als ein erstes Referenzwerk kann wohl GPU GEMS 2 angesehen werden, welches 2005 erschienen ist.
Der Vorteil der Verwendung der GPU gegenüber der CPU liegt in der höheren Rechenleistung und der höheren Speicherbandbreite:
| Rechenleistung | Speicherbus-Datenrate | |
|---|---|---|
| ATI RV770 | 1200 GFlops [2] | n/a |
| NVIDIA GeForce GT200 | 1063 GFlops | n/a |
| NVIDIA GeForce 6800 | 60 GFlops | 18 GByte/s |
| Intel Core 2 Quad Q6600 | 21,4 GFlops [2] | n/a |
| Intel Pentium 4 mit SSE3, 3,6 GHz |
14,4 GFlops | 5 GByte/s |
Die Geschwindigkeit wird hauptsächlich durch den hohen Grad an Parallelität der Rechenoperationen des Grafikprozessors erreicht. Die GPU hat folgende Rechnerarchitekturen implementiert
sowie
Ein weiterer Vorteil ist der geringe Preis im Vergleich zu ähnlich schnellen anderen Lösungen sowie die Tatsache, dass Grafikkarten heute in nahezu jedem PC zu finden sind.
Viele von der GPU gelösten Aufgaben sind nicht einheitlich spezifiziert und die Unterschiede zwischen den Herstellern sind größer als die bei (gängigen) CPUs. Außerdem sind durch gewisse Einschränkungen (z. B. ist kein Scattering möglich) sowie die Parallelität spezielle Konzepte erforderlich. Dies führt dazu, dass beispielsweise die minimale Komplexität für das Sortieren
beträgt.
Auch haben Grafikkarten üblicherweise relativ wenig Speicher, was man jedoch durch spezielle GPGPU-Grafikkarten mit mehr Speicher, aber dafür ohne Bildschirmausgabe zu kompensieren versucht (z. B. Nvidia Tesla, AMD FireStream). Der Speicher dieser Grafikkarten verfügt oft auch über spezielle Fehlerkorrekturverfahren. Die Speicherbausteine herkömmlicher Grafikkarten für den Endverbraucher sind nicht selten von schlechterer Qualität, so dass für Berechnungen entsprechende Maßnahmen ergriffen werden müssen, damit sichergestellt werden kann, dass die Ergebnisse korrekt sind.
Da in der aktuellen Rechnerorganisation kein Mechanismus vorgesehen ist, der Programme direkt auf der GPU ausführbar macht, ist es notwendig, eine auf der CPU ausgeführte Rahmenanwendung zu implementieren, die die entsprechenden Funktionsaufrufe der Grafikkarte tätigt. Soll beispielsweise eine Anwendung mit Hilfe von Fragment-Shadern durchgeführt werden, so müssen hierzu zunächst Fragments erzeugt werden, was in der Regel durch das Rendern eines Rechtecks erreicht wird. Die zu verwendenden Daten, die Anweisung, ein Rechteck bei aktiviertem Fragment-Shader zu rendern sowie den Shader-Code selbst erhält die Grafikkarte dabei von der CPU-basierten Rahmenanwendung. Das Ergebnis muss ebenfalls von der Rahmenanwendung weiterverarbeitet (z. B. gespeichert) werden, falls es nicht nur in Form des berechneten Framebuffers angezeigt werden soll.
Für Lexikon-Artikel gilt die Lizenz „Creative Commons Attribution/Share Alike“.
Die Wikipedia ist eine Enzyklopädie, deren Inhalte frei nutzbar sind und es immer sein werden.