7H0M45 schrieb:
Blöde Frage an die Profis, könnte man nicht bei den x86 Prozessoren prinzipiell alten Ballast wegwerfen und darauf scheißen ob eine 30 Jahre alte Software drauf läuft oder nicht, um das ganze effizienter zu gestalten?
Andersherum, ist ARM noch wesentlich effizienter wenn es den komplett gleichen Funktionsumfang wie x86 bietet, vor allem auch im Hinblick auf Abwärtskompatibilität?
Ich versuche mal - als Nicht-Profi, aber interessierter Laie - eine Erklärung anhand des Apple M1 Prozessors, warum der (ARM-)RISC-Ansatz der sinnvolle(re) Weg für den Umgang mit der immer größer werden Zahl zur Verfügung stehender Transistoren im CPU-Design sein könnte:
Die "interne Parallelität" (Superskalarität) der
ultra-wide execution architecture des Apple M1 Prozessor ist doppelt so groß wie bei x64 (8-fach vs. 4-fach), doppelt so viele Pipelines können also mit Befehlen gefüttert werden. Das kann aber nur dann
sinnvoll geschehen, wenn die Maschinenbefehle zuvor unter Berücksichtigung etwaiger Abhängigkeiten neu sortiert wurden (
out-of-order execution: Ausführung der Maschinenbefehle in anderer Reihenfolge als im Programmcode) und Maschinenbefehle auch schon mal "auf gut Glück" ausgeführt werden (
speculative execution - wird das Ergebnis der Ausführung nicht benötigt, dann bekommt man die
misspeculation penalty in Form eines höheren Stromverbrauchs). Dazu benötigt der M1 sehr komplexe Dispatch/Reorder-Units. Zusammen bescheren ihm die 8-fache Superskalarität und diese komplexen Dispatch/Reorder-Units den ca. 4-fach höheren Maschinenbefehl-Durchsatz im Vergleich zu x64, wobei die einzelnen Maschinenbefehle allerdings weniger mächtig sind.
x64 bleibt dieser Design-Pfad verwehrt - zumindest in einer
so konsequenten Umsetzung wie beim M1 (und im kommenden Jahr beim Power10-RISC-Prozessor von IBM - ebenfalls 8-fach superskalar), weil x64 als CISC mit
variable length instructions (1-15 Bytes bei x64) arbeitet im Gegensatz zum RISC (
fixed length instructions - 4 Bytes bei ARM), womit der Aufwand für die Erhöhung der
super-scalarity und
gleichzeitig der
out-of-order &
speculative execution extrem anwachsen würde im Vergleich zum RISC. Obendrein müsste dieser Aufwand auch für alle zwar mächtigen, aber selten(er) benötigen Maschinenbefehle des CISC betrieben werden, während sich der RISC auf wenige, aber häufiger verwendete Maschinenbefehle konzentriert und komplexere Funktionen aus diesen zusammenbaut.
Man kann es also auch so ausdrücken: Der RISC nutzt das zur Verfügung stehende Transistor-Budget eines Chip-Designs besser als der CISC. Dass der RISC letztendlich dominieren wird, ist den Experten schon seit den 80er Jahren des letzten Jahrhunderts klar. Aber erst die Revolution des mobilen Internets hat letztendlich die entscheidende Wende gebracht. Solange konnte man sich im x86/x64-Lager noch mit dem Vorteil der Abwärtskompatibilität, starker Verbreitung und schweren, voluminösen Endgeräten - mit ebensolcher Kühlung - behaupten.
… und mit RISC-V steht jetzt sogar eine freie Alternative zur Verfügung. Ich hoffe, dort schaut man sich bei Apple etwas ab.