Home Computer Prozessor Basics Site Map counter

RISC und CISC - die Vertiefung

Ich habe schon mal dieses Thema aufgegriffen. Ich will es heute aber etwas vertiefen. RISC und CISC sind zwei Abkürzungen, die für zwei Extreme bei der Architektur eines Prozessors stehen:

RISC: Reduced Instruction Set Computer leitet sich wie der Name schon ab von CISC: Complex Instruction Set Computer. Die Konzepte gab es schon seit den ersten Rechnern. Die Begriffe tauchten aber erstmals 1980 in Zusammenhang mit einem Berkeley Projekt eines Mikroprozessors auf, der viel weniger Transistoren brauchte als vergleichbare kommerzielle Varianten. Wie der Begriff suggeriert, verkleinerte man bewusst den Befehlssatz, vergleichen mit denen verfügbarer Prozessoren.

Der Begriff ist irreführend, denn zwar ist der Befehlssatz ein Merkmal das jeder sehen kann ohne den Chip unter dem Mikroskop zu beobachten, er ist aber nur ein Aspekt der Computer Architektur.  Dazu muss man verstehen, was der Unterschied in der internen Verarbeitung der Befehle ist bei beiden Architekturen ist und welche anderen Unterscheide es gibt.

Cray 1Kennzeichen von RISC

Das einfachste Merkmal von RISC ist die Anzahl der Befehle. "Reine" RISC Rechner sollten weniger als 100 Befehle aufweisen. CIS Rechner haben deutlich mehr Befehle, oft mehr als 200, es sind Architekturen mit bis zu 500 bekannt. Der Bereich zwischen 100 und 200 Befehlen ist ein Grau Bereich, So hatten Crays Supercomputer etwa 120 Befehle, wren jedoch eher als RIS Computer anzusehen,

Jeder Prozessor besteht aus unterschiedlichen Einheiten. Eine davon ist die Dekodier- und Steuereinheit. Der Prozessor holt zuerst einmal einen Befehl aus dem Speicher. Schon hier beginnen die Unterschiede zwischen CISC und RISC. Ein typisches Merkmal von RISC ist, dass alle Befehle gleich lang sind, oder wenn dies nicht möglich ist, bestehen sie oft aus gleich langen Teilen. Ein Computer der sehr viel RISC in seiner Architektur hatte, war z.B. die CDC 6600 alle Befehle waren hier 12 Bits lang, oder wenn sie eine Adresse enthielten (die dann nicht in die 12 Bits hineinpasste) 24 Bits also zweimal 12 Bits lang.

Das erlaubt es vorrausschauend immer 12 Bits aus dem Speicher zu holen, weil die Dekodiereinheit ja weis, das sie in jedem Falle die nächsten 12 Bits braucht (entweder als neuer Befehl oder als zweiter Teil eines 24 Bit Befehles). Dagegen sind CISC Architekturen oft byteweise orientiert. Ihre Befehle sind unterschiedlich lang. Selbst bei einem 8-Bit Prozessor, wie dem Z80, ist CISC möglich. Hier waren die Befehle zwischen einem und fünf Bytes lang. Bei der Intel x86 Architektur sind es (bei der 64 Bit Generation) zwischen einem und 11 Bytes. Durch die variable Länge ist das Dekodieren erschwert. Man kann zwar vorrausschauend das nächste Byte aus dem Speicher holen, aber eventuell reicht das nicht aus. Die Steuereinheit muss dann mehrmals Daten aus dem Speicher holen, was den Befehl verlangsamt.

Kennzeichnend für RISC auch ist ein einheitliches Befehlsformat, auch wenn dies eventuell bei bestimmten Befehlen "Platz" verschenkt. Die oben erwähnte Cyber CDC 6600 hatte folgendes einfache Format für alle Befehle die keine Adresse enthielten:

Funktionseinheit Befehlscode Zielregister Quellregister 1 Quellregister 2
3 Bit 3 Bit 3 Bit 3 Bit 3 Bit

Die Cyber 6600 hatte verschiedene Funktionseinheiten mit denen Sprünge durchgeführt wurden, logische Verknüpfungen durchgeführt, Fließkomma- und Ganzzahlrechnungen durchgeführt wurden. Die ersten 3 Bit adressierten die Funktionseinheit. So konnte diese direkt durch Durschschleifen der Leitungen an diesen Bits aktiv geschaltet werden. Die nächsten drei Bit gaben dann den Befehl an. Bei der Einheit für logische Verknüpfungen z.B. welcher Befehl dies war (Oder, Nicht, Und, Exklusiv-Oder etc.) und die bei der Operation beteiligten Register folgten dann in den nächsten 9 Bits. Dabei gaben die ersten drei Bits das Register an, wo das Ergebnis abgelegt wurde, die beiden anderen die Quellregister.

Bei Adressenoperationen war die Syntax eine andere:

Funktionseinheit Befehlscode Zielregister Adresse
3 Bit 3 Bit 3 Bit 18 Bit

Die ersten 9 Bits sind zum ersten Format identisch. Hier wird nur das Register angegeben das in die Adressoperation involviert ist (von dem Daten geladen oder gespeichert werden), dafür wurden die letzten 6 Bits mit dem zweiten 12 Bit Block zu einem 18 Bit Format kombiniert, dass nun eine Adresse im Adressraum von 218 Worten, das sind 262.144 Worte adressiert. Da die gesamten Befehle wortorientiert sind, adressierte die Cyber 6600 nicht einzelne Bytes, sondern ganze Worte. Der Speicher ist daher nicht 262.144 Bytes groß, sondern größer. Auch dies ist ein typisches RISC Merkmal. Die Wortbreite muss übrigens nicht der Befehlsbreite entsprechen. Bei der Cyber CDC 6600, aber auch den Cray 1-3 Supercomputern, die Seymour Cray als nächstes konstruierte, war ein Befehlswort größer als ein Befehl. Bei der CDC 6600 war es fünf Befehle breit (60 bit), bei der Cray 1 vier Befehle breit (64 Bit). Der Grund: ein Wort musste auch den größten Operanden aufnehmen, den der Computer bearbeiten konnte und das waren bei der CDC 6600 60 Bit breite Fließkommazahlen und bei der Cray 64 Bit breite Fließkommazahlen. Die 262.144 Worte entsprechen also 1.966.080 Bytes oder 1,3 Millionen Befehle.

Cray 2Charakteristisch für die RISC Architektur ist auch, dass die Befehle meist nur wenige Datentypen verarbeiten. Bei Ganzzahlen z.B. nur die Breite, auf die die Register ausgelegt sind. Bei einem 64 Bit Prozessor also nur 64 Bit breite Zahlen. Dagegen kann ein 64 Bit CISC Prozessor immer einzelne Bytes, oftmals auch 16 und 32 Bit breite Zahlen verarbeiten. Allerdings hat die Verarbeitung einzelner Bytes (sie wird für die Textverarbeitung benötigt) so hohe praktische Bedeutung, dass zahlreiche RISC Prozessoren auch einzelne Bytes verarbeiten können. Auch so spart man viele Befehle ein, da spezielle Befehle für die Zwischenformate entfallen.

In der internen Architektur findet man den größten Unterschied zwischen CISC und RISC. Typischerweise haben RISC Prozessoren sehr viele Register und diese sind universell einsatzbar, das bedeutet ein Befehl wird jedes Register einsetzen können. Die vielen Register haben den Vorteil, dass man viele Daten in der CPU halten kann. Muss man sie vom Speicher holen oder dort wieder ablegen, so dauert dies länger, weil dafür erst die Speicherbausteine angesprochen werden müssen, während die Ergebnisse in der CPU automatisch in den Registern landen. Viele Register sind also wünschenswert, genauso wie das jeder Befehl sie nutzen kann. Warum setzen viele CISC Prozessoren dann nur wenige Register ein und nicht alle Register sind gleichberechtigt? Der Grund liegt in der Dekodierung. Wie oben erwähnt haben viele CISC Prozessoren eine Dekodierung basierend auf einzelnen Bytes. Wenn man nun bei einem gegebenen Instruktionssatz einige Befehle in nur einem Byte unterbringen will, z.B. die am häufigsten benötigten, dann hat man wenig Platz um die Operanden anzugeben. Nehmen wir an die 16 häufigsten Befehle sollen in einem Byte dekodiert werden. Dann belegt der Opcode 4 Bit. Für die Register stehen dann nur noch 4 Bit zur Verfügung. Das sind wenn man ein kombiniertes Quell/Zielregister und ein zweites Quellregister nimmt nur 4 Register. Die Registerzahl ist dadurch begrenzt.

Die 80x86 Architektur hatte z.B. nur vier allgemein nutzbare Register, dagegen 10 Spezialregister. wie bei vielen Dingen auch gibt es auch hier einen Graubereich, so gibt es CISC Prozessoren mit vielen Registern und RISC Prozessoren mit wenigen. 16 und 32 Register werden z.B. in beiden Architekturen verwendet. einige RISC Architekturen haben aber hunderte Register oder sogar on Chip RAM als Registerersatz. Die vielen Register machen nicht nur den Prozessor unabhängiger vom Arbeitsspeicher, reduzieren also die Anzahl der Lade und speicherbfehle, auch Hochsprachen können so Parameter effizienter über Register an Unterprogramme übergeben.

Typisch ist daher auch bei CISC Architekturen die Verwendung des Zweiadressbefehlsformats, das man in einer höheren Sprache so formulieren würde:

A=A+B

Das bedeutet: das Ergebnis der Berechnung von A und B wird wieder im Register A abgelegt, dessen ursprünglicher Inhalt geht verloren. Das macht dann eventuell Kopieraktionen in andere Register nötig, wenn man den Wert noch braucht, es spart aber die Angabe dieses Registers im Befehl und so kann man vielleicht das eine oder andere Byte bei dem Code einsparen. Dies nennt man die Drei-Adress-Architektur, sie verwenden alle modernen 32 und 64 Bit Prozessoren, selbst Intel führte sie bei den AVX-Befehlen ein.

RISC Prozessoren setzen dagegen sehr oft die Dreiadress-option ein, die sich an der vom Menschen gewohnten Schreibweise orientiert:

C=A+B

Die zweite Lösung um Bits im Befehlswort zu sparen, ist es das Register gar nicht erst anzugeben, sondern immer anzunehmen, dass ein Befehl immer mit einem bestimmten Register arbeitet. Beim 8086 Prozessor war es so, dass bestimmte Adressbefehle immer annahmen, das eine Adresse, zu der ein Index addiert wurde sich im BX Register befand (das daher auch Basisregister hieß). Einige Schleifenbefehle veränderten das CX Register und prüften auf einen bestimmten Zustand (Register gleich Null, oder Überlauf aufgetreten) um einen Sprung durchzuführen oder nicht. CX stand daher auch für Counter Register) Befehle für die Ein/Ausgabe setzten implizit voraus, das die Adresse, an die Daten ausgegeben wurden, oder von der eingelesen wurden, sich im DX (Data Register) befand. Dann muss man das Register nicht mehr im Befehl angeben, aber aus einem Universalregister ist ein Spezialregister geworden,

Bei anderen Operationen, wie normalen Rechnungen waren die Register dagegen auch beim 8086 gleichberechtigt. Diese Spezialbefehle machen den Code kürzer, bei den Schleifenbefehlen ersetzen sie z.B. zwei Befehle: Einen Vergleich und einen Sprung. Tendenziell wird RISC Code daher länger sein, auch weil sie selten byteweise orientiert sind. RISC Architekturen können dies jedoch ausgleichen indem sie die vielen Register nutzen. Wenige Register erfordern mehr Speicherzugriffe. Dazu muss dann eine Adresse angeben oder errechnet werden. Das erstere verlängert den Code, beide Optionen brauchen Rechenzeit. Die 80386 CPU und die schon erwähnte CDC 6600 hatten in etwa genauso viele Transistorfunktionen. Die CDC 6600 hatte aber drei Registersätze mit je acht Registern zu zweimal 18 Bit und einmal 60 Bit Breite. Bei der 80386 sind es auch drei Gruppen. Es gibt aber nur vier allgemein nutzbare Register, sechs Register die nur Segmentadressen aufnahmen, mit denen man aber nicht rechnen konnte und zwei Register die nur für eine Gruppe von Befehlen genutzt werden die als "Stringbefehle" bezeichnet werden, weil sie einen Speicherbereich kopieren oder nach einem Wert durchsuchen können. Bei der CDC 6600 waren immerhin 16 Register für allgemeine Berechnungen nutzbar, beim 8036 dagegen nur vier.

charakteristisch ist auch, dass die Befehle eine einfache Load/Store Architektur haben. Das bedeutet: Daten werden aus dem Arbeitsspeicher in ein Register geladen. Alle Befehle ie Daten verändern (mathematische oder logische Befehle) arbeiten nur mit den Registern. Ergebnisse werden dann wieder in den Speicher zurückgeschrieben. Dagegen haben CISC Architekturen auch Befehle die Werte bei der Rechenoperation gleich wieder in den Speicher schreiben, einige sogar eine Memory-Memory Architektur (wie der iAPX 432, sie holen die Daten also aus dem Speicher und schreiben das Ergebnis in den Speicher und nutzen gar keine Register. diese einfache Architektur vereinfacht nicht nur das Dekodieren und den internen Aufbau, sie reduziert auch die Befehlszahl.

Interne Verarbeitung der Befehle

Alle heutigen Prozessoren setzen eine Pipeline bei der Verarbeitung ein. Damit verkürzen sie die Ausführungszeit. Im einfachsten Fall wird ein Befehl wie folgt durchgeführt:

Die Klammern zeigen optionale Bestandteile an. Beispiele für den Ablauf einiger Befehle im Pseudocode:

Nicht jede CPU unterstützt alle diese Befehle, insbesondere der letztere wäre ein typischer CISC Befehl.

Die Pipeline

Jeder komplexere Prozessor hat mindestens eine Pipeline, oft mehrere. Ein Befehl wird in die Pipeline aufgenommen, und bei jedem Takt durchläuft er einen Schritt. Ein Schritt kann nun einer der obigen elementaren Operationen sein, es kann aber auch sein, dass eine der Operationen mehrere Takte erfordert, dann wird jeweils eine Teiloperation durchgeführt. Eine Addition könnte z.b. aus den Teiloperationen bestehen: Quellregister an den Addierer übergeben, Addieren, Ergebnis an das Zielregister übergeben und zeitgleich Flagregister setzen. Dann würde die Ausführung drei Takte dauern. Nach drei Takten hätte dieser Befehl die Pipeline durchlaufen. Die anderen Stufen der Pipeline enthalten dann schon die nächsten Befehle in anderen Stadien der Ausführung. Unter einer Stufe versteht man jeweils einen Teil einer Pipeline die einen Teil der Befehlsausführung aufnimmt. Als optimale Länge hat sich durch Erfahrung eine Pipeline mit acht Stufen herausgestellt, es gibt aber auch deutlich längere Pipelines. beim Pentium 4 war sie z.B. 20 Stufen lang, weil in jeder Stufe wegen einer Auslegung auf einen hohen Takt nur sehr wenig passiert.

Hat man mehrere Pipelines, so kann man mehrere Befehle in jeweils unterschiedlichen Stufen der Bearbeitung halten. Der Vorteil ist, dass dann ein langsamer Befehl nicht die Verarbeitung der nachfolgenden eventuell schneller ausführbaren Befehle aufhält. Der Vorteil dieser Art von Pipeline ist, dass sie im Idealfall pro Takt dann einen Befehl ausführen kann, weil sie bei jedem neuen Takt einen neuen Befehl in die erste Stufe holt, also den Fetch durchführt. Verfügt ein Prozessor über mehrere funktionale Einheiten z.B. mehrerer Addierer dann kann er sogar pro Takt mehrere Befehle ausführen, sofern er genügend Pipelines hat um die vielen Befehle aufzunehmen.

Nun gibt es aber Abhängigkeiten. So kann eine Rechnung beim nächsten Befehl auf ein Register zugreifen das gerade erst benutzt wurde. Eventuell sogar durch eine langsame Multiplikation, dann hält dies die Abarbeitung auf. RISC Prozessoren sind hier im Vorteil, weil durch viele Register diese Blockade seltener zu erwarten ist. Zudem sind die einfacheren Befehle schneller zu dekodieren und es entfallen sehr oft die optionalen Speicherzugriffe und Zurückschreiboperationen. Das macht den Aufbau der Pipeline einfacher, sie kann kürzer sein. Ein weiterer Vorteil, nachdem schon die Steuereinheit einfacher aufgebaut werden konnte durch das einfachere Befehlsformat. Eine schnellere Dekodierung erhöht auch die Anzahl der Befehle die pro Sekunde abgearbeitet werden können. Weiterhin verringert sie die Geschwindigkeitseinbußen die bei Sprüngen auftreten: Die Pipeline liest ja vorrausschauend Befehle. Es sind bei einer achtstufigen Pipeline dann mindesten acht Befehle in der Arbeit. Bei einem Sprung ist nun das vorausschauende Lesen sinnlos, den der Code wird bei einet anderen Stelle fortgeführt. Bis die Pipeline nun wieder gefüllt wird, dauert es eine gewisse Zeit und in dieser Zeit bringt die Pipeline keinen Geschwindigkeitsvorteil. Je kürzer die Pipeline ist, desto kleiner dieser Nachteil.

Zumindest bei den ersten RISC Prozessoren ging auch daher, dass diese über keine Caches verfügten. Ein Cache ist ein Zwischenspeicher, der dazu dient, auf häufig benutzte Speicherbereiche schnell zugreifen zu können, den seit es Computer gibt  ist Speicher langsamer als die Logik. Eine einfache Methode diese Langsamkeit zu kompensieren ist es nacheinander auf verschiedene Speicherbausteine zuzugreifen. Das reicht bei vielen RISC-Prozessoren aus, um einen kontinuierlichen Zugriff auf die Instruktionen zu gewährleisten. Der Zugriff auf den Speicher um Daten zu holen war dagegen nicht sehr oft nötig, weil die vielen internen Register viele werte aufnahmen. CISC Prozessoren mit ihren wenigen Registern mussten dagegen oft Daten auslagern und setzten daher schnell auf Caches um Daten zwischenzuspeichern. Zudem beschleunigten diese den sonst recht ineffizienten nur byteweisen Zugriff. (Für einen Speicherbaustein ist es egal ob er 8 Bit oder 32 Bit auf einmal überträgt).

Heute ist Speicher aber um den Faktor 30-40 langsamer als die interne Logik sodass auch RISC Prozessoren Caches haben.

Was RISC nicht ist, ist ein einfacher Befehlssatz. Vielmehr wird nur gesagt, dass es nicht viele Befehle sind. "reduced" Beim 80386 waren es z.B. 129, bei der CDC 6600 um das Beispiel fortzuführen 70. Allerdings waren diese viel mächtiger. So konnte die CDD 6600 mit einem Befehl zwei Fließkommazahlen multiplizieren, dafür brauchte der 80386 ein ganzes Programm. "Reduced" darf also nicht mit "Simple" verwechselt werden. Die Cray 1 war auch ein RISC Vertreter, konnte aber mit einem Befehl die Verarbeitung von bis zu 64 Fließkommaoperationen auf einmal anstoßen.

Auch erlaubt RISC keinen Rückschluss auf die interne Struktur eines Prozessors, also ob diese "einfach" oder "komplex" ist. Man findet unter diesem Label sowohl den ersten ARM Prozessor V2 (die V1 Version wurde niemals eingesetzt, ARM ist bis heute ein Hardwaredesignhaus, das Architekturen entwirft und für diese Lizenzen vergibt. Gebaut und meistens auch modifiziert werden diese dann von den Lizenznehmern). Der ARM Prozessor hatte nur 30.000 Transistoren, das ist die gleiche Zahl wie im Intel 8086, aber er war ein vollwertiger 32 Bit Prozessor der schneller als der 80286 von Intel war. Auf der anderen Seite findet man unter den RISC Prozessoren die schon erwähnten Supercomputer von Cray mit mehreren Funktionseinheiten. Vektoroperationen, mehreren Pipelines oder den Alpha Chip mit vier Integer-Funktionseinheiten und zwei Fließkommafunktionseinheiten, Umsortieren der Befehle um Blockaden zu verhindern, Schattenregister, Sprungvorhersage und zwei Leveln an Caches unterteilt in Daten und Code.

Genauso wenig ist ein einfach aufgebauter Prozessor automatisch RISC, allerdings ist es recht selten, das ein Prozessor mit einem sehr einfachen Aufbau einen komplexen Befehlsstart aufweist.

Historische Betrachtung

CDC 6600Die schon erwähnte CDC 6600 wird als einer der ersten RISC Rechner beschrieben. Das besondere an ihr ist sicher, dass sie obwohl sehr leistungsfähig einen sehr begrenzten Befehlssatz hatte. Man findet in ihr auch andere Prinzipien umgesetzt wie geradliniges Befehlsformat, Verarbeitung nur bestimmten Datentypen (18 Bit Ganzzahlen, 60 Bit fließkommazahlen9, viele Register.

Später waren auch Crays folgende Supercomputer RISC Rechner. Sie verzichteten auf Caches, übernahmen die vielen Register, und hatten zwei einheitliche Befehlsformate. Die Rechner von Seymour Cray waren über 30 Jahre lang die schnellsten Rechner der Welt.

Die von Intel geschaffene Architektur, zuerst des 8080, später des 8086 waren dagegen CISC Rechner. Da der Befehlsumfang im Laufe der Zeit erweitert wurde gingen sie sogar immer mehr Richtung CISC. Auch die Motorola 68000 Architektur gilt als CISC, wenn auch nicht so ganz ausgeprägt. (im realen Leben wird man kaum je einen "reinrassigen" CISC oder RISC Rechner finden, sondern immer Elemente dieser Architekturen: hat ein Rechner viele RISC Elemente so wird man ihn als RISC bezeichnen und umgekehrt. Manche CPUs liegen auch zwischen den Extremen.

Mit dem Siegeszug dieser beiden Architekturen im kommerziellen Bereich kam in der Universität von Berkeley der Wunsch auf einen eigenen Prozessor zu designen, der mit den vorhandenen Mitteln im Auftrag von einem Halbleiterhersteller produziert werden konnte und der als Basis für schneller Rechner für Forschung dienen könnte. Sie meinten dass sowohl Intels wie Motorolas Architektur unnötig komplex war und zu langsam.1980 wurde für dieses Konzept der Begriff RISC geprägt, von 1981 bis 1984 wurde  in Berkeley ein 32 Bit Mikroprozessor entwickelt. Dieser Prozessor, "RISC I" hatte eine 32 Bit Struktur und 44.500 Transistoren, nur 31 Befehle, aber 78 Register. Bis 1984 wurde das Konzept verbessert und RISC II hatte nur noch 38.900 Transistoren. Zum Vergleich: Intels erster 32 Bit Mikroprozessor 80386 hatte 275.000 Transistoren, Motorolas MC 68020 190.000. Beide erscheinen in etwa zur gleichen Zeit.

RISC I und II wurden nie als Chips produziert, sondern waren Studien. Viele Merkmale von RISC II wurden als Thumb-Befehlssatz in die ARM Archietektur übernommen. Aus dem Projekt wurden aber Spinoff Firmen gebildet, die bekannteste ist MIPS. Andere Firmen, wie Sun übernahmen die Konzepte. So kam es Ende der Achtziger zu der Vorstellung zahlreicher Mikroprozessoren die RISC Architekturen hatten wie von MIPS, die SPARC Serie von Sun, die Power PC von IBM/Motorola/Apple und der Alpha Prozessor von DEC. Zahlreiche dieser Chips deklassierten die etablierten x86 CPUs von Intel. Da zu diesem Zeitpunkt aber schon Millionen von PCs verkauft wurden konnten sie wegen der Hardwareinkompabilität sich nicht auf dem Markt durchsetzen - zumindest nicht als PC. Sie wurden für größere Rechner eingesetzt oder in Spielkonsolen oder als Embedded Geräte. Apple hatte mit dem Power PC die einzige PC Konkurrenzplattform und setzte auch einen RISC Prozessor ein, der Marktanteil war aber unter 10%.

Trotzdem erlebte die RISC Architektur in den Achtziger Jahren ihre Blüte, es kamen sehr viele Prozessoren auf den Markt und RISC wurde zu einer Art Modewort. Selbst Intel startete einen Versuch einen eigenen RISC Prozessor den I860, der 1989 erschien. Er hatte einige fortschrittliche Features für seine Zeit, wie lange Befehlsworte (VLIW), war jedoch sehr schwerer zu programmieren. Compiler erreichten nur einen Bruchteil der theoretischen Leistung. So wählten Kunden entweder einen einfacher zu programmierenden RISC Prozessor oder Intels 486.

PentiumIntel reagierte darauf, indem sie das Innenleben ihrer Prozessoren auf RISC umstellte. Das bedeutet es gab intern mehr Register als man außen sah die als Schattenregister Zwischenwerte aufnahmen und so die Abhängigkeiten entkoppelten und sie verarbeiteten intern auch einen einfacheren RISC-Code. Der Befehlsdekodierter übersetzte dazu in einem ersten Schritt den komplexen CISC Code in einen einfacheren RISC Code, der "Mikro-Ops" genannt wurde. So konnte Intel die Komptabilität waren und trotzdem die Vorteile von RISC nutzen (mit Ausnahme das nach wie vor komplexen Dekodiervorgangs).

Dies war so erfolgreich, das Intel ab dem Pentium, der als erstes diese Architektur einsetzte, sehr schnell die Taktfrequenz steigern konnte, was mit dem CISC Code bisher nur sehr langsam ging (von 8 MHz auf 66 MHz in 15 Jahren - Der Pentium schaffte denselben Faktor in sieben Jahren) und so auch die meisten RISC Prozessoren in der Leistung abhängen.

Sie haben heute aber noch Bedeutung. Die ARM Architektur findet sich z.B. in den meisten Smartphones, Tablett-PCs. sie profitiert davon dass die RISC-Chips durch weniger Transistoren pro Chip auch eine geringere Verlustleistung haben, mit dem Strom aus einer Batterie also länger auskommen. Trotz verschiedener Versuche gelang es Intel nicht ihre x86 Technologie so stromsparend zu bekommen.

Befehlssatz und Anwendungen

Eine zweite Motivation die man in Berkeley hatte, war die Softwareseite. Einen 32 Bit Mikroprozessor programmiert man nicht mehr in Assembler. UNIX war schon das Standardbetriebssystem zu dieser Zeit für größere Rechner und war in C geschrieben und Anwendungsprogramme wurden auch in C, Pascal oder anderen höheren Programmiersprachen erstellt. Compiler übersetzen einen Quellcode aber nach einer Vorschrift einem festen Schema. Eine Untersuchung zeigte, dass 80% des von Compilern erzeugten Codes nur 20% aller Befehle verwendeten. Die meisten Compiler nutzen viele Spezialbefehle überhaupt nicht und andere nur selten, wenn sie unumgänglich waren (so kommt man beim 8086 um die Benutzung des BX Registers für indizierte Adressierung nicht herum). Die Überlegung war daher dass ein Code mit verringertem Befehlssatz die Programme nicht langsamer machen würde, weil die anderen Befehle eh kaum benutzt werden. Durch die schnellere Verarbeitung könnte der Code sogar schneller ausgeführt werden. Weiterhin wäre es einfacher effiziente Compiler zu bauen.

Diese Überlegung erwies sich als völlig richtig. So ist bis heute die Unterstützung von zahlreichen Features die Intel nach und nach in die Prozessoren eingebaut hat durch selbst die modernsten Compiler als nur schlecht.

So hat Intel Vektoroperationen (die Verarbeitung von zwei oder vier Zahlen gleichzeitig) und kombinierte Additions-/Multiplikationsinstruktionen und Drei-Adress-Adressierung eingeführt. Eine Matrixmultiplikation die beides nutzen würde, wird von aktuellen Compilern aber nicht effizient kompiliert. Anstatt theoretischen 204,8 GFLOPs für einen i7-4750HQ Prozessor wurden so nur 29 GFlops erreicht und auch nur wenn man explizit die Nutzung anmahnte. Da Intels Architektur aber weiterhin in jedem PC steckt wird man mit diesem Problem weiterhin leben müssen. Das ist der Fluch der Komptabilität, die zum einen es erlaubt Programme von einem Rechner zum nächsten zu verwenden (außer Microsoft erklärt etwas für obsolet, was aber sehr lang dauern kann, so wurde die DOS/Windows 3.1 Architektur die noch auf 16 Bit Code basiert erst mit Windows 7, mehr als 15 Jahren nach der letzten DOS Version aus dem Windows Kernsystem entfernt).

Ideal wäre sicher auch für Intel der Neubeginn mit einer "sauberen", aber zeitgemäßen Architektur die wahrscheinlich eine RISC Architektur wäre. Doch angesichts der bisherigen Misserfolge parallel zur x86 oder x64 Architektur eine neue zu etablieren, dürfte die Firma dies nicht anstreben. Motorola machte den Schwenk zur PowerPC Architektur, weil die Mc680x0 Rechner massiv an Marktanteilen in den frühen Neunzigern verloren und man die Leistung nur noch mit hohem Aufwand steigern konnte. In dieser Situation scheint Intel aber zumindest 2014 nicht zu sein: im Gegenteil, nachdem man mit dem Pentium 4 auf das falsche Pferd setzte, konnte man in den vergangen Jahren in der Performance den Hauptkonkurrenten AMD deutlich überholen und den eigenen Marktanteil auf ein Allzeithoch bringen. Weitere Plattformen gibt es seit auch Apple x86 Prozessoren einsetzt, zumindest bei den PCs schon lange nicht mehr Selbst Supercomputern bestehen heute aus Clustern tausender von Xeon Prozessoren.

Vergleiche

Im folgenden will ich einige RISC CPUs im Vergleich mit ihren CISC Pendants derselben Zeit vorstellen

CPU Erschienen Architektur Transistoren Geschwindigkeit [MIPS]
MIPS R2000 1984 32 Bit RISC 110.000 10 @ 16 MHz
MC 68020 1984 32 Bit CISC 190.000 2 @ 16 MHz
Intel 80386 1986 32 Bit CISC 275.000 4 @ 16 MHz
SPARC V7 1987 32 Bit RISC 100.000 10 @ 16,7 MHz
Inmos T414 1987 32 Bit RISC 200.000 10 @ 20 MHz
Arm V2 1987 32 Bit RISC 30.000 4,5 @ 9 MHz
Motorola MC 68030 1989 32 Bit CISC 275.000 8 @ 25 MHz
Intel i860 1989 32 Bit RISC 2.500.000 30 @ 40 MHz
Intel 80486 1989 32 Bit CISC 1.200.000 15 @ 25 MHz
Intel Pentium 1993 32 Bit CISC/RISC 3.100.000 78 @ 66 MHz
Power PC 1992 32 Bit RISC 2.800.000 63 @ 66 MHz
PA RISC 7100 1995 32 Bit RISC 850.000 117 @ 100 MHz
DEC Alpha 21264 1996 64 Bit RISC 15.200.000 300 @ 150 MHz
Intel Pentium Pro 1995 32 Bit CISC/RISC 5.500.000 194 @ 150 MHz
Itanium (Montvale) 2007 64 Bit VLIW 500.000.000 890 @ 2.530 MHz
Die MIPS angaben (1 MIPS = 1 Million Instruktionen pro Sekunde) sagen nur bedingt etwas über die reale Geschwindigkeit eines Programmes aus, da dies davon abhängt wie "mächtig" die Befehle sind. Hier können CISC CPU's zum Teil wieder Boden gutmachen.

Artikel erstellt am 18.6.2014, Artikel zuletzt aktualisiert: 8.4.2022


© des Textes: Bernd Leitenberger. Jede Veröffentlichung dieses Textes im Ganzen oder in Auszügen darf nur mit Zustimmung des Urhebers erfolgen.

Zum Thema Computer ist auch von mir ein Buch erschienen. "Computergeschichte(n)" beinhaltet, das was der Titel aussagt: einzelne Episoden aus der Frühzeit des PC. Es sind Episoden aus den Lebensläufen von Ed Roberts, Bill Gates, Steve Jobs, Stephen Wozniak, Gary Kildall, Adam Osborne, Jack Tramiel und Chuck Peddle und wie sie den PC schufen.

Das Buch wird abgerundet durch eine kurze Erklärung der Computertechnik vor dem PC, sowie einer Zusammenfassung was danach geschah, als die Claims abgesteckt waren. Ich habe versucht ein Buch zu schreiben, dass sie dahingehend von anderen Büchern abhebt, dass es nicht nur Geschichte erzählt sondern auch erklärt warum bestimmte Produkte erfolgreich waren, also auf die Technik eingeht.

Die 2014 erschienene zweite Auflage wurde aktualisiert und leicht erweitert. Die umfangreichste Änderung ist ein 60 Seiten starkes Kapitel über Seymour Cray und die von ihm entworfenen Supercomputer. Bedingt durch Preissenkungen bei Neuauflagen ist es mit 19,90 Euro trotz gestiegenem Umfang um 5 Euro billiger als die erste Auflage. Es ist auch als e-Book für 10,99 Euro erschienen.

Mehr über das Buch auf dieser eigenen Seite.

Hier geht's zur Gesamtübersicht meiner Bücher mit direkten Links zum BOD-Buchshop. Die Bücher sind aber auch direkt im Buchhandel bestellbar (da ich über sehr spezielle Themen schreibe, wird man sie wohl kaum in der Auslage finden) und sie sind natürlich in den gängigen Online-Plattformen wie Amazon, Libri, Buecher.de erhältlich.

Sitemap Kontakt Impressum / Datenschutz Neues Hier werben / advertisment here Buchshop Bücher vom Autor Top 99