Quale è più veloce, l'esecuzione di un programma dalla ROM o dalla RAM?


8

La maggior parte di noi che proviene dal settore dell'elettronica sa che SRAM è più veloce di DRAM. Ma quando si tratta di confrontare la RAM con la ROM, non sono sicuro.

La mia domanda riguarda il microcontrollore: "Se un codice viene eseguito direttamente dalla RAM / ROM, le cui prestazioni saranno migliori ?? 1) esecuzione dalla RAM o 2) esecuzione dalla ROM o 3) entrambe funzioneranno allo stesso modo"

Considerando anche il fatto che le ROM sono progettate per avere velocità READ più elevate. mentre per la RAM, c'è un compromesso della velocità di lettura per avere capacità di scrittura.


10
Leggere la scheda tecnica (a fondo) è il modo migliore. A volte è più veloce eseguire un programma dalla RAM rispetto alla memoria flash. Alcuni micro non possono eseguire programmi dalla RAM e altri possono funzionare alla stessa velocità.
Spehro Pefhany,

Non posso ancora aggiungere un commento, sto solo cercando di essere utile. Dipende se la ROM è effettivamente più veloce della RAM che stai usando. Hanno le stesse velocità?
OzzieSpin

Molte attuali parti di ARM Cortex-M sono esempi primi di quelli che possono essere eseguiti da SRAM ma sono più lenti quando lo fanno perché non è possibile utilizzare il percorso di istruzioni dedicato al flash. Viceversa, l'accesso ai dati su Flash può essere più lento rispetto alla RAM
Chris Stratton,

Ma con chip ARM7 leggermente più vecchi (la mia esperienza è stata con LPC2106 e LPC2148) l'escissione dalla RAM è spesso PIÙ VELOCE che da FLASH. Il che, insieme alla risposta di Chris, dimostra che l'unica cosa che possiamo dire è "dipende".
Wouter van Ooijen,

Se hai già l'hardware, il modo più semplice è semplicemente eseguire i due scenari e confrontarli. In caso contrario, i fogli di dati sono la soluzione migliore.
Luaan,

Risposte:


16

Il foglio dati dovrebbe indicare quanto tempo impiega ciascuna istruzione e quali differenze ci sono, se presenti, tra l'esecuzione da RAM o ROM.

Per i microcontrollori che offrono la possibilità di eseguire dalla RAM, questo è probabilmente più veloce, probabilmente essendo il punto principale dell'utilizzo di spazio RAM aggiuntivo per eseguire il codice. Potrebbero esserci anche alcuni problemi di sovrapposizione di recupero. In alcuni casi potrebbe essere più veloce eseguirlo dalla ROM perché è una memoria separata e l'accesso alla RAM può avvenire contemporaneamente.

Ancora una volta, l'unico modo per conoscere un determinato micro è LEGGERE LA SCHEDA TECNICA .


È ancora più veloce eseguire dal registro.
Joshua,

@Joshua Hai qualche esempio di cosa potresti fare con un programma eseguito dai registri? Sembra maliziosamente intelligente, ma limitato a una dimensione del programma piuttosto piccola. Ho sentito parlare di demo grafiche da 64kB, ma una demo di 16 registri? =)
Cort Ammon il

3
@CortAmmon: ne ho uno seduto sulla mia scrivania con 512 registri, 400 dei quali contengono codice programma. La RAM è 3 volte più lenta e la ROM è così lenta che viene copiata nella RAM all'avvio (che richiede 100s di millisecondi). Ho un inizializzatore / lettore di schede SD che si adatta a 300 registri, senza supporto hardware oltre ai pin GPIO. Lo scrittore prende un altro centinaio di registri, quindi il tutto non si adatta al registro (questo non lascerebbe abbastanza per fare qualcosa di interessante) ma non ho più bisogno dell'inizializzatore, quindi sovrascrivi.
Joshua,

9

Dipende interamente dalla memoria e dall'architettura della CPU. Come regola generale, SRAM è più veloce del flash, in particolare su MCU ad alta velocità (> 100 MHz). Le celle bit SRAM producono un output a livello logico (più o meno), mentre la memoria flash deve passare attraverso un processo di rilevamento della corrente più lento.

Quanto più velocemente (se ce ne sono) dipende dall'architettura: la dimensione della parola delle memorie, il numero di stati di attesa su ciascuno, la presenza della cache, la dimensione delle istruzioni della CPU, ecc. Se si esegue un frequenza abbastanza bassa, potresti avere zero stati di attesa su flash e RAM, quindi potrebbero funzionare alla stessa velocità.

Anche il codice è importante. Se il tuo codice è rigorosamente lineare (nessuna ramificazione), il flash potrebbe precaricare le istruzioni abbastanza velocemente da mantenere la CPU satura anche a frequenze più alte. Come ha detto Olin, una CPU con architettura Harvard con percorsi di lettura dati e programma separati potrebbe funzionare diversamente quando codice e dati si trovano in memorie diverse.

Le ROM di metallo (e altre memorie non volatili come la FRAM) hanno le loro caratteristiche e possono essere o meno veloci quanto la SRAM. La capacità di scrivere non fa necessariamente la differenza; riguarda più le caratteristiche dell'uscita della cella di bit e i circuiti di rilevamento.

Il foglio dati ti darà un'idea approssimativa della differenza di velocità, ma l'unico modo per sapere con certezza è di profilare il tuo codice.


1

"Esecuzione di un programma" richiede una CPU con un clock sincrono. La memoria lenta può essere gestita eseguendo l'intero sistema con un clock abbastanza lento o inserendolowait states (cicli di clock extra-do-null tra le fasi di recupero e decodifica), attivi solo per determinati intervalli di indirizzi (vedere l'antico 8085 per esempio). Il recupero delle istruzioni della CPU non è a conoscenza o cura esattamente quando i dati vengono impostati sul valore finale, purché non cambi durante l'intervallo di impostazione / mantenimento.

Un microcontrollore di solito ha tutta la sua memoria su chip, quindi se non diversamente specificato suppongo che il sistema di memoria sia completamente zero-wait-state. (ma leggi la scheda tecnica per confermare). I microcontrollori tipici sono pensati per essere soluzioni più semplici a chip singolo rispetto a un desktop, quindi gli stati di attesa sono improbabili in un microcontrollore. Quindi è improbabile che un microcontrollore abbia velocità di memoria su chip non corrispondenti.

La memoria più veloce costa generalmente un premio (tensione più alta, capacità più bassa, più richiesta). Un 80xx86 ha SRAM veloce nella cache L2 e SRAM ancora più veloce nella cache L1 e un sacco di DRAM più lento off-chip collegato a un controller di memoria. Questo tipo di sistema è molto più complicato di un microcontrollore e va oltre lo scopo della domanda. (Ma di grande interesse per un ingegnere informatico!)


1
In realtà un design perfettamente abbinato non è possibile senza vincoli. Un processore separa le istruzioni e la memoria dei dati, sottoutilizza la velocità della memoria nelle istruzioni non di dati di memoria, subisce gli stati di attesa o utilizza la memoria multiporta.
Chris Stratton,

2
Gli stati di attesa sono piuttosto comuni nei microcontrollori ad alte prestazioni. Il flash è lento.
Adam Haun,

@AdamHaun: D'altra parte, molti array di flash interni possono leggere più parole contemporaneamente; se il codice passa a una posizione arbitraria in flash, potrebbero essere necessari un paio di cicli per recuperare la prima istruzione, ma una volta recuperate le successive istruzioni potrebbero essere disponibili senza ulteriore ritardo. In molti casi, l'accesso a qualcosa vicino alla fine del buffer preparerà il sistema a caricare il prossimo set di parole.
supercat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.