Intels neue Prozessorarchitektur
Seit 2006 gibt es die Core-Prozessorarchitektur bei Intel. Seitdem wurde sie erweitert, ist aber im Prinzip die gleiche geblieben. Mehr über sie findet man auf der Website. Nun will Intel sie renovieren, wenngleich auch nicht ersetzen, wie dies zwischendurch mal mit der Netburst-Technologie des Pentium 4 geschah. Es ist im Prinzip eine Renovierung, wie bisher in den letzten Generationen, aber eine die sich nun auch auf die Programmierebene auswirkt, während es bei den letzten Generationen immer eine interne Optimierung war und man die Programme nicht umstellen musste, außer man wollte neue Features mit neuen Befehlen wie Verschlüsselung oder Vektorrechnungen nutzen.
Es gibt zwei Neuerungen. Die kleinere, aber für Programmierer radikalere ist das es einen neuen Instruktionssatz gibt. Seit dem Pentium Pro arbeitet der Prozessor intern mit MicroOps oder µOps. Bis zum Pentium war es so das der Dekoder die Befehle mit einem Fetch geholt wurden, entweder direkt in Hardwareschaltungen umsetzte oder bei den letzten Generationen in einem Mikrocode-ROM die Instruktionen geholt und ausgeführt werden, die letztendlich aber auch Bitmuster sind die nacheinander bestimmte Teile des Prozessors aktivierten.
Seit dem Pentium Pro arbeitet ein x86 Prozessor intern als RISC Prozessor. RISC war in der Computerindustrie das Buzzword der zweiten Hälfte der Achtziger und den ersten Jahre der Neunziger. Es schien damals als die Lösung dafür, dass Chips mit jeder Generation immer komplexer und aufwendiger wurden. Der 8086 und seine Nachfolger ist ein typischer CISC Prozessor. Die Abkürzung steht für Complex Instruction Set Computer. Die Befehle sind also sehr leistungsfähig und komplex. So hat schon der Urahn Befehle zum Durchsuchen von Speicherblöcken nach Bitmustern. RISC steht für das genaue Gegenteil, Reduced Instruction Set Computer. Die Befehle sind elementar, der obige Blocksuchbefehl würde durch ein ganzes Programm ersetzt werden müssen. Entsprechend sind es auch weniger Befehle. Dafür ist ein Prozessor viel einfacher aufgebaut und billiger zu fertigen. Idealerweise ist er aber nicht langsamer, weil er die einfachen Befehle schneller ausführen kann.
In den Achtzigern entstanden als RISC Architekturen die MIPS Architektur, die SPARC Architektur und die bis heute aktuellen ARM Prozessoren. Letztere haben auch bis heute überlebt. Anfang der Neunziger kam der PowerPC Prozessor von Motorola/Apple/IBM als Gemeinschaftsprojekt hinzu und selbst Intel versuchte mit dem I860 eine solche Architektur im Markt zu platzieren, was aber nicht gelang. Beim Pentium Pro baute Intel einen RISC Prozessor in den CISC Prozessor ein. Man könnte auch sagen, dass heute jeder x86 Prozessor eigentlich ein RISC Prozessor ist, der einen vorgeschalteten Decoder hat der CISC Anweisungen versteht.
Der Vorteil liegt darin, das diese MikroOps so gewählt werden können das die Geschwindigkeit optimal ist. Sie sind besser als die x86 Anweisungen umsortierbar, wodurch Befehle vorgezogen werden können. Ohne dieses Feature, OOO-Scheduling (Out-of-Order = OOO) wären die Prozessoren sehr langsam. Intel hat in den Atoms auch Prozessoren ohne OOO-Schedulung und deren Geschwindigkeit fällt doch stark ab. Weiterhin kann Intel die interne Architektur ändern und hat dies in der Vergangenheit auch getan, ohne das sich dies auf den Befehlssatz auswirkt, so wurden MikoOps zusammengefasst (MikroOp-Fusion), später stand sogar eine Micro-Op für zwei x86 Befehle (Makro-Op Fusion, z. B. bei dem in Schleifen benötigten Paar Vergleich → bedingter Sprung). Seit einigen Generationen hat sich bei den MicroOps aber auch nicht mehr viel getan.
Nun will Intel diesen Befehlssatz, also die MicroOps als zweiten Befehlssatz auch nach „Außen“ als RISC-Instruction Set anbieten. Intel nennt einige Vorteile:
- Die Befehle sind im Mittel 20 % kürzer. Das liegt daran, dass x86 Befehle historisch gewachsen sind. Die kurzen Opcodes werden alle von den 16 Bit Befehlen des 8086 genutzt, die heute im Code aber nicht mehr vorkommen. 32 und 64 Bit Befehle müssen einige unbenutzte Opcodes als Prefixe nutzen und dies ist nun nicht nötig. Es werden nicht wie bisher, unbenutzte Opcodes mit neuen Befehlen belegt, sondern ein bestimmtes Bitmuster steht zugleich für einen x86 oder RISC-Befehl, nur der Modus unterscheidet über die Interpretation.
- Das Dekodieren ist aus dem Grund und wegen der einfacheren Struktur der Befehle schneller erledigt. Die Latenz (Gesamtdauer eines Befehls) sinkt um 20 bis 30 Prozent.
- Der Befehlssatz ist orthogonal. Es gibt keine Spezialregister mehr, jedes Register kann alle Operationen durchführen. Das ist vor allem für Compiler wichtig, die so effizienter den Code übersetzen können.
- Es ist eine VLIW Architektur. Die 64 Bit Register können auch als 2 x 32, 4 x 16 oder 8 x 8 Register genutzt werden. Sowohl bei Ganzzahlen wie Fließkommazahlen (bei denen aber nur bis 16 Bit). Es entfallen die Operationen mit längeren Operanden wie bei AVX. Die AVX Instruktionen wurden bisher intern in parallel ausgeführte Operationen mit mehreren 64 Bit Registern umsetzt. Da der Andentyp in einem 2 Bit Feld kodiert ist und es hier noch eine Position frei ist, ist für die Zukunft auch eine Erweiterung auf 128 Bit denkbar, so erste Spekulationen nach der Vorstellung der Architektur auf dem Intel Architecture Day 2022.
- Es gibt viel mehr Register. Es stehen jeweils 256 Ganzzahl und 256 Register direkt adressierbar zur Verfügung. Intern können es noch mehr sein. Die P-Kerne von Alder Lake haben z. B. 280 Integer und 332 Fließkommaregister. Die zusätzlichen Register stehen über Register-Windows zur Verfügung. Das haben auch andere Architekturen wie z.B. SPARC. Zwischen 8 und 128 Register (in Zweierpotenzen abgestuft) können durch einen Befehl ausgetauscht werden. Compiler können so für jede Unterroutine für Parameter und lokale Variablen ein Window einführen. Ebenso Prozesse. Xeon-Serverprozessoren sollen daher viel mehr interne Register als Desktop Prozessoren (bis zu vierstelligen Zahlen) erhalten. Aber auch bei normalen Befehlen können so viel mehr Werte in den Registern gehalten werden.
- Die Register sind gepipelint. Das bedeutet, während mit einigen Registern gerechnet wird, werden die Operanden schon in die folgenden Register geladen und die Ergebnisse aus den vorherigen Registern in den Speicher geschrieben. Das ersetzt die AVX Befehle, weil bei 256 Fließkommaregister so mehrere Operationen simultan möglich sind.
Insgesamt soll µOps Code erheblich schneller sein. Um wie viel hängt davon ab, wie gut ein Compiler die neuen Features ausnutzt.
Intel hat aus dem Fiasko mit dem 80286 gelernt. Der erweiterte die x86 Architektur, aber die neuen Befehle gab es nur beim Umschalten in einen neuen Modus, den Protected Mode. Das war aber eine Einbahnstraße, aus der es keinen Rückweg gab. Mit einem unbelegten Opcode kann man den Prozessor in den neuen Befehlssatz umschalten. Ungültige Opcodes die z. B. von x86 Befehlen herrühren könnten, erzeugen eine Exception, die an das Betriebssystem weitergegeben wird. Das Mischen von x86/RISC-Befehlen ist so nicht möglich, dazu sind die Architekturen zu verschieden. Mit einem Befehl kann man jederzeit aber wieder vom RISC-Op Modus in den x86 Modus umstellen. Die x86 Register werden dabei restauriert.
Davon erhofft sich Intel eine schnelle Umsetzung in der Industrie. Die Einführung einer neuen Architektur ist riskant. Apple hat dies dreimal hinbekommen beim Wechsel von Mc68k auf PowerPC, dann IA-86 und zuletzt ARM. Das geschah durch das Betriebssystem das jeweils Emulationen für das alte Binärformat beinhaltete. Ähnliches schwebt auch Intel vor. Es sind, weil beide Befehlssätze vom selben Prozessor verstanden werden aber auch „Mixed Binarys“ möglich. Diese starten im x86 Modus, stellen über CPUID und andere Statusabfragen fest, ob der Risc-Op Modus unterstützt wird, und verzweigen dann entweder in einen Programmteil mit diesen Instruktionen oder führen die x86 Befehle aus. Der Nachteil solcher Mixed-Binarys ist das sie größer sind, sodass Intel hier hofft, dass das Betriebssystem ein neues Binärformat für Risc.Ops einführt und das Betriebssystem jeweils die richtige Version bestimmt.
Die zweite Änderung ist radikaler, betrifft aber nicht die normalen Programmierer, sondern Betriebssystemen. Intel wird eine lineare Speicherarchitektur einführen, die nun auch Massenspeicher miteinbezieht. Im Prozessor gibt es eine Tabelle, die vom Betriebssystem gefüllt wird und die in Gigaybyte Schritten (derzeit sind 2^48 Byte = 65536 GByte adressierbar) je zwei Bits für Lese- und Schreibgeschwindigkeit hat. Das sind Stufen von 0 bis 3, wobei 3 für die schnellste und 0 für die langsamste Geschwindigkeit stehen und die für verschiedene Speicher so aussieht:
Lesen | Schreiben | Permanenz | |
ESRAM | 0 | 0 | 0 |
DRAM | 1 | 1 | 0 |
MRAM | 1 | 1 | 1 |
Flash-ROM | 2 | 3 | 1 |
Harddsic | 3 | 3 | 1 |
Das Feld Permanenz steht dafür, ob der Speicher permanent ist, also nach Abschaltung der Spannungsversorgung nicht gelöscht wird. MRAM ist eine schon verfügbare Technologie, die aber noch selten eingesetzt wird, meist als Absicherung von DRAM bei Stromausfällen. Neu ist ESRAM, Expendable SRAM. Das ist statisches RAM, bei denen eine Zelle mehr Transistoren hat als bei der klassischen Flip-Flop Technik, aber auch mehr als ein Bit speichert, z. B. vier Bit in acht Transistoren. Gegenüber klassischem SRAM wie er in Caches eingesetzt wird, benötigt man nur zwei Transistoren pro Bit anstatt vier bis sieben (je nach Geschwindigkeit). Dafür kann man die Bits nur sequentiell nacheinander auslesen. Trotzdem soll ESRAM bedeutend schneller als DRAM sein, der derzeit minimale Zugriffszeiten von 10 ns hat, das sind bei 5 GHz Takt 50 Takte für einen Zugriff. Ein 4 Bit ESRAM würde das auf 4 Takte ein 8 Bit ESRAM auf 8 Takte reduzieren.
Der Grund für das Einbinden von Massenspeichern ist, dass so der Speicherverbrauch optimiert werden kann. Der Inhalt eines Flash-ROM muss nicht in den Arbeitsspeicher kopiert werden und kann direkt aus dem ROM gelesen werden. Schreibzugriffe werden gesammelt und wenn ein Block voll ist oder Zeit ist ausgeführt. Diese finden nach wie vor im DRAM statt. Das führt der Prozessor selbst aus. Für die Verwaltung werden aber neue Betriebssysteme benötigt, weil der Prozessor hier nur assistiert. Vor allem für Server sind die Vorteile enorm. Diese bedienen üblicherweise viele Benutzer, jeden in einem eigenen Prozess und bei jedem Prozess sind bestimmte Module des Betriebssystems oder Anwendung wie PHP-Interpreter, Apache Webserver etc. im RAM. Diese Doppelbelegung kostet Speicher. Ohne Betriebssystemunterstützung bleibt es bei der bisherigen Speicherarchitektur.
Wann die Änderungen kommen, ist noch offen. Intel meint, das der RISC-Befehlssatz schon in der 14-ten Generation (nach Rocket Lake) kommen könnte, das Unified Memory Modell ab der 16-ten Generation. Dies ist aber abhängig vom Fortschritt der Herstellungstechnologie, da dafür der 7 nm Prozess vorgesehen ist, und Intel hier hinterherhinkt, erst letztes Jahr die 10 nm Technologe mit mehrjähriger Verspätung einführte.