| Home | Computer | Prozessor Basics | Site Map |
Schon immer war man bestrebt, die Geschwindigkeit eines Rechners zu erhöhen, dazu gibt es viele Ansätze, wie RISC oder CISC, oder paralleles Rechnen. Andere Ansätze setzen am Speicher an, wie Caches oder synchrone RAMs. In diesem Aufsatz geht es um Änderungen des Mikrocodes, der eine höhere Verarbeitungsgeschwindigkeit erlauben sollte.
Nie ist ein Prozessor schnell genug. Vor allem aber ändern sich die Ansprüche an einen Prozessor. Nehmen wir als Beispiel die Entwicklung der IA86 (Industrie Architecture 86), also des Intel 8086 Prozessors und seiner Nachfolger. Als der 8086 im Jahre 1978 erschien, war er als Prozessor für PCs und Workstations gedacht. Er kostete 360 USD und sein Einsatz in der Unterhaltungselektronik, verbot sich schon alleine vom Preis. Das Prozessoren für PC und Workstations einige Hundert bis Tausend € kosten, daran hat sich bis heute nichts geändert.
Heute gibt es nicht nur viele Geräte die es damals nicht gab, und die Mikroprozessoren beinhalten, wie DVD Spieler/Recorder, MP3 Spieler, PDA, Handys, sondern auch im PC haben sich die Anforderungen verändert. Für Textverarbeitung und Tabellenkalkulation reicht heute ein ausgedienter Pentium PC. Die größten Anforderungen stellen heute Videoschnitt und 3D Spiele.
Diese verarbeiten aber andere Daten - nicht einzelne Bytes, sondern ganze Datenblöcke und damit war es notwendig die Architektur der Prozessoren zu ändern.
Wie bei jeder Neuerung in der PC Welt, gab es Vorläufer in der
Großrechnerwelt. Ende der 60 er Jahren etablierte sich eine neue Rechnergattung die man bald
"Supercomputer" nannte. Es waren Rechner gebaut um sehr schnell Rechenoperationen durchzuführen.
Damit waren sie für die Wirtschaft relativ uninteressant, bei der es vor allem um das Verarbeiten
von Daten ging. Die Klientel von Supercomputern waren zuerst Militär und Wissenschaft, die vor
allem Simulationen auf diesen Rechnern laufen ließen.
Führende Firma war damals CDC (Control Data Corporation.) und der Kopf hinter den Rechnern war der Ingenieur Seymour Cray. Als er sich Anfang der 70 er Jahre selbstständig machte, dachte er daran, wie er die Geschwindigkeit der Rechner vergrößern konnte. Was ihm auffiel, war das beschränkte Spektrum der Anwendungen auf seinen Computern. Obgleich es sehr viele Probleme gab, die man mit den Rechnern untersuchte, war bei vielen die Vorgehensweise gleich:
So ging man bei der Wettervorhersage vor (Unterteilung der Erde und der Luft über ihr, in ein dreidimensionales Netz aus Luftzellen, Berechnung des Wetters für jede Zelle für die nächsten 10 Minuten und Wiederholung des ganzen mehrmals) wie auch bei Auto Crash Simulationen (Unterteilung eines Autos in kleine Zellen, Berechnung der Kräfte die auf jede Zelle einwirken für eine Tausendstel Sekunde und Wiederholung) wie auch bei anderen Simulationen wie die Explosion einer Supernova oder die Ausbreitung von Schallwellen bei der Erdölsuche.
Wenn man also in jeder Zelle dieselben Berechnungen macht, warum sollte man diese nicht effizienter gestalten? Das führte zum Prinzip des Vektorrechners, so genannt, weil eine Reihe von Zahlen auch Vektor genannt wurde.
Die Cray 1, die 1976 erschien, war der erste Computer nach diesem Prinzip. Die Rechenwerke waren so aufgebaut, dass sie auch Daten einzelnen verarbeiten konnten, aber auch eine ganze Reihe von Zahlen hintereinander verarbeiten konnten. Diese standen dann als lange Schlangen hinter dem Befehl. Der Vorteil war dass man nur die Rechenoperation für alle Daten definieren musste. Man musste den Befehl nicht × mal holen und dekodieren. Denn nachdem man den Befehl für die erste Operation hatte, konnte man die folgenden Daten schon mal in die Register laden. Am deutlichsten war dies bei einer Multiplikation, die normalerweise 10 Takte dauerte. Dies galt aber nur für die erste Multiplikation, die folgenden dauernden nur 1 Takt. So, dass 30 Multiplikationen 39 Takte dauerten (10 + 29 * 1) anstatt 300. (10 × 30)
Die Cray 1 berechnete also in einem Befehl die Daten vieler Zellen, auf die immer dieselbe Berechnung angewandt wurde. Erreicht wurde dies mit 8 Vektorregistern, die jeweils 64 Datenworte auf einmal aufnehmen und bearbeiten konnten. Wie im Reißverschlussprinzip wurde pro Takt um ein Datenwort weitergeschaltet und ein Ergebnis purzelte aus der Recheneinheit.
Vektorrechnern waren sehr lange Zeit sehr erfolgreich, doch setzten sich ab Anfang der 90 er Jahre, die Rechner auf der Basis vieler PC Prozessoren durch. Diese brauchten keine spezielle Hardware und waren so einfacher zu produzieren.
SIMD steht für Single Instruction, Multiple Data. Wie de Begriff andeutet, sollen mit einem Befehl mehrere Datenworte bearbeitet werden, SIMD ist eigentlich die Aufgabe von Signalprozessoren. Dies ist spezialisierte Hardware für das Verarbeiten von gleichartigen Datenströmen. Praktische Anwendungen sind z.B. das Kodieren oder Dekodieren von MP3 und MPEG Datenströmen. Das verarbeiten der Daten von Handys, oder das Überziehen einer 3D Szene mit einer Textur.
Bei Digitalen Signalprozessoren (DSP) folgen einem Befehl daher ganze Datenblöcke die dann in sehr breite oder sehr viele Register geladen werden und alle gleich bearbeitet werden. Auch hier muss man den Befehl nur einmal aus dem Speicher holen und dekodieren. Das spart Zeit, ebenso wie während der Durchführung einer Operation auf einem Register schon mal das folgende Register mit den Daten gefüllt werden kann. SIMD ähnelt daher einer Pipeline, in die hinten Daten reinkommen und vorne synchron Rechenergebnisse herauspurzeln.
Als diese Einsatzgebiete Mitte der 90 er Jahre immer wichtiger wurden, dachte man bei allen Prozessorherstellern nach, ob dies nicht ein Verkaufsargument für eigene neue Prozessoren wäre. Man begann nach Lösungen zu suchen, wie man SIMD einsetzen kann, ohne den Prozessor umzukrempeln. Ein sehr gutes Beispiel ist hier die Entwicklung bei der Intel IA86 Linie:
Damit man überhaupt die großen Daten bearbeiten kann, braucht man breite Register oder
mehr Register. Diese Änderung der Architektur scheute Intel und kam auf einen Trick. Die FPU
(Recheneinheit für Fließkommazahlen) hat 80 Bit breite Register. Diese wurden nun
zweckentfremdet. Anstatt hier jeweils eine Fließkommazahl unterzubringen konnte man nun jeweils
acht 8 Bit oder vier 16 Bit Werte simultan bearbeiten. (Die restlichen 16 Bits wurden nicht
benutzt). Die neuen Befehle bekamen die Bezeichnung MX (Multimedia Extension)
Dazu gesellten sich neue Befehle die keinen Überlauf haben. Damit ist folgendes gemeint: Addiert man die 8 Bit Werte 90H und 90H so wird das Resultat 120H sein. Da dies nicht in ein 8 Bit Register passt wird man dort den Wert 20H vorfinden. Das ist, wenn es sich um Helligkeiten handelt, (überlagern einer Textur einem Untergrund) schlecht, dann ist das Pixel nicht maximal hell, sondern dunkel. Bei einigen Befehlen gibt es daher eine Version mit Sättigungsmodus: Überschreitet das Resultat den Wertebereich von 8 bzw. 16 Bits, so ist der Registerinhalt danach der größte 8 bzw. 16 Bit Wert.
MMX war für einige Spezialanwendungen ganz interessant, aber noch nicht der große Wurf. Zu klein waren einfach die 8 Bit und 16 Bit Werte. Die meisten Spiele arbeiten z.B. mit 32 Bit Koordinatensystemen. Mit dem Pentium 4 hat man die möglichen Werte dann auch auf 32 Bit erweitert.
MMX beim Pentium war mehr eine Marketing Maßnahme, denn eine echte Erweiterung. Mit Ausnahme der Sättigung hätte man alle MMX Befehle auch mit den 32 Bit Registern simulieren können (dort allerdings auf 32 Bit beschränkt), zudem konnte man MMX und Fließkommaeinheit nicht gleichzeitig nutzen, so dass man zeitraubend zwischen beiden Modi umschalten musste. Einige Benchmarks beschleunigten um 10 Prozent, aber breit eingesetzt wurde MMX nie.
Die nächste Runde läutete dann AMD ein, welche eine Erweiterung von MMX in den
K6 Prozessoren implementierte. MMX war ein geschützter Begriff und damit konnte AMD nicht werben.
obgleich ab dem K6 Prozessor auch die Prozessoren von AMD die Befehle von MMX verstanden. So ging
man dazu MMX zu erweitern um ein eigenes Verkaufsargument zu haben. 3D Now! erweiterte den
Befehlssatz um weitere 32 Befehle um mehr mit den 8 und 16 Bit Werten anfangen zu können, wie das
Berechnen von Durchschnittswerten oder Quadratwurzeln. Vor allem aber erweiterte 3D Now! die
Möglichkeiten auch auf 32 Bit Zahlen einzusetzen, und zwar 32 Bit Ganzzahlen und
Fliesskommazahlen.
Damit wäre 3D NOW eine Bereicherung für Spiele gewesen. "Wäre" deswegen, weil die meisten Softwarehäuser wegen der geringen Verbreitung der AMD Prozessoren vor einer Anpassung der Software zurückschreckten. Intel setzt 3D NOW! nicht ein, während alle AMD Prozessoren ab dem K6 MMX verstehen.
Intel führte mit dem Pentium 3 SSE ein. SSE steht für Streaming SIMD Extension. Anders als
MMX hat man nun wirklich geklotzt und nicht gekleckert. 70 neue Befehle wurden eingeführt und nun
benutzen die Befehle eigene, neue Register, anstatt die der FPU. Die neuen Register XMM0 bis XMM7
haben eine Breite von 128 Bit und können so bis zu vier 32 Bit Fließkommazahlen aufnehmen, die
Rechenleistung steigt also gegenüber MMX erheblich an.
Die Befehle decken nun alle arithmetischen und logischen Verknüpfungen für 32 Bit Zahlen ab: Addition, Subtraktion, Multiplikation und Division. Wurzelziehen, Vergleichen, logische Verknüpfungen wie AND, OR und XOR. Damit kann man sowohl bei "Multimedia" Anwendungen etwas anfangen, wie auch "normale" Anwendungen so umschreiben , dass mehrere Werte parallel bearbeitet werden - sofern man sich mit nur 32 Bit Genauigkeit (7 Dezimalstellen) zufrieden gibt.
SSE ist wie 3D NOW patentrechtlich geschützt und dürfte in den Athlon Prozessoren von AMD nicht eingesetzt werden. Auch hier blockierte diese Einschränkung den Einsatz von SSE. Denn AMD hat doch inzwischen einen stabilen Marktanteil von 20-30 %. Genug Anwender um bei einem Softwarehaus, das SSE einsetzt die Hotline Telefone glühen zu lassen.
Die bislang letzte Erweiterung des IA86 Befehlssatzes in Richtung SIMD ist
SSE2, die Erweiterung von SSE des Pentium 4. Es gibt einige neue Befehle, doch das wichtigste ist
die Erweiterung der Rechenoperationen auf 64 Bit Zahlen. 64 Bit Fliesskommazahlen sind das
Standardformat bei Berechnungen und so erreicht der Pentium 4 bei einigen wissenschaftlichen
Benchmarks auch beeindruckende Werte, z.B. beim Multiplizieren von Matrizen. SSE2 ist weniger
eine Erweiterung für Multimediaanwendungen, weil man dort sich mit kleineren 32 Bit Daten begnügt
als viel mehr für wissenschaftliche Anwendungen.
Durch ein Abkommen mit AMD versteht auch der Athlon XP Prozessor SSE2, während Intel dafür die 64 Bit Erweiterung des Athlon 64 Prozessors nutzen darf. Der Athlon XP/64 Prozessor ist damit der einzige, der alle SIMD Erweiterungen verarbeiten kann.
Es stellt sich nun die Frage, in wie weit man diese Erweiterungen in den Anwendungen wieder findet und wie weit diese beschleunigt werden. Die ernüchternde Antwort ist: Es gibt kaum Anwendungen die SSE2 oder eine ähnliche Technologie einsetzen. Der schwarze Peter liegt an vielen Stellen. Zum einen an den Softwarehäusern selber, die sich nicht einen Teil des Marktes entgehen lassen wollen. Der Einsatz einer SIMD Erweiterung bedeutet entweder Ausschluss von Anwendern, die diese nicht nutzen können (und schlimmer noch: Erhöhte Kosten für die Hotline und den Ruf, denn die Anwender haben dann eine nicht funktionierende Anwendung!) oder Mehrarbeit, indem man Codeteile doppelt programmieren muss, einmal "normal" und einmal als SIMD.
Das zweite ist der Compiler. Auch die neuesten Compiler von unabhängigen Herstellern unterstützen die neuen Befehle kaum. Das Problem ist hier vor allem zu erkennen, das Parallelität vorliegt. Bei den Vektorrechnern gab es spezielle Compiler für diese Rechner, die den Sprachschatz so erweiterten, dass der Anwender sagen konnte was parallel abgearbeitet wird und der Compiler das effizient umsetzen konnte. Dies ist bei den heutigen Compilern nicht möglich. Ausnahme scheinen lediglich die Compiler zu sein, die direkt von den Prozessorherstellern Intel und AMD stammen. Ein Test der Zeitschrift ct bei verschiedenen Compilern, die Programme der SPEC Suite (Benchmark für wissenschaftliche Anwendungen) übersetzten, zeigte, dass die meisten keine oder nur wenige SIMD Befehle nutzten.
Es ist nun ein Trugschluss zu denken, dass SIMD unwichtig sei. Das Gegenteil ist der Fall. Es wird nur auf der PC Plattform nicht genutzt. Doch in den vielen Geräten der Unterhaltungselektronik sitzen Signalverarbeitungsprozessoren, die in der Regel alle SIMD Befehle haben und die auch effizient genutzt werden. Wie anders wären MP3 und DVD Player für 50 € möglich, einem Preis für den man nicht mal einen PC Prozessor bekommt? SIMD nutzt natürlich besonders bei geordneten Daten, wie dem gleichmäßigen Datenstrom einer CD oder den 8 × 8 Blöcken von Bildpunkten bei JPEG / MPEG. Doch auch das dekodieren der Daten, die beim Handytelefonieren anfallen, ist Signalverarbeitung,. Selbst im industriellen Alltag, wie den vielen Prozessoren, die in einem Auto Funktionen steuern, ist ein Großteil Signalverarbeitung. Bei fast allen diesen Anwendungen kann man SIMD Instruktionen effektiv einsetzen, da fast immer die Daten irgendwie transformiert werden müssen.
Signalverarbeitungsprozessoren haben dazu auch eine andere Hardware. Sie haben mehr Register um die Daten zu speichern und dann effizient gemeinsam zu verarbeiten. Bei den PC Prozessoren findet man dagegen meistens nur einige neue Register oder schon bestehende Register werden anders genutzt.
Wahrscheinlich arbeiten auch Grafikprozessoren mit SIMD. Vieles spricht dafür: Sie verarbeiten immer die gleichen Daten auf die gleiche Weise. Parallelität gibt es hier in Hardware. Im Jahre 2005 haben Grafikkarten bis zu 16 Shadereinheiten welche berechnen welche Pixels wie eingefärbt werden müssen. Sie hängen an bis zu 8 Pipelines an einem sehr breiten Datenbus von 256 Bit Breite an sehr schnellen RAM's - Im Prinzip ein Vektorrechner im Kleinformat. Dabei erreichen Grafikprozessoren bei 400-500 MHz Takt ein vielfaches der Leistung der eigentlichen CPU. Deutlich wird dies manchem Spieler, wenn auf einem Business PC ohne besondere Grafikbeschleunigung ein schneller Intel oder AMD Prozessor nur noch 10-15 Frames pro Sekunde darstellen kann während er es mit einer Spitzengrafikkarte auf 70-100 Frames pro Sekunde bringt.
Damit man mal einen Vergleich hat, die die Daten der im November 2006 jeweils leistungsfähigsten Prozessoren und Grafikprozessoren.
| Grafikprozessor | Prozessor | |
| Name | G80 | Intel Quad Core |
| Millionen Transistoren | 681 | |
| Taktfrequenz | 1350/575 | 2930 |
| Busbreite | 384 Bit | |
| Transferrate | 86.4 GB/s | 8.5 GB/s |
| Einheiten | 128 Shader, 64 Textureineheiten | |
| Cache | keiner | 8 MB |
Ursprünglich verfügte jeder Mikroprozessor nur über eine
Ausführungseinheit für Befehle. Wenn die Integrationsdichte ansteigt, kann man auf derselben
Chipfläche mehr Transistoren unterbringen. Wie soll man dies nutzen? Nun es gibt viele
Alternativen. So kann man den Cache auf den Prozessor verlagern oder
Peripheriebausteine / RAM oder ROM bis hin zum "System on a Chip" (SOP). Die meisten
Architekturen erhöhen jedoch die Anzahl der Ausführungseinheiten. Seit dem Pentium Prozessor gibt
es z.B. auf der IA86 Architektur mehr als eine Ausführungseinheit für Ganzzahloperationen.
Damit diese auch voll ausgelastet sind, wird der Code analysiert und auf diese Einheiten verteilt. Das braucht viel Logik, vor allem wenn Verzweigungen im Code kommen wie bei Sprüngen in Unterprogramme oder Schleifen. Denn in diesem Fall ist die gesamte Vorarbeit hinfällig und man versucht diese daher voraus zu ahnen. Mehr über diese Technik, die man "superskalar" nennt in dem Artikel über paralleles Rechnen.
Digitale Signalprozessoren sind dagegen auf den Massenmarkt der Signalverarbeitung ausgerichtet. In diesem Segment zählt neben Leistung auch der Preis und diese komplexe Logik für die Verteilung der Befehle auf die Funktionseinheiten, das Vorrausahnen von Verzweigungen, braucht viele Transistoren und macht das Design teuer. Doch mehrere Ausführungseinheiten steigern die Geschwindigkeit, zumal Signalverarbeitung fast immer, dieselbe, gut parallelisierbare Aufgabe umfasst. So wird bei einer MPEG Dekodierung z.B. das Bild in 8x8 Pixel große Datenblöcke unterteilt, die man parallel verarbeiten kann.
Die Lösung bei VLIW ist es, den Compiler die Arbeit des Parallelisierens machen zu lassen. VLIW steht für very long instruction word und bezeichnet eine Vorgehensweise, bei der mehrere Befehle in ein gemeinsames Befehlsbündel gepackt werden. Der Compiler muss darauf achten, dass diese parallel abgearbeitet werden und wenn dies nicht der Fall ist, muss er das Befehlsbündel mit NOP Befehlen (No Operation : Mache nichts) auffüllen. Bei der leistungsfähigen TMS320C6xx Serie z.B. ist ein solches Befehlsbündel bis zu 256 Bits lang und umfasst 8 Instruktionen à 32 Bit Breite.
Der Vorteil ist dabei, dass man weiß, dass diese Befehle parallel ausgeführt werden können. Das 256 Bit lange Bündel wird auf einmal geladen, die Befehle gleichzeitig dekodiert und an eine der 8 Recheneinheiten des Prozessors zugeführt. So erreicht der TMS320C620 Prozessor eine Leistung von 4800 MIPS bei nur 600 MHz Takt. Während zum gleichen Zeitpunkt (2001) ein aktueller Pentium III Prozessor bei 1130 MHz Takt nur 3390 MIPS erreichte. Der Prozessor verarbeitet also 2.3 mal mehr Daten pro Zeiteinheit.
Der Nachteil von VLIW ist, dass die hohe Leistung nur erreichbar ist, wenn man tatsächlich alle Positionen des Befehlsbündels mit Befehlen versorgen kann. Zudem braucht man immer 256 Bits für ein Befehlsbündel, auch wenn man nur 2 oder 3 Befehle darin unterbringen kann. VLIW ist also sehr speicherintensiv. Dies ist ein gravierender Nachteil. Bei den DSP verbindet man daher oft VLIW mit SIMD. So kann man die leeren Plätze z.B. mit Daten für eine SIMD Operation füllen.
Intel hat für die 9 Ausführungseinheiten des Itanium Prozessor eine Variante von VLIW eingeführt. Bei dieser gibt es in einem 128 Bit VLIW Bündel neben 3 Befehlen à 41 Bit Breite noch 5 Bits welche die Abhängigkeiten der Befehle beschreiben. So kann man auch Befehle einfügen die nicht parallel abgearbeitet werden. Der Prozessor kann dies anhand der 5 Statusbits erkennen, dann sinkt zwar die Geschwindigkeit etwas, aber man nutzt den Speicher besser aus.
Neben dem Itanium Prozessor setzt von den in PC eingesetzten Prozessoren nur der Crusoe Kern von Transmeta eine VLIW Architektur ein. Hier werden die IA86 Instruktionen umkodiert in 128 Bit lange VLIW Worte und dann vom VLIW Kern verarbeitet. Dafür hat der Prozessor ein 16 MB Flash Memory, in dem das Umkodierungsprogramm gespeichert wird.
Im PC Markt haben sich VLIW und SIMD noch nicht so durchsetzen können. Dies liegt vor allem daran, dass sie bei fast allen Prozessorlinien auf ein bestehendes Design "aufgesetzt" wurden. Die Akzeptanz blieb damit weitgehend aus. Chancen dürften diese Architekturen im PC Bereich wohl nur bei einer neuen Generation von Prozessoren, die sie von vorneherein unterstützen, haben. Doch diese sind nicht in Sicht.
Anders sieht es bei dem Gebiet der Signalverarbeitung aus. Dieser Markt ist auch viel größer und vielfältiger, auch wenn es dort nicht die großen Verdienstspannen wie beim PC Markt gibt. VLIW ist dort schon eine verbreitete Architektur, SIMD wird von vielen Prozessoren unterstützt. Eine hybrider Markt ist der von Grafikprozessoren. Diese kombinieren einen "normalen" Prozessor für die Berechnung von Bewegungen und visuellen Effekten mit einem digitalen Signalprozessor für die Texturüberlagerung, Zeichen der Polygone und Transformationen der Koordinaten. Schon heute schlagen Grafikprozessoren jeden PC Prozessor in Punkto Rechenleistung und Speicheranbindung.
Dieser Text stammt von Bernd Leitenberger| Kontakt | Neues | Bücher vom Autor | Buchempfehlungen | Gästebuch |
|
|