mini|Schema mit Funktionseinheiten eines modernen Grafikprozessors. Für DIF siehe Video Display Controller. mini|NV20-GPU einer Nvidia GeForce 3

Ein Grafikprozessor (, kurz GPU; dieses teilweise lehnübersetzt Grafikeinheit und seltener auch Video-Einheit oder englisch sowie , kurz VPU genanntDer ehemalige Grafikchip-Hersteller 3DLabs nutzte die Abkürzung VPU, um auf die volle Programmierbarkeit von Fragment- und Vertex-Shadern seiner Produkte zu verweisen.) ist ein auf die Berechnung von Grafiken spezialisierter und optimierter Prozessor für Computer, Spielkonsolen und Smartphones. Zusätzlich gibt er die berechneten Grafiken an ein Display oder mehrere aus. Früher hatten Grafikkarten gar keine eigenen Rechenfähigkeiten und waren reine Ausgabekarten („Videoadapter“, anfangs sogar noch in Text- und Grafikadapter unterschieden; siehe auch Videomodus). Ab Mitte der 1990er Jahre wurden zuerst 2D-Fähigkeiten und später rudimentäre 3D-Fähigkeiten integriert, der Grafikprozessor war festverdrahtet oder seine Programmierbarkeit war beschränkt auf seine Firmware. Seit Mitte der 2000er Jahre kann der Hauptprozessor (CPU) Programme auf die Grafikkarte oder auch in die Grafikeinheit laden, welche so in beschränktem Rahmen flexibel programmierbar ist.

Grafikprozessoren findet man auf dem von Hauptprozessoren mit integrierter Grafikeinheit, oder auf der Hauptplatine als Teil des Chipsatzes (Onboard, als integrierter Grafikprozessor) – beides oft auch als „iGPU“ (für integrierte Grafikeinheit bzw. Grafikkarte) bezeichnet – wie auch auf Erweiterungskarten oder direkt auf der Hauptplatine (meist verlötet, etwa bei Notebooks) – auch als „dedizierte“ Grafikeinheit/Grafikkarte, manchmal auch „dGPU“, bezeichnet. Auf einer Grafikkarte sind mehrere Grafikprozessoren (GPUs) möglich, bzw. bei Steckkarten in weiteren Steckplätzen auch mehrere Grafikkarten pro Computer, was allerdings von Hard- und Software unterstützt sein muss (Multi-GPU). Nicht nur für Notebooks gibt es externe Erweiterungsboxen, in die eine Grafikkarte gesteckt werden kann – oft mit „eGPU“ (für „externe“ GPU) bezeichnet. In Dockingstationen kann eine eigene Grafikeinheit verbaut sein. Fast alle heute produzierten Grafikprozessoren für Personal Computer stammen von AMD, Intel oder Nvidia. Die Integration auf Steckkarten liegt dagegen bis auf Sonder- und Referenzmodelle seit einiger Zeit bei anderen Herstellern.

Komponenten mini|Ein Blockdiagramm des Radeon R300. Display interface (deu. Bildschirm-Schnittstelle) repräsentiert display controller + RAMDAC.

Display controller

Zur Anbindung eines Bildschirms an einen Computer – etwa über MDA, CGA etc. – benötigt man einen sogenannten Bildschirm-Adapter (analog Netzwerk-Adapter). Der Chip auf der (z. B.) ISA-Karte ist ein vergleichsweise simpler Video Display Controller. Etwaige Berechnungen zur Bildsynthese erfolgen auf der CPU, der Display Controller verpackt diesen Datenstrom lediglich in ein entsprechendes Signal (CGA, EGA, …) für den Bildschirm. Die Karte enthält zusätzlich ein wenig Speicher, den sogenannten Bildschirmpuffer, engl. display buffer.

RAMDAC

Der RAMDAC ist zuständig für die Umwandlung von digitalen Daten, welche im Videospeicher/Bildschirmpuffer vorliegen, in ein analoges Bildsignal.

GCA

Das englisch sogenannte (kurz ) oder auch die „3D-Engine“ (aus dem englischen ‚‘ entlehnt) können auch für Grafik-Berechnungen ausgelegt sein. Das Array besteht zudem aus den sogenannten Shader-Prozessoren, beinhaltet aber auch den Geometry-Prozessor (siehe auch Geometry-Shader).

Video-Kompression/-Dekompression Zur Verringerung der Datenmenge eines Videos sind verschiedene Kompressions-Algorithmen entwickelt worden. Diese beschreiben umfangreiche Berechnungen, welche mit dem – bereits an sich umfangreichen – unkomprimierten Datenstrom durchgeführt werden müssen, um daraus den komprimierten zu erhalten. Zum Abspielen eines komprimierten Videos, sind entsprechende Berechnungen auf den komprimierten Datenstrom durchzuführen.

Diese Berechnungen können ganz oder anteilig auf der Grafikkarte, dem Grafikprozessor oder auf einer anderen dafür entwickelten anwendungsspezifischen integrierten Schaltung durchgeführt werden.

Geschichte

Vorläufer der Grafikprozessoren gab es seit etwa Anfang der 1980er Jahre. Damals dienten diese nur als Bindeglied zwischen der CPU und der Bildschirmausgabe und wurden daher Bildschirm-Adapter (analog Netzwerk-Adapter) Video Display Controller genannt. Weder hatten sie die Funktionalität, noch waren sie für eigenständige Berechnungen ausgelegt. Zunächst waren sie vor allem für eine selbständige Text- und Grafikausgabe zuständig und schonten damit den Systembus. Einige konnten später immerhin Sprites selbständig darstellen.

Das änderte sich Mitte der 1980er Jahre mit Rechnern wie dem Commodore Amiga oder dem Atari ST. Diese verfügten bereits über Blitting-Funktionen. Im x86-PC-Bereich kamen Grafikprozessoren mit solchen Zusatzfunktionen mit der zunehmenden Verbreitung grafischer Oberflächen auf, insbesondere dem Betriebssystem Windows. Bausteine wie der ET-4000/W32 konnten einfache Befehle (z. B. „zeichne Viereck“) selbständig abarbeiten. Wegen des hauptsächlichen Einsatzes unter Windows wurden sie auch „Windows-Beschleuniger“ genannt.

Mitte der 1990er Jahre kamen die ersten 3D-Beschleuniger auf den Markt. Diese Grafikprozessoren waren in der Lage, einige Effekte und dreiecksbasierte Algorithmen (wie beispielsweise Z-Puffern, Texture Mapping und Antialiasing) auszuführen. Besonders dem Bereich Computerspiele verhalfen solche Steckkarten (wie die 3dfx Voodoo Graphics) zu einem Entwicklungsschub. Zur damaligen Zeit waren solche Anwendungen vorrangig durch den Prozessor begrenzt.

Die Bezeichnung GPU wurde erstmals von Nvidia intensiv genutzt, um die 1999 erschienene Nvidia-GeForce-256-Serie zu vermarkten. Diese Grafikkarte war (im Endkunden-Geschäft) als erste mit einer T&L-Einheit ausgestattet.

GPUs waren und sind wegen ihrer Spezialisierung auf Grafikberechnungen und Konzentration auf massiv parallelisierbare Aufgaben den CPUs in ihrer theoretischen Rechenleistung meist deutlich überlegen. Eine CPU ist für universelle Datenverarbeitung ausgelegt, die einzelnen CPU-Kerne sind zudem meist für schnelles Abarbeiten von sequentiellen Aufgaben optimiert. Die GPU zeichnet sich hingegen durch ein hohes Maß an Parallelisierung aus, da sich 3D-Berechnungen sehr gut parallelisieren lassen; dafür ist sie für 3D-Berechnungen spezialisiert, sie ist bei Berechnungen schnell, die diese Funktionalität verwenden. Es sind nach wie vor für bestimmte Aufgaben (z. B. für Texturfilterung) spezialisierte Einheiten („Fixed Function Units“) in der GPU enthalten. Ein aktuell übliches Anwendungsprogramm kann aufgrund der fehlenden Universalität i. A. nicht auf einer GPU ausgeführt werden. Ein Algorithmus, der sich auf die Fähigkeiten der GPU beschränkt, aber sehr seriell mit relativ wenig Datenparallelität arbeitet, kann die GPU nicht auslasten. Die relativ kleinen Caches in der GPU würden zu größeren Latenzen in der Programmausführung führen, die aufgrund mangelnder Parallelisierung des Programms nicht durch gleichzeitiges Abarbeiten vieler Aufgaben ausgeglichen werden könnten. Bei sequentiellen Aufgaben ist die CPU daher schneller.

Der Leistungsvorsprung gegenüber CPUs bei stark parallelisierbaren Aufgaben und die bereits vorhandenen SIMD-Eigenschaften machen aktuelle GPUs für wissenschaftliche, grafische und/oder datenintensive Anwendungen interessant. Diese Verwendung bezeichnet man als GPGPU. Die Einbeziehung der GPU hat z. B. im Volunteer-Computing-Projekt Folding@home zu einer enormen Steigerung der Rechenleistung geführt. Sie beschränkte sich zunächst auf die Chips des Herstellers ATI/AMD, im Jahr 2008 kam aber auch Nvidia-GPUs ab der GeForce-8-Serie hinzu. Für Grafikkarten von Nvidia existiert CUDA als API zur Nutzung der GPU für Berechnungen. Diese wird inzwischen auch genutzt, um in Spielen mittels PhysX Physikberechnungen durchzuführen. Inzwischen gibt es die offene Programmierplattform OpenCL, mit der Programme für CPU und GPU gleichermaßen entwickelt werden können. Zudem können heutige GPUs nicht nur mit einfacher Genauigkeit, sondern mit doppelter Genauigkeit rechnen.

Architekturen Eine Grafikkarte ist ein Add-In-Board, das den Grafikprozessor enthält. Diese Grafikkarte enthält auch eine Reihe von Komponenten, die erforderlich sind, damit der Grafikprozessor funktioniert und eine Verbindung zum Rest des Systems hergestellt werden kann.

Es gibt zwei grundlegende Typen von Grafikprozessoren: integrierte und diskrete. Eine integrierte GPU wird überhaupt nicht auf einer eigenen Karte geliefert und ist stattdessen neben der CPU eingebettet. Eine diskrete GPU ist ein eigenständiger integrierter Schaltkreis (Mikrochip), der auf einer eigenen Leiterplatte montiert und normalerweise an einen Peripheral Component Interconnect Steckplatz (PCI) angeschlossen ist.

Die meisten GPUs auf dem Markt sind tatsächlich integrierte Grafikprozessoren. Eine CPU mit einer vollständig integrierten GPU auf der Hauptplatine ermöglicht dünnere und leichtere Systeme, geringeren Stromverbrauch und niedrigere Systemkosten.

Viele Computerprogramme können mit integrierten GPUs gut ausgeführt werden. Für ressourcenintensivere Anwendungen mit hohen Leistungsanforderungen ist eine diskrete GPU besser geeignet. Diese GPUs erhöhen die Rechenleistung auf Kosten des zusätzlichen Energieverbrauchs und der Wärmeerzeugung. Diskrete GPUs erfordern im Allgemeinen eine eigene Kühlung für maximale Rechenleistung.Intel Corporation: What Is a GPU?

Fermi-GPU-Architektur Bei der sogenannten Fermi-GPU-Architektur besteht der Hauptprozessor aus komplexen Prozessorkernen mit großen Caches. Die Kerne sind für die Leistung mit einem Thread optimiert und können mithilfe von Hyper-Threading bis zu zwei Hardware-Threads pro Kern verarbeiten.

Im Gegensatz dazu besteht eine GPU aus Hunderten von einfacheren Kernen, die Tausende von gleichzeitigen Hardware-Threads verarbeiten können. GPUs sind so konzipiert, dass sie den Gleitkommadurchsatz maximieren, wobei die meisten Transistoren in jedem Kern eher der Berechnung als der komplexen Parallelität auf Befehlsebene und großen Caches gewidmet sind. Die heutige Fermi-GPU-Architektur verfügt über Beschleunigerkerne, die als CUDA-Kerne bezeichnet werden. Jeder CUDA-Kern verfügt über eine Einheit für Ganzzahl-Operationen und logische Operationen (arithmetisch-logische Einheit) und eine Einheit für Gleitkomma-Operationen (FPU), die einen Ganzzahl- oder Gleitkomma-Befehl pro Taktzyklus ausführt. Eine Host-Schnittstelle verbindet die GPU über den Peripheral Component Interconnect Express Bus mit der CPU. Der GigaThread Global Scheduler verteilt Thread-Blöcke an Multiprozessor Thread-Scheduler. Dieser Scheduler verarbeitet die gleichzeitige Ausführung des Kernels und die Ausführung von Threadblöcken außerhalb der Reihenfolge.

Jeder Multiprozessor verfügt über Lade- und Speichereinheiten, sodass Quell- und Zieladressen für mehrere Threads pro Taktzyklus berechnet werden können. Special Function Units führen Rechenoperationen wie Sinus, Kosinus, Quadratwurzel und Interpolation aus. Jede Special Function Unit führt einen Befehl pro Thread und pro Takt aus. Der Multiprozessor plant Threads in Gruppen von parallelen Threads, die als Warps bezeichnet werden. Jeder Multiprozessor verfügt über zwei Warp-Scheduler und zwei Befehlsausgabeeinheiten, sodass zwei Warps gleichzeitig ausgegeben und ausgeführt werden können.ResearchGate GmbH: Graphics processing unit (GPU) programming strategies and trends in GPU computing

Anwendungen Der Grafikprozessor übernimmt rechenintensive Aufgaben der 2D- und 3D-Computergrafik und entlastet dadurch den Hauptprozessor (CPU). Die Funktionen werden über Software-Bibliotheken wie DirectX oder OpenGL angesteuert. Die freigewordene Prozessorzeit kann somit für andere Aufgaben verwendet werden: