Kleine Geschichte der Grafikkarten
Eine Mail gestern in der meine Aufsätze zur Geschichte des Computers gelobt wurden, brachte mich auf die Idee mal wieder darüber was zu schreiben. Nun finde ich die derzeitige Entwicklung ziemlich langweilig und sehe auch so was wie eine Schere zwischen Anwendungen und Hardware – es wird immer mehr Kerne auf einem Prozessor geben, aber es fehlen bei dem Privatanwender die Anwendungen die so viele Kerne nutzen können, da die meisten Anwendungen im Batch oder Dialogbetrieb arbeiten. So habe ich mich einem Kapitel aus der Hardwaregeschichte zugewandt: Der Anzeige von Informationen.
Am Anfang war alles noch recht einfach: Es gab nur Text. Eine Routine im Betriebssystem oder eine festverdrahtete Logik las aus einem bestimmten Speicherbereich den Buchstabencode aus, sah in einer Tabelle aus welche Pixel dafür an waren und welche aus und steuerte damit den Elektronenstrahl. Bei den nachleuchtenden Monitoren, die damals üblich waren musste das Timing nicht exakt sein und eine hohe Bildwiederholrate war auch nicht nötig. Das konnte selbst ein schwachbrüstiger 8 Bit Prozessor nebenher erledigen. So hatten die ersten Computer wie Altair 8800, IMSAI oder von Prozessor Technologies nur monochrome Textdarstellung. Das galt auch für viele der nächsten Generationen wie den ersten Commodore CBM Systemen. Es gab damals keine eigene Hardware für die Darstellung und auch keinen dezidierten Grafikspeicher.
Mit dem Aufkommen der Heimcomputer sollten diese an den Fernseher angeschlossen werden. Die Leute wollten dann spielen oder zumindest Grafik und Farbe haben. Das machte den Job weitaus schwieriger auch weil nun die Signal synchronisiert werden mussten und TV Bildschirme nicht nachleuchten, es also je nach Fernsehnorm 25 oder 30 Bilder in zwei Halbbildern pro Sekunde geben musste. Versuche dies mit dem Hauptprozessor zu machen, waren nicht so gut: Der Sinclair ZX81 sparte sich die Logik dafür ein und machte alles mit dem Hauptprozessor (mit nur 4 IC’s dürfte er sehr lange den Rekord für den am höchsten integrierten PC gehalten haben). Doch es ging nur in Schwarz-Weiß mit einem unsauberen Bild und jedes Mal musste vor Bildschirmausgaben und -eingaben der Prozessormodus umgeschaltet werden vom Fast Modus in den Slow Modus – der letztere war nicht schneller, nur erlaubte er auch die Veränderung des Bildschirminhalts.
Eine Besserung brachten die ersten Videoprozessoren wie das TMS 9918 und der MC6845. Sie griffen auf einen eigenen Speicherbereich zu, der entweder separat war oder gemeinsam mit der CPU genutzt wurde. Die einfachste Aufgabe dieser war es, den Inhalt eines Speicherbereiches auf einem Monitor oder TV Gerät auszugeben und die entsprechenden PAL und NTSC Signale zu erzeugen – mit korrekten Synchronisationsignalen. Das Bild (die Pixel) wurden aber von der CPU berechnet. Beide hatten verschiedene Modi mit denen man die Anzahl der Farben pro Pixel, die Pixelanzahl pro Zeile und die Zeilenzahl variieren konnte und so waren sie weitgehend anpassbar. Der MC 6845 war der populärere. Er wurde in zahlreichen Heimcomputern (so der Amstrad Serie) eingesetzt und im IBM PC in der CGA Grafikkarte und der Hercules Karte. Obwohl er „dümmer“ war als der TMS 9918 hatte er einen enormen Vorteil: Er konnte viel mehr Grafikmodi und adressierte bis zu 512 KByte RAM. So waren auch sehr hochauflösende Grafikdisplays ansteuerbar. Ich erinnere mich noch an meine Hercules Karte und wie gut die Bilder da in Monochrom in 720 x 348 Pixeln aussahen (zumindest für die damalige Zeit als Standardauflösung 640 x 200 Pixel war). Word (für DOS) konnte durch Grafikanzeige sogar Proportionalschrift, Italiic, Unterstreichen und Fettschrift simulieren. Der MC 5845 wurde auch noch für VGA und EGA eingesetzt, dort ergänzt durch einige Custom IC’s für die höheren Farbmodi, die er nativ nicht beherrschte. Ein Vorgängermodell, der 6545 wurde in zahlreichen Commodore Maschinen eingesetzt.
Der TMS 9918 eingesetzt bei dem Texas TI 99 4A und der MSX Serie hatte zwar nur wenige einprogrammierte Modi und konnte nur 16 KB Speicher adressieren, aber er war darauf ausgelegt erstmals Grafik nicht nur anzuzeigen, sondern auch zu erzeugen. So besaß er einen Sprite Generator – er konnte eine Spielfigur wie das Pacman Männchen selbständig animieren und auf den Hintergrund reagieren oder bei einer Kollision einen Interrupt auslösen und so den Hauptprozessor entlasten. Das war der erste Vorläufer zu den heutigen Chips die nicht nur den Inhalt anzeigten.
Danach tat sich erstmals lange Zeit nichts. Zwar stiegen bei EGA und VGA die Auflösungen, aber es veränderte sich nicht die Technik der Grafikkarten. Nach wie vor zeigten diese nur den Bildschirminhalt an anstatt ihn zu verwalten. So war es beim IBM PC unter DOS beliebt, direkt in den Bildschirmspeicher zu schreiben, anstatt das BIOS dazu zu bemühen. Mit dem Verlust der Marktführerschaft von IBM Ende der 80 er Jahre gab es auch ein Vakuum bei der Entwicklung. Es gab nun nicht mehr eine Firma die einen Standard setzte sondern jeder Hersteller produzierte seine eigene Super-VGA Karte: Das war eine VGA Karte die mehr konnte als die VGA Auflösung (meistens 800 x 600 und/oder 1024 x 768). Es war jedoch nicht standardisiert und so lieferte jeder Hersteller Treiberdisketten für gängige Software wie Lotos 1-2-3, Autocad oder Turbo Pascal. Als ich damals programmierte baute ich in meine Programme Menüs ein in denen der Anwender seine Grafikkarte wählen konnte und der passende Treiber dann gewählt wurde – alles nicht gerade kundenfreundlich.
Das ganze änderte sich mit Windows. Nun gab es diesen neuen Standard und nun war auch alles Grafisch. Es kamen die ersten Grafik-Beschleuniger Karten auf den Markt. Bekannt war die Tseng ET4000. Der Unterschied: Anstatt den Inhalt des Speichers bloß wiederzugeben erzeugten sie diesen nun erstmals. Bei diesen Karten verband ein Treiber sie mit Windows: Sie konnten die elementaren Zeichenroutinen von Windows 3.1 in Hardware ausführen wie Linien Zeichen, Polygonzüge erstellen oder Flächen füllen. Es gab dann auch die ersten Benchmarks welche die Geschwindigkeit maßen und den ersten Skandal: Einige Hersteller prüften in ihren Treibern, ob das Programm das die Zeichenoperationen anstieß, das Benchmarkprogramm von Ziff Davis (Zeitschrift PC Wourld) war und wenn dies der Fall war, dann führten sie nicht alle Operationen aus (Ausnahme: Endergebnis) und waren so scheinbar schneller.
Der Urvater der heutigen Grafikkarten waren Ende der 90 er Jahre die Voodoo Karten von 3DFX. Diese Karten hatten erstmals in Hardware Operationen die für Spiele gebraucht wurden, wie Schattenwurf oder Berechnung ob ein Element nicht ein anderes verdeckt. Sie läuteten den Siegeszug dieser Serie ein, denn für nichts zahlen die Leute mehr Geld als für Spiele. Gleichzeitig begann ein Verdrängungswettbewerb unter den Herstellern von Grafikkarten bei dem fast alle Firmen unter gingen. Heute sind nur noch ATI und NVIDIA übrig. In absoluten Stückzahlen dominieren aber die Motherboard Chipsätze: Intel hat einen Marktanteil von über 50 % an den Grafikchips und fertigt nur Chips für die Mainboards. Von den rund 45 % die Nvidea und ATI zusammen an Marktanteil haben dürften auch viele auf integrierte Lösungen entfallen.
So verwundert es nicht, dass heute beide große Hersteller nach alternativen Möglichkeiten für ihre GPU’s suchen, die inzwischen schon längst leistungsfähiger als eine CPU sind. Je nach Typ arbeiten einige Hundert kleiner Kerne auf einer GPU. So gibt es Bibliotheken mit denen Video Encoding viel schneller auf einer GPU möglich ist und auch die Programmierung mit C und FORTRAN ist heute möglich. Beide Firmen arbeiten daran auch die doppelt genaue Berechnung zu beschleunigen – sie spielt für Spiele keine Rolle, ist aber für den Einsatz in Wissenschaft und Technik notwendig. Warum? Nun es gibt nur wenige Leute die 500-1000 Euro für eine Top Spielekarte hinlegen, die nach einigen Monaten veraltet ist. Aber bei einem Supercomputer bei dem sie verspricht 10 mal schneller als eine normale CPU zu sein, ist das kein Thema. In einem solchen System landen dann heute gerne pro Rechner gleich mal 10.000-100.000 GPU’s und so ist dieser Markt durchaus interessant für die Hersteller. Doch auch hier versucht Intel mit einem Prozessor mit 256 Kernen gegenzuhalten. Ob es dazu kommen wird ist noch offen. Vor einem Jahr angekündigt, ist es recht still um das Projekt geworden und es ist eben kein Massenmarkt wie bei den normalen Prozessoren: Für alle anderen Zwecke haben heute die Leute schon Probleme nur ihre vier oder acht Kerne auszulasten.
Ich finde es unter dem Gesichtspunkt der Energieeffizienz und der Reduzierung der Geräuschkulisse schon gut, dass es heute Lösungen gibt, bei denen man eine Grafikkarte zusätzlich zur Onboard Grafik hinzunehmen kann. Wenn gespielt wird, so schaltet sich die Mainboard Grafik ab und schleift die Signale der Grafikkarte durch an den Monitorausgang und wenn dies nicht benötigt wird, so wird die Grafikkarte abgeschaltet. Denn eines ist leider auch immer noch gegeben: Wird eine GPU nicht gefordert, soll sie also nur die Windows Elemente anzeigen, aber nicht laufend eine Spieleszenerie anzeigen, so braucht sie nur einen Bruchteil der Grafikleistung, die Leistungsaufnahme sinkt leider nicht im selben Maße. Das verbindet das beste aus beiden Welten, denn für mich ist wichtiger das bei der normalen Arbeit mein PC leise ist und das erreicht man am besten mit einem geringeren Energieverbrauch.
In den 1980ern gab es noch die mc68000 basierenden Atari STs, Amigas und Macs, welche die Bildschirmdarstellung anders gehandhabt haben:
Da der 8MHz mc68000 nicht bei jedem möglichen Speicherzyklus auf das RAM zugreifen konnte, wurde der Bildschirmspeicher in den Hauptspeicher gelegt (Anfangsadresse frei wählbar), und es gab einen speziellen Chip, der Abwechselnd mit der CPU auf das RAM zugegriffen hat, und daraus ein Monitorsignal generiert hat.
Beim Amiga konnten die Grafikchips auch noch zusätzliche Aktionen ausführen, z.B. Sprites.
Diese Art der Darstellung funktionierte, hatte jedoch den großen Nachteil, daß die Bildschirmauflösungen sehr begrenzt waren, und eine größere Farbtiefe in einer kleineren Auflösung resultierte.
In dem Moment, wo schnellere CPUs ins Spiel kamen: 16MHz mc68000, war der bisher verfügbare Zeitslot für den Hauptspeicherzugriff nicht mehr da, und es mußte eine andere Lösung gefunden werden.
Beim Mac wurde eine Grafikkarte eingeführt.
Beim Amiga wurden zwei verschiedene Hauptspeicherbereiche eingeführt, das neue, zusätzliche Fastram, auf das die Grafikprozessoren nicht zugreifen konnten, und das Generic RAM, welches das Äquivalent zum bisherigen RAM war. Die CPU wurde beim Zugriff auf das Generic RAM ausgebremst.
Beim Atari TT wurde das Problem ähnlich wie beim Amiga gelöst, aber dieser kam zu spät, um noch interessant zu sein.
MfG
Natürlich könnte man noch einiges mehr schreiben. Es gab beim Atari ST und Amiga einige ASICs für die Aufgaben, auch bei meinem Heimcomputer (CPC Serie) gab es dafür ein ASIC, dass den Zugriff von 6845 und Z80 gesteuert hat und später noch andere Aufgaben (Bankswitching) bekam. Aber ich habe das bewusst weggelassen, weil es bei fast allen Mustern eine Speziallösung für einen Computer war, die nicht übertragbar auf andere Computer war. Es sollte schließlich ein Blog und kein Aufsatz werden.