Grafikspeicher

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Als Grafikspeicher (Videospeicher) wird der gesamte durch die Grafikhardware (Grafikkarte, Onboard Grafikchip) nutzbare Speicher von Computern und Spielkonsolen bezeichnet. Dabei kann es sich um einen reservierten Bereich des Arbeitsspeichers handeln oder um ein exklusiv für diesen Zweck verbautes Speichermodul. (siehe Video-RAM)

Entwicklung[Bearbeiten]

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[Bearbeiten]

Grafikspeichermodul

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 HighColor TrueColor
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 × 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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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 16 GB GDDR 5-SDRAM erhältlich.

Eine weitere Möglichkeit bietet die Integration der GPU auf der Hauptplatine und kommt bei Systemen zum Einsatz, wo es auf keine hohe 3D-Leistung ankommt (zum Beispiel bei Bürocomputern). Diese preisgünstige und leistungsschwache Variante verfügt über keinen eigenen Grafikspeicher; vielmehr wird ein Teil des Hauptspeichers (shared memory) für das Ablegen von Daten bereitgestellt.

Speicherinhalt[Bearbeiten]

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[Bearbeiten]

Ä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 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.