ARM8/ARMv4-Eigenschaften für einen qualitativen Vergleich zwischen RISC-, CISC- und MISC-Prozessordesigns

Frage:

Ich frage mich, ob jemand ungefähr weiß, welche Art von Stromverbrauch man von einem ARM-Prozessor mit der ARM8-Architektur (ARMv4-Befehlssatz) erwarten kann. (bearbeitet)

Hinweis: Ich suche keine technischen Daten, sondern einen ungefähren Stromverbrauch unter "typischen" Umständen (typisch wird offen gelassen).

Für die Größe des ARM8 / ARMv4-Befehlssatzes habe ich keine Quelle gefunden, die sie einfach alle für den ARM8 auflistet (abgesehen vom Datenblatt - das manuelles Zählen erfordern würde!). Überraschenderweise konnte ich kein Marketingmaterial oder keine technische Zusammenfassung finden, die die Größe der Anweisung auflistet, im Gegensatz zu Intel, wo leicht zu erkennen war, dass 80486 etwa 190 Anweisungen enthält.

Bearbeiten: Wenn ich den ARMv4-Befehlssatz lose zähle, erhalte ich ungefähr zwischen 75 und 100 Anweisungen, je nachdem, ob eine geringfügige Abweichungen enthält oder nicht.

Kontext: (bearbeitet)

Ich hoffe, die Informationen verwenden zu können, um einen groben, aber qualitativ korrekten Vergleich zwischen ähnlichen Chips mit ähnlichen Fähigkeiten, aber unterschiedlichen Designs, dh RISC, CISC oder MISC (minimaler Befehlssatz), anzustellen.

Für CISC habe ich den Intel 80486 mit etwa 50 MIPS, 190 Anweisungen, aber mit satten 1,2 Millionen Transistoren und einem Stromverbrauch von ~ 3 W.

Für RISC habe ich den ARM8 mit 84 MIPS, 75-100 Anweisungen, mit weniger als 50.000 Transistoren und einem Stromverbrauch von ?? W.

Aber am interessantesten ist meiner Meinung nach MISC, insbesondere Chuck Moores MuP21 Forth-in-Hardware-Chip, der mit einer Leistung von etwa 80 MIPS aufgeführt ist, nur 25 Befehle, nur 7k Transistoren und 50 mW Stromverbrauch hat.

Das Ausfüllen der ARM-Chip-Informationen wird hoffentlich Faktor-/Größenordnungsvergleiche zwischen den drei Designs unterstützen.

Denken Sie daran, dass ARM8 eine Architektur ist , während die anderen beiden, die Sie aufgelistet haben, tatsächliche Produkte sind. Es kann viele Implementierungen von ARM8 geben (obwohl Wikipedia nur eine auflistet).
Die Cortex M-Serie scheint für einen Vergleich auf diesem Leistungsniveau angemessener zu sein. (M0+ scheint sehr klein zu sein.) Renesas RX ist ein moderner (Low-Cruft) CISC ISA, könnte aber eine sehr Low-End-Implementierung haben. Man möchte auch mit der gleichen Fertigungstechnologie vergleichen. Leistung und Energieeffizienz hängen von der Arbeitsbelastung ab, und es können Kompromisse zwischen Fläche, Leistung und Leistung eingegangen werden.
Und warum sind Sie besorgt über die Anzahl der Anweisungen? (Es kann schwierig sein, Anweisungen zu zählen. Ist die Variante von ADD in ARM, die den Bedingungscode setzt, beispielsweise eine andere Anweisung?)
@PaulA.Clayton: Einverstanden, dass die Anweisungsgröße das am wenigsten wichtige der Attribute ist. Ich habe es mit der Idee aufgenommen, dass es einen groben Hinweis auf die Komplexität der Anweisungen gibt, die die Chipdesigner in das Silizium einbetten müssen. Wenn ich den ARMV4-Befehlssatz lose zähle, bekomme ich zwischen 75-100 Befehle. Das ist immer noch fast 3x mehr als die Zahl im MuP21 und etwa die Hälfte der Zahl im 486 – was qualitativ ungefähr richtig erscheint.
@PaulA.Clayton: Sie haben Recht mit der Sorgfalt, die man aufbringen müsste, um einen akademischen Fall zu machen. Was mich hier interessiert, sind qualitativ korrekte Vergleiche und Zahlen, die ungefähr die Größe (Faktoren / Größenordnung) des Unterschieds zwischen den drei Arten von Designs angeben. Zwischen Cortex M und Renesas Rx – was wäre Ihrer Meinung nach ein besserer Vergleich mit einem 486 Intel-Chip?
@AKE: RX ist ein CISC, hat aber viel weniger Cruft als ein 486 und wäre daher ein besserer Kandidat für einen modernen CISC (dh ein fairer Vergleich). Leider ist die Prozesstech. (und Kerngröße) für RX210 scheinen keine öffentlichen Informationen zu sein, aber Renesas veröffentlicht seine Ampere/DMIPS-Bewertung. ARM veröffentlicht W/MHz und DMIPS/MHz für verschiedene Prozesstechnologien. Implementierungen verschiedener Designs, also wenn man die Prozesstechnik kannte. von RX210 könnte man einen Vergleich machen. Sowohl CISC als auch RISC gehen Kompromisse ein, um eine besser skalierbare Leistung zu erzielen. relativ zu einem Stack-ISA, daher ist ein fairer Vergleich schwierig.

Antworten (1)

Sie werden nicht abschließend in der Lage sein, ein Ergebnis zu erzielen, das ist nicht möglich. Benchmarking ist immer subjektiv und kann und wird häufig verwendet, um das gewünschte Ergebnis zu erzielen (A ist besser, B ist besser, C ist besser usw.).

Die Anzahl der Befehle ist nicht relevant, nicht mehr als die Anzahl der Register usw. Die Anzahl der Transistoren ist interessant, aber der Vergleich eines einzelnen Soc-Chips mit einem Prozessor, der externe Chips benötigt, um dieselbe Funktionalität bereitzustellen. Oder ein Chip kann relativ zu einem anderen große Teile gleichzeitig abgeschaltet haben oder einen großen Teil abgeschaltet haben, um den Benchmark abzuschließen, oder einer hat mehr Transistoren, schaltet sie aber seltener um als der andere, der weniger hat. was möglicherweise zu einem unterschiedlichen Stromverbrauch führt.

Intel stellt und verkauft Chips, die zufällig (viele) ihres Materials enthalten. Arm stellt keine Chips her, sie verkaufen IP. Wie schnell dieses Programm in Quellcodeform ausgeführt wird, hängt stark von den Compileroptionen, dem Prozessor usw. ab. Dieselbe IP kann je nach Gießerei und Zellbibliothek und Prozess, der zu ihrer Implementierung verwendet wird, sehr unterschiedliche Mengen an Strom verbrauchen. Gleiche Architektur, gleiche Taktrate, unterschiedlicher Stromverbrauch. Sie vergleichen also gleich auf eine andere Weise Äpfel mit Birnen. Ich kann mir keinen echten Fall vorstellen, in dem ein Armkern alles ist, was sich im Chip befindet. Im Allgemeinen wickeln Sie den Arm mit einer Menge Zeug in den Chip ein, Zeug, das mit dem anderen Prozessor vom Chip entfernt wäre. Der richtige Vergleich wäre das gesamte System, nicht nur die Leistung des Prozessors.

Dies führt Sie zu Taktunterschieden, ein Prozessor kann viel effizienter sein als ein anderer und kann den gleichen Benchmark mit einer anderen Taktrate durchführen oder auf andere Weise weniger Hardware oder Strom oder was auch immer verbrauchen. Es ist sehr einfach, einen Benchmark zu schreiben, der auf einem kleinen batteriebetriebenen Mikrocontroller-Board läuft, das weniger Strom verbraucht als ein x86-Computer, selbst wenn der x86 stark untertaktet ist oder sein könnte. Genauso einfach ist es, einen Benchmark zu schreiben, der auf einem x86 blitzschnell läuft und für dessen Fertigstellung dieser Mikrocontroller eine Ewigkeit braucht. Auch wenn Sie sie gleich getaktet haben oder könnten.

Nur Compiler allein sorgen dafür, dass auf demselben Computer derselbe Quellcode und sehr unterschiedliche Geschwindigkeiten ausgeführt werden. Es ist einfach nicht möglich, zwei Systeme auf diese Weise zu vergleichen, außer dass der Benchmark genau angegeben wird. Dieser spezielle Code, der mit diesem Compiler auf Geschwindigkeit kompiliert wurde, der von Hand überprüft wurde, um diese Qualität von optimiertem Code zu erzeugen, lief auf diesem speziellen System, wobei das System so viel Strom verbrauchte. Dieses andere System, das diesen Compiler verwendet, der von Hand geprüft wurde, um eine ähnliche Optimierung bereitzustellen, erforderte diese Taktrate und so viel Leistung, um in etwa der gleichen Zeit ausgeführt zu werden. Wiederholen Sie dies für jede der unendlich vielen möglichen Benchmark-Anwendungen, an denen Benutzer interessiert sein könnten.

Der Mips/MHz-Vergleich hängt stark vom Compiler und der Anwendung ab, große Variationen von Mips auf demselben System ohne Hardwareänderungen. Auf keinen Fall können Sie mit dieser Methode zwei Prozessoren wirklich vergleichen. Veröffentlichte Mips in MHz sind nur Marketing-Flausch, ignorieren Sie es. Ebenso können Sie genauso viel Vertrauen in den veröffentlichten Stromverbrauch setzen wie in die Mips/MHz-Zahlen, er basiert auf einem Benchmark, wenn Ihre Anwendung nicht derselbe Benchmark ist, was nützt es?

Sie müssen eine Reihe von Systemen bauen (jedes Board-Design für den Benchmark spezifisch auslegen) und versuchen, die Anzahl der Variablen zu reduzieren, oder idealerweise den Ansatz wählen, das absolute Minimumsystem, maximale Optimierung, in der Lage zu machen, den Benchmark auszuführen genau X Zeit. Wiederholen Sie dies für das andere System und vergleichen Sie dann den Stromverbrauch des gesamten Systems für die Dauer der Ausführung dieses Benchmarks. Wiederholen Sie dies für die Millionen verschiedener Benchmarks, um einen fairen und allgemeinen Vergleich zu erhalten, ist es möglicherweise nicht möglich, die Ergebnisse auf schlüssige Weise zu reduzieren.

Für einen Architekturunterschied möchten Sie idealerweise, dass die Prozessoren in derselben Gießerei mit derselben Zellbibliothek und demselben Prozess usw. gebaut werden. Wenn Sie bereit und in der Lage sind, konkurrierende Kerne zu lizenzieren, bestücken Sie die Chips auf derselben Ebene und verwenden Sie ähnliche Busraten und so viel ähnliche externe Hardware (die Systembusse sind zweifellos unterschiedlich, einen gemeinsamen Bus daraus zu machen, könnte einem einen unfairen Vorteil verschaffen). Gleiche Anzahl an Caches mit gleichen Vorteilen usw. Vielleicht hast du bessere Chancen auf einen echt aussehenden Vergleich. Dies wäre die einzige Möglichkeit, etwas Plausibles zu finden, derselbe Benchmark-Lauf auf verschiedenen Architekturen, die in derselben Gießerei, derselben Zellbibliothek, demselben Prozess, derselben Cache-Größe, demselben DRAM usw. ausgeführt wurden. Sie können die Benchmarks immer noch manipulieren, um einen von beiden zu erstellen der schnellste oder niedrigste Stromverbraucher.

Interessanter wäre ein empirischer Vergleich. Nehmen oder erstellen Sie Benchmarks einzeln, sehen Sie sich die verschiedenen Möglichkeiten an, Code vom Compiler zu generieren. Untersuchen Sie die Busse, die Sie untersuchen können, und bekommen Sie ein Gefühl für die Fetch-Größen. Wenn möglich, können Sie mit den Anweisungen mit fester oder variabler Wortlänge an den Bussen erkennen, wo die Entscheidungen mit variabler Länge getroffen werden. Das erste Byte sagt, dass Sie möglicherweise das zweite Byte untersuchen müssen, das zweite Byte lässt Sie möglicherweise erkennen, dass Sie sofort 4 weitere Bytes benötigen , jetzt können Sie ausführen. Wie viel muss in der Nähe des Decoders eingeklemmt werden, um dies effizient zu machen? Wie viel muss man bei einem Ast wegwerfen und holen, wie schnell geht das? Sie müssen sich die Menge des Codes ansehen, um ähnliche Aufgaben auszuführen, aufgrund der unterschiedlichen Anzahl von Registern (real oder virtuell) (x86 ist mikrocodiert oder viele sind es, arm ist nicht mikrokodiert), wie oft muss der Code Register auf dem Stack austauschen (sehr einfach zu schreibende Benchmarks, die dafür eine Architektur relativ zu einer anderen bestrafen). x86 kann mehr Programme in einem Cache gleicher Größe speichern als ein Arm, aber der Arm ist beim Decodieren dieses Codes deterministischer. x86 führt zu mehr Ausrichtungsstrafen als Arm, da es sich anbietet, nicht ausgerichtet zu werden, wenn Arm entweder gefördert oder erzwungen wird. Können Sie Benchmarks erstellen, die einen Vorteil für jeden Befehlssatz zeigen, sollte es sehr einfach sein, eine Schleife zu erstellen, die x86-Anweisungen in einen Cache einer bestimmten Größe passt, aber keine Arm-Anweisungen in den Cache derselben Größe passt. Es könnte einfach sein, einen stark verzweigten Benchmark zu haben, der Waffenvorteile zeigt oder zumindest einen Verzweigungsprädiktor gegenüber einem anderen hervorhebt. Uhren und Strom sind immer noch aus dem Bild,

Wie auch immer, das war eine Tangente, Sie können nicht zwei Prozessoren auf diese Weise vergleichen und die Eingeweihten die Ergebnisse als etwas Bedeutsames akzeptieren lassen. Die Massen mögen sich täuschen lassen, aber nicht diejenigen, die wissen, was vor sich geht. Empirisch Vor- und Nachteile aufzeigen, das wäre vielleicht machbarer und für alle interessanter. Der Vergleich von Opencores im selben FPGA könnte auch interessant sein, aber ein kommerzieller Prozessorchip auf einem kommerziellen Board im Vergleich zu IP, das auf vielen verschiedenen Boards auf viele verschiedene Arten implementiert werden kann, ist einfach nicht plausibel.

Hallo zusammen - danke für diese ausführliche Antwort. Daher stimme ich vielen Ihrer Punkte zu. Und Ihre Empfehlungen erscheinen sehr vernünftig, wenn man an einer endgültigen Studie interessiert ist , vielleicht an einer Dissertation oder einem umfassenden technischen Bericht. Es muss jedoch doch eine Möglichkeit geben, Spezifikationen zu verwenden, um relative Leistungsunterschiede zwischen verschiedenen Architekturen/Designs zu verstehen? Was nützen sonst Spezifikationen überhaupt?
Bis zu einem gewissen Grad sind die Spezifikationen korrekt, zu einem anderen Grad sind die Spezifikationen Werbung, die versucht, Ihnen ein Produkt mit blinkenden Lichtern und tanzenden Mädchen zu verkaufen. Die Spezifikationen für Chips, die Armkerne verwenden, sind leicht verfügbar, das Problem ist, dass Sie sie nicht mit Äpfeln mit beispielsweise einem 486-Chip vergleichen können. du musst dir das System anschauen. Die Architektur ist jedoch ein Design und Quellcode, es ist keine Implementierung, daher hat und kann es keine Leistungsnummer haben, bis es implementiert ist. Wie beim Kompilieren eines Programms kann jede Implementierung derselben Quelle ziemlich unterschiedlich sein.
Fair genug. Haben Sie irgendwelche Ansichten über die MISC-Chips, auf denen ein Stack-Modell ausgeführt wird - daher einfacher als die beiden anderen. Das ist der Hauptgrund für den Vergleich, da die MISC-Chips per Spezifikation in der Lage sind, mit viel einfacherem Silizium eine vergleichbare Leistung bei wesentlich geringerem Stromverbrauch zu liefern.
Ich bin mit diesem Chip / dieser Architektur überhaupt nicht vertraut. normalerweise einfacheres Silizium, insbesondere Stack-basiert, bedeutet viel mehr Speicherzyklen, was im Allgemeinen langsamer ist. Ich müsste es wirklich in Aktion sehen. Gibt es eine Verilog-Quelle, die in einer Simulation verwendet werden kann? (verilator oder icarus?)
Ich verstehe, was du mit Sonstiges meinst. Aus Wikipedia: Der Nachteil besteht darin, dass Anweisungen tendenziell mehr sequentielle Abhängigkeiten aufweisen, wodurch die Parallelität auf Anweisungsebene verringert wird.
Meine Vermutung ist, dass Sie eine um ein Vielfaches schnellere Taktrate als risc oder cisc plus teures Caching benötigen würden, das über dem liegt, was cisc und risc benötigen. dies kann sich insgesamt auf die Leistung auswirken, die erforderlich ist, um dieselbe Aufgabe auszuführen, oder auch nicht. hängt stark davon ab, wie minimal minimal ist.
Genau das ist die Überraschung: Mit einer konstanten Taktrate von etwa 80 MIPS verbraucht MISC wesentlich weniger Strom (50 mW) als CISC (3 W) und ist um Größenordnungen einfacher in der Anzahl der im Silizium verwendeten Transistoren. Ungeachtet Ihrer früheren Kommentare zu Benchmarking-Vergleichen scheint MISC also grob gesagt ein ziemlich bemerkenswertes Chipdesign zu sein. Schauen Sie sich diese Analyse von Chuck Moore MuP21 High Performance MISC Processor an
Beachten Sie, dass diese Seite / dieses Papier vor langer, langer Zeit geschrieben wurde und sich RISC seitdem stark verbessert hat, sodass diese Behauptungen nicht mehr so ​​​​wahr sind. Das Hauptproblem bei misc ist das Fehlen einer Pipeline. Seine Leistung wird schrecklich sein, sowohl aufgrund des Mangels an Pipelining, der Anzahl der Schritte, die erforderlich sind, um dieselbe Aufgabe auszuführen, als auch der starken Nutzung des externen Speichers. Kosten und Leistung ergeben sich also aus den höheren Taktraten, die erforderlich sind, um eine ähnliche Gesamtausführungsleistung einer Aufgabe zu erzielen.
Wir hätten die Java-Hardware inzwischen gesehen, wenn dies ein wirklich gangbarer Weg wäre. Nicht, dass es keine Hardware gibt, aber es wird sicherlich nicht allgemein diskutiert, wenn es um cisc vs. risc geht