# Grafikspeicher

Als Grafikspeicher (auch Videospeicher oder Video-RAM) wird Computerspeicher bezeichnet, der von der Grafikhardware (Grafikkarte oder Onboard-Grafikchip) genutzt wird. Dabei kann es sich um einen reservierten Bereich des Arbeitsspeichers (Shared Memory) handeln oder um dedizierten Grafikspeicher.

## Entwicklung

Bis Ende der 70er Jahre gab es keine gesonderte und für Berechnungen zur Bildschirmausgabe verantwortliche Recheneinheit. Alle nötigen Operationen wurden direkt von der CPU vorgenommen (zum Beispiel Atari 2600) und im Hauptspeicher des Computers zwischengespeichert.

### Die erste Generation

Die erste Generation der Grafikkarten (bis 1990) verwendete den lokalen Grafikspeicher lediglich als Framebuffer, das heißt die Pixeldaten beziehungsweise im Textmodus die Zeichendaten werden von der CPU berechnet und im lokalen Grafikspeicher abgelegt; die Elektronik auf der Karte, die hier noch nicht als GPU im eigentlichen Sinne bezeichnet werden kann, liest diese Daten dann lediglich wiederholt aus und überträgt sie zum Monitor. Die damals übliche Speicherbestückung zeigt die folgende Übersicht.
| Grafikstandard | MDA | CGA | EGA | VGA | SVGA | XGA |
| Erscheinungsjahr | 1981 | 1981 | 1984 | 1987 | 1989 | 1990 |
| typische Speicherbestückung | 4 kB | 16 kB | 64–256 kB | 256 kB | 256–1024 kB | 512–2048 kB |
Welche Kombinationen aus Bildauflösung und Farbtiefe im Grafikmodus welche Speichergröße zur Darstellung erfordern – einen entsprechenden Monitor vorausgesetzt – kann hier abgelesen werden. Im damals noch häufigen Textmodus ist der Speicherbedarf wesentlich geringer.
| Auflösung | 4 Farben | 16 Farben | 256 Farben | High Color | True Color |
| 320 × 200 | 16 kB | 32 kB | 64 kB | 128 kB | 192 kB |
| 640 × 480 | 75 kB | 150 kB | 300 kB | 600 kB | 900 kB |
| 800 × 600 | 117 kB | 234 kB | 468 kB | 938 kB | 1406 kB |
| 1024 × 768 | 192 kB | 384 kB | 768 kB | 1536 kB | 2304 kB |
| 1280 × 960 | 300 kB | 600 kB | 1200 kB | 2400 kB | 3600 kB |
| 1280 × 1024 | 320 kB | 640 kB | 1280 kB | 2560 kB | 3840 kB |
| 1600 × 1200 | 480 kB | 960 kB | 1920 kB | 3840 kB | 5760 kB |

### Windows-Beschleuniger

Die GPUs dieser Kategorie konnten einige wenige Befehle (zum Beispiel zeichne Viereck) selbstständig ausführen. Der lokale Grafikspeicher, meist zwischen 1 MB und 8 MB, wurde durch DRAM, EDO RAM, VRAM oder MDRAM umgesetzt. Die beiden zuletzt genannten sind Halbleiterspeichertechnologien, die speziell für Grafikkarten entwickelt wurden.

### 3D-Beschleuniger

Mitte der 90er Jahre kamen die ersten echten 3D-Beschleuniger auf den Markt. Dreieckstransformationen und Texture Mapping wurde von diesen Karten selbständig berechnet. Der erste Vertreter der Serie war 1996 die Voodoo Graphics mit 4 MB oder 6 MB EDO RAM.
Ende 1999 erschien Nvidias GeForce256 mit 32 MB SGRAM – die erste Grafikkarte im Endkundengeschäft mit integrierter T&L Einheit.
Mitte 2002 erschien ATIs Radeon 9700 Pro mit 128 MB DDR-SDRAM – die erste vollständig DirectX 9.0 kompatible Grafikkarte.

### Aktueller Stand

Bei aktuellen Systemen sitzt die GPU auf einer separaten Steckkarte, die über ein Bussystem (meist PCI Express oder AGP, selten PCI) mit der CPU und dem Hauptspeicher verbunden ist. Auf der Steckkarte befindet sich speziell auf Grafikoperationen abgestimmter Halbleiterspeicher, der direkt für die GPU verfügbar ist. Neue Entwicklungen im Bereich Echtzeit-Rendering sowie der Preisverfall im Halbleiterspeichersegment tragen zum stetigen Wachstum des Grafikspeichers bei. So sind Grafikkarten mit bis zu 48 GB GDDR6-SDRAM erhältlich.
Eine weitere Möglichkeit bietet die Integration der GPU in die CPU (wird dann auch als APU bezeichnet) und kommt in Anwendungen zum Einsatz, bei denen 3D-Leistung nicht im Vordergrund steht (zum Beispiel bei den meisten Arbeitsplatzrechnern). Diese preisgünstigere und leistungsschwächere Variante verfügt über keinen eigenen Grafikspeicher, vielmehr wird ein Teil des System-Arbeitsspeichers (shared memory) für das Ablegen von Daten bereitgestellt.

## Speicherinhalt

Welche Informationen werden im Grafikspeicher abgelegt?
* Framebuffer In diesem regelmäßig durch den RAMDAC ausgelesenen Speicherbereich finden kontinuierlich die Berechnungen zur Bildsynthese statt. Die Größe des Framebuffers ist abhängig von der verwendeten Auflösung (zum Beispiel 1024 × 768), der benutzten Farbtiefe (zum Beispiel 16 Bit pro Pixel), dem Antialiasing-Modus und dem verwendeten Framebufferkonzept (zum Beispiel Doppelpufferung, Dreifachpufferung).
* z-Buffer Hier wird für jedes Bildschirmpixel ein Wert zur Tiefeninformation gespeichert. Die Größe ist wiederum abhängig von der gewählten Genauigkeit der Werte; üblich sind 24 und 32 Bit.
* Vertex-Shader- und Pixel-Shader Programme Seit DirectX 8.0 werden Spieleentwicklern maschinencodeähnliche Operationen zur Verformung von Objekten oder zur Umsetzung bestimmter grafischer Effekte (zum Beispiel Schattenwurf, Spiegelung) angeboten. Diese meist sehr kleinen Programme werden direkt im Grafikspeicher abgelegt.
* Geometriedaten Mit der Einführung von DirectX wurde das Dreieck als Standardprimitiv zur 3D Darstellung festgelegt. Somit besteht nahezu jede im Grafikmodus darstellbare Szene aus mit Dreiecken zusammengesetzten Objekten (Polygone). Die Geometriedaten ordnen u. a. jedem Dreieck die Eckpunkte zu und speichern zu jedem Eckpunkt den Normalenvektor. Die Größe dieses Speicherbereichs ist abhängig von der Komplexität der berechneten Szene (aktuell bis zu 500.000 Dreiecke), das heißt je mehr Dreiecke zu verarbeiten sind, desto größer sind die Geometriedaten.
* Texturdaten Alle verwendeten Texturen einer Szene werden meist aus Platzgründen komprimiert im Grafikspeicher abgelegt; Komprimierungsalgorithmen sind zum Beispiel FXT1 und S3TC. Dieser Bereich nimmt den größten Anteil am Grafikspeicher ein und ist von sehr vielen Faktoren abhängig, zum Beispiel Anzahl, Größe (bis zu 8192 × 8192 Pixel) und Farbtiefe der verwendeten Texturen.

## Flaschenhals Systembus

Ältere Grafikkarten geben Grafikberechnungen an die CPU ab. Durch höhere Auflösungen und mehr darstellbare Farben wuchs im Laufe der Zeit der Datenstrom zwischen GPU und CPU immer weiter an, bis er durch die Leistungsfähigkeit des Systembusses ausgebremst wurde. Ein weiteres Problem war der benutzte Grafikspeicher. Dieser erlaubt keine gleichzeitigen Lese- und Schreibzugriffe. Der RAMDAC muss mit dem Auslesen warten, solange die CPU in den Speicher schreibt und umgekehrt. Auf modernen Computern ist der Flaschenhals Systembus die kritische leistungsbestimmende Komponente; das zeigt sich insbesondere bei aktueller 3D-Grafik. Die folgende Beispielrechnung soll dies verdeutlichen.
* Darstellung einer Szene in der Auflösung 1280 × 1024 Pixel mit 32 Bit Farbtiefe und 50 Bilder pro Sekunde
    1280 × 1024 × 32 Bit × 50 1/s = 2097,152 MBit/s
Diese ca. 2100 MBit pro Sekunde berücksichtigen nur den zur Monitorausgabe nötigen Datenstrom. Die gesamte eventuell anfallende Datenübertragung zur Bildsynthese trägt zu dem Wert nichts bei. Als Konsequenz daraus sollte die Nutzung des Systembusses auf ein Minimum verringert werden.
* Alle zur Bildsynthese oder -ausgabe anfallenden Berechnungen werden von einer separaten und lokal von der CPU getrennten GPU vorgenommen.
* Die GPU verfügt über eigenen und direkt erreichbaren Halbleiterspeicher. Die möglichst seltene Nutzung des Hauptspeicher sollte nur dann erfolgen, wenn der lokale Speicher nicht ausreicht.
* Als verwendeter Halbleiterspeicher sollte kein normaler DRAM verbaut werden, da dieser den hohen Anforderungen der GPU nicht genügt. So erlaubt DRAM zum Beispiel keine gleichzeitigen Lese- und Schreiboperationen. Das ist für eine Grafikkarte wichtig, da der RAMDAC kontinuierlich Teile des Speichers ausliest während die GPU Ergebnisse in den Speicher schreibt.

## Dedizierter Grafikspeicher

Viele Grafikkarten nutzen einen dedizierten Grafikspeicher (auch Video-RAM genannt). Dieser befindet sich in einem exklusiven Speichermodul und ist physisch vom Arbeitsspeicher getrennt.
Vorteil eines vom Arbeitsspeicher getrennten Bausteins gegenüber der Methode des Shared Memory ist, dass er auf die Spezifikation des Computerbusses keine Rücksicht nehmen muss. So wird beim PC die Auffrischung der Speicherinhalte nicht vom Chipsatz, sondern von der GPU gesteuert.
Trotz weitgehend ähnlicher Technologie der DRAM-Speicherchips, lassen sich so schnellere Speicherzugriffzeiten spezifizieren. Die Technologie dieser Chips wurde VRAM genannt, durch die Weiterentwicklung bezeichnet VRAM heute ausschließlich Chips mit getrennten Ein- und Ausgabeleitungen dieser Technologie.