Was ist schneller, ein Programm aus ROM oder RAM ausführen?


8

Die meisten von uns mit elektronischem Hintergrund wissen, dass SRAM schneller als DRAM ist. Aber wenn es darum geht, RAM mit ROM zu vergleichen, bin ich mir nicht sicher.

Meine Frage bezieht sich auf den Mikrocontroller: "Wenn ein Code direkt aus dem RAM / ROM ausgeführt wird, wessen Leistung ist besser? 1) Ausführung aus dem RAM oder 2) Ausführung aus dem ROM oder 3) beide werden gleich ausgeführt."

Berücksichtigt man auch die Tatsache, dass ROM für höhere READ-Geschwindigkeiten ausgelegt ist. Während für RAM ein Kompromiss zwischen Lesegeschwindigkeit und Schreibfähigkeit besteht.


10
Lesen Sie das Datenblatt (gründlich) am besten. Manchmal ist es schneller, ein Programm aus dem RAM auszuführen als aus dem Flash-Speicher. Einige Mikros können überhaupt keine Programme aus dem RAM ausführen, andere können mit derselben Geschwindigkeit ausgeführt werden.
Spehro Pefhany

Ich kann noch keinen Kommentar hinzufügen, nur um hilfreich zu sein. Hängt davon ab, ob das ROM tatsächlich schneller ist als der von Ihnen verwendete RAM. Sind sie gleich schnell?
OzzieSpin

Viele aktuelle ARM Cortex-M-Teile sind erstklassige Beispiele für solche, die vom SRAM ausgeführt werden können , dabei jedoch langsamer sind , da der dedizierte Befehlspfad zum Flashen nicht verwendet werden kann. Umgekehrt kann der Datenzugriff auf Flash langsamer sein als auf RAM
Chris Stratton

Bei etwas älteren ARM7-Chips (meine Erfahrung war mit LPC2106 und LPC2148) ist die Auslastung aus dem RAM oft SCHNELLER als aus FLASH. Was zusammen mit Chris 'Antwort beweist, dass das einzige, was wir sagen können, "es kommt darauf an" ist.
Wouter van Ooijen

Wenn Sie bereits über die Hardware verfügen, können Sie die beiden Szenarien am einfachsten ausführen und vergleichen. Wenn nicht, sind Datenblätter die beste Wahl.
Luaan

Antworten:


16

Das Datenblatt sollte Ihnen mitteilen, wie lange jeder Befehl dauert und welche Unterschiede zwischen der Ausführung aus dem RAM oder ROM bestehen.

Für Mikrocontroller, die die Option zum Ausführen aus dem RAM bieten, ist dies wahrscheinlich schneller und wahrscheinlich der Hauptgrund für die Verwendung von zusätzlichem RAM-Speicherplatz zum Ausführen von Code. Möglicherweise gibt es auch Probleme beim Abrufen von Abrufen. In einigen Fällen kann die Ausführung über das ROM schneller sein, da es sich um einen separaten Speicher handelt und der RAM-Zugriff gleichzeitig erfolgen kann.

Die einzige Möglichkeit, ein bestimmtes Mikro zu ermitteln, besteht darin, das Datenblatt zu lesen .


Es ist noch schneller aus dem Register auszuführen.
Joshua

@Joshua Haben Sie Beispiele dafür, was Sie mit einem aus Registern ausgeführten Programm machen könnten? Es scheint unglaublich klug, aber auf eine eher kleine Programmgröße beschränkt. Ich habe von 64kB Grafik-Demos gehört, aber eine 16-Register-Demo? =)
Cort Ammon

3
@CortAmmon: Ich habe eines mit 512 Registern auf meinem Schreibtisch, von denen 400 Programmcode enthalten. Der RAM ist dreimal langsamer und der ROM ist so langsam, dass er beim Start in den RAM kopiert wird (was 100 Millisekunden dauert). Ich habe einen SD-Karteninitialisierer / -leser, der in 300 Register passt, ohne Hardwareunterstützung über die GPIO-Pins hinaus. Der Autor nimmt weitere 100 oder so Register, so dass das Ganze nicht in das Register passt (dies würde nicht ausreichen, um etwas Interessantes zu tun), aber ich brauche den Initialisierer nicht mehr, also überschreibe.
Joshua

9

Dies hängt vollständig von der Speicher- und CPU-Architektur ab. Als Faustregel gilt, dass SRAM schneller ist als Flash, insbesondere bei MCUs mit höherer Geschwindigkeit (> 100 MHz). SRAM-Bitzellen erzeugen eine (mehr oder weniger) logische Ausgabe, während der Flash-Speicher einen langsameren Stromerfassungsprozess durchlaufen muss.

Wie viel schneller (falls vorhanden) ist wiederum von der Architektur abhängig - der Wortgröße der Speicher, der Anzahl der Wartezustände, dem Vorhandensein von Caching, der Größe der CPU-Anweisungen usw. Wenn Sie mit a arbeiten Wenn die Frequenz niedrig genug ist, können auf Flash und RAM keine Wartezustände auftreten, sodass sie möglicherweise mit derselben Geschwindigkeit ausgeführt werden.

Der Code ist auch wichtig. Wenn Ihr Code streng linear ist (keine Verzweigung), kann der Flash-Befehl Anweisungen schnell genug vorab abrufen, um die CPU auch bei höheren Frequenzen gesättigt zu halten. Wie Olin sagte, könnte eine CPU mit Harvard-Architektur mit separaten Programm- und Datenlesepfaden unterschiedliche Leistungen erbringen, wenn sich Code und Daten in unterschiedlichen Speichern befinden.

Metall-ROMs (und andere nichtflüchtige Speicher wie FRAM) haben ihre eigenen Eigenschaften und können so schnell wie SRAM sein oder auch nicht. Die Fähigkeit zu schreiben macht nicht unbedingt einen Unterschied; Es geht mehr um die Eigenschaften der Ausgangs- und Erfassungsschaltungen der Bitzellen.

Das Datenblatt gibt Ihnen eine ungefähre Vorstellung vom Geschwindigkeitsunterschied. Die einzige Möglichkeit, dies sicher zu wissen, besteht darin, Ihren Code zu profilieren.


1

"Ausführen eines Programms" erfordert eine CPU mit einer synchronen Uhr. Langsamer Speicher kann aufgenommen werden, indem entweder das gesamte System mit einem ausreichend langsamen Takt ausgeführt wird oder indem eingefügt wird wait states(zusätzliche Taktzyklen zwischen der Abruf- und der Dekodierungsphase), die nur für bestimmte Adressbereiche aktiv sind (siehe z. B. den alten 8085). Der CPU-Befehlsabruf weiß oder kümmert sich nicht genau darum, wann die Daten auf ihren endgültigen Wert gebracht werden, solange sie sich während des Setup / Hold-Intervalls nicht ändern.

Ein Mikrocontroller verfügt normalerweise über den gesamten Speicher auf dem Chip. Wenn nicht anders angegeben, würde ich davon ausgehen, dass das Speichersystem vollständig im Wartezustand Null ist. (Lesen Sie jedoch das Datenblatt, um dies zu bestätigen). Typische Mikrocontroller sollen im Vergleich zu einem Desktop einfachere Single-Chip-Lösungen sein, sodass Wartezustände in einem Mikrocontroller unwahrscheinlich sind. Daher ist es unwahrscheinlich, dass ein Mikrocontroller die Speichergeschwindigkeiten auf dem Chip nicht übereinstimmt.

Schnellerer Speicher kostet im Allgemeinen eine Prämie (höhere Spannung, geringere Kapazität, mehr Nachfrage). Ein 80xx86 hat einen schnellen SRAM im L2-Cache und einen noch schnelleren SRAM im L1-Cache sowie viele langsamere DRAM-Off-Chips, die an einen Speichercontroller angeschlossen sind. Diese Art von System ist viel komplizierter als ein Mikrocontroller und geht über den Rahmen der Frage hinaus. (Aber von großem Interesse für einen Computeringenieur!)


1
Tatsächlich ist ein perfekt abgestimmtes Design nicht ohne Einschränkungen möglich. Ein Prozessor trennt entweder Befehls- und Datenspeicher, nutzt die Speichergeschwindigkeit in Nicht-Speicherdatenbefehlen nicht aus, leidet unter Wartezuständen oder verwendet Multi-Port-Speicher.
Chris Stratton

2
Wartezustände sind in leistungsstärkeren Mikrocontrollern ziemlich häufig. Der Blitz ist langsam.
Adam Haun

@AdamHaun: Auf der anderen Seite können viele interne Flash-Arrays viele Wörter gleichzeitig lesen. Wenn der Code in Flash an eine beliebige Stelle springt, kann es einige Zyklen dauern, bis der erste Befehl abgerufen wird. Sobald dieser Befehl abgerufen wurde, sind die nächsten Befehle möglicherweise ohne weitere Verzögerung verfügbar. In vielen Fällen bereitet der Zugriff auf etwas gegen Ende des Puffers das System darauf vor, den nächsten Satz von Wörtern zu laden.
Supercat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.