Warum hat ARM 16 Register?

8

Warum hat ARM nur 16 Register? Ist das die ideale Zahl?

Erhöht die Entfernung von Registern zu mehr Registern auch die Verarbeitungszeit / Leistung?

    
Carbonizer 11.12.2011, 19:55
quelle

5 Antworten

15

Wenn die Anzahl der Mehrzweckregister kleiner wird, müssen Sie den Stapel für Variablen verwenden. Die Verwendung des Stapels erfordert mehr Anweisungen, so dass die Codegröße zunimmt. Durch die Verwendung des Stacks erhöht sich auch die Anzahl der Speicherzugriffe, was sowohl die Leistung als auch den Stromverbrauch beeinträchtigt. Der Kompromiss besteht darin, dass zur Darstellung von mehr Registern mehr Bits in Ihrer Anweisung benötigt werden und Sie mehr Platz auf dem Chip für die Registerdatei benötigen, wodurch der Leistungsbedarf erhöht wird. Sie können sehen, wie sich unterschiedliche Registerzahlen auf die Codegröße und die Häufigkeit von Lade- / Speicherbefehlen auswirken, indem Sie den gleichen Code mit unterschiedlichen Registerzahlen kompilieren. Das Ergebnis dieser Art von Übung kann in Tabelle 1 dieses Papiers gesehen werden:

Erweiterbares Befehlssatz-Computing

%Vor%

(Sie haben 27 als Basis verwendet, da dies die Anzahl der auf einem MIPS-Prozessor verfügbaren GPRs ist)

Wie Sie sehen können, gibt es nur marginale Verbesserungen sowohl bei der Größe der Programme als auch bei der Anzahl der Lade- / Speichervorgänge, wenn Sie die Registeranzahl auf 16 absenken. Die echten Strafen treten erst ein, wenn Sie in 8 Register fallen . Ich vermute, ARM-Entwickler empfanden 16 Register als eine Art Sweet Spot, wenn man nach der besten Leistung pro Watt suchte.

    
Bradley McKinley 28.08.2012, 13:55
quelle
4

Um eines von 16 Registern zu wählen, benötigen Sie 4bit. Daher könnte es sein, dass dies die beste Übereinstimmung für Opcodes (Maschinenbefehle) ist. Andernfalls müssten Sie einen komplexeren Befehlssatz eingeben, was zu einem größeren Codierer führt, was zusätzliche bedeutet Kosten (Ausführungszeit).

Wikipedia sagt, es hat "feste Befehlsbreite von 32 Bit, um Decodierung und Pipelining zu erleichtern" Es ist also ein vernünftiger Kompromiss.

    
stacker 11.12.2011 20:00
quelle
3

ARM 32 Bit hat 16 Register, weil es nur 4 Bits für die Codierung des Registers verwendet, nicht weil 16 die ideale Zahl ist. Ebenso hat x86 nur 8 Register, weil sie in der Geschichte nur 3 Bits verwenden, um das Register zu kodieren, so dass einige Befehle in ein Byte passen.

Das ist so eine begrenzte Anzahl, also entweder x86 oder ARM, wenn man 64 bit auf 16 bzw. 32 Register verdoppelt. Die alte ARM-Befehlscodierung hat kein verbleibendes Bit mehr für die größere Registernummer übrig, so dass sie einen Kompromiss machen müssen, indem sie die Fähigkeit, fast jeden Befehl bedingt auszuführen, verwenden und die 4-Bit-Bedingung für die neuen Features verwenden.

    
Lưu Vĩnh Phúc 14.08.2013 08:31
quelle
2

In den 80er Jahren (IIRC) wurde eine wissenschaftliche Arbeit veröffentlicht, die verschiedene Arbeitslasten untersuchte und die erwarteten Leistungsvorteile verschiedener Registerzahlen verglichen. Dies war zu einer Zeit, als RISC-Prozessoren von akademischen Ideen zu Mainstream-Hardware übergingen, und es war wichtig zu entscheiden, was optimal war. Die CPUs waren bereits schneller als die Speicherkapazität, und RISC verschlimmerte dies, indem Adressierungsmodi eingeschränkt und separate Lade- und Speicherbefehle verwendet wurden. Mit mehr Registern konnten Sie mehr Daten für den sofortigen Zugriff "zwischenspeichern" und somit weniger auf den Hauptspeicher zugreifen.

Betrachtet man nur Zweierpotenzen, so wurde festgestellt, dass 32 Register optimal waren, obwohl 16 nicht sehr weit zurück war.

    
Timothy Miller 19.02.2012 03:21
quelle
0

ARM ist insofern einzigartig, als jedes der Register einen bedingten Ausführungscode haben kann, der Tests & amp; Geäst. Vergessen Sie nicht, dass viele 32 Registermaschinen R0 auf 0 setzen, so dass bedingte Tests durch Vergleich mit R0 durchgeführt werden. Ich weiß aus Erfahrung. Vor 20 Jahren musste ich einen "Mode 7" (von SNES Terminologie) Boden programmieren. Die CPUs waren SH2 für die 32x (oder eher 2 von ihnen), MIPS3000 (Playstation) und 3DO (ARM), die innere Schleife des Codes waren 19,15 & amp; 11. Wenn das 3DO mit der gleichen Geschwindigkeit wie die anderen 2 ausgeführt worden wäre, wäre es doppelt so schnell gewesen. Wie es war, war es nur ein bisschen langsamer.

    
Sean 02.09.2016 20:23
quelle