¿Qué es más rápido, ejecutar un programa desde ROM o RAM?

8

La mayoría de nosotros que somos expertos en electrónica sabemos que SRAM es más rápido que DRAM. Pero cuando se trata de comparar RAM con ROM, no estoy seguro.

Mi pregunta está relacionada con el microcontrolador: "Si un código se ejecuta directamente desde RAM / ROM, ¿cuál será el mejor rendimiento? 1) ejecución desde RAM o 2) ejecución desde ROM o 3) ambos rendirán igual"

También teniendo en cuenta el hecho de que las ROM están diseñadas para tener velocidades de lectura más altas. mientras que para RAM, hay una compensación de velocidad de lectura por tener capacidades de escritura.

Príncipe Rambade
fuente
10
Leer la hoja de datos (a fondo) es la mejor manera. A veces es más rápido ejecutar un programa desde la RAM que la memoria flash. Algunos micros no pueden ejecutar programas desde la RAM y otros pueden ejecutarse a la misma velocidad.
Spehro Pefhany
Todavía no puedo agregar un comentario, solo trato de ser útil. Depende de si la ROM es más rápida que la RAM que está utilizando. ¿Son de igual velocidad?
OzzieSpin
Muchas partes actuales de ARM Cortex-M son ejemplos principales de aquellas que pueden ejecutarse desde SRAM pero son más lentas cuando lo hacen, ya que no se puede usar la ruta de instrucción dedicada al flash. Por el contrario el acceso a datos de flash puede ser más lenta que la memoria RAM
Chris Stratton
Pero con chips ARM7 ligeramente más antiguos (mi experiencia fue con LPC2106 y LPC2148), la excitación de RAM es a menudo MÁS RÁPIDA que de FLASH. Lo cual, junto con la respuesta de Chris, prueba que lo único que podemos decir es "depende".
Wouter van Ooijen
Si ya tiene el hardware, la forma más fácil es simplemente ejecutar los dos escenarios y comparar. Si no, las hojas de datos son su mejor apuesta.
Luaan

Respuestas:

16

La hoja de datos debería decirle cuánto tiempo lleva cada instrucción y qué diferencias hay, si las hay, entre la ejecución desde RAM o ROM.

Para el microcontrolador que ofrece la opción de ejecutar desde RAM, probablemente sea más rápido, probablemente sea el punto principal de usar espacio RAM adicional para ejecutar el código. También puede haber algunos problemas de superposición de búsqueda. En algunos casos, puede ser más rápido ejecutarlo desde la ROM porque es una memoria separada y el acceso a la RAM puede realizarse simultáneamente.

Nuevamente, la única forma de saber para cualquier micro en particular es LEER LA HOJA DE DATOS .

Olin Lathrop
fuente
Es aún más rápido ejecutar desde el registro.
Joshua
@Joshua ¿Tiene algún ejemplo de lo que podría hacer con un programa ejecutado desde registros? Parece perversamente inteligente, pero limitado a un tamaño de programa bastante pequeño. He oído hablar de demostraciones gráficas de 64kB, pero ¿una demostración de 16 registros? =)
Cort Ammon
3
@CortAmmon: Tengo uno sentado en mi escritorio con 512 registros, 400 de los cuales contienen código de programa. La RAM es 3 veces más lenta, y la ROM es tan lenta que se copia en la RAM al inicio (que toma cientos de milisegundos). Tengo un lector / inicializador de tarjeta SD que cabe en 300 registros, sin soporte de hardware más allá de los pines GPIO. El escritor toma otros 100 registros más o menos para que todo no encaje en el registro, (esto no dejaría lo suficiente para hacer nada interesante) pero ya no necesito el inicializador, así que sobrescribe.
Joshua
9

Depende completamente de la arquitectura de la memoria y la CPU. Como regla general, SRAM es más rápido que flash, particularmente en MCU de mayor velocidad (> 100 MHz). Las celdas de bits SRAM producen una salida de nivel lógico (más o menos), mientras que la memoria flash debe pasar por un proceso de detección de corriente más lento.

Cuánto más rápido (si lo hay) nuevamente depende de la arquitectura: el tamaño de la palabra de las memorias, el número de estados de espera en cada uno, la presencia de almacenamiento en caché, el tamaño de las instrucciones de la CPU, etc. con una frecuencia lo suficientemente baja, podría tener cero estados de espera en flash y RAM, por lo que podrían funcionar a la misma velocidad.

El código también importa. Si su código es estrictamente lineal (sin ramificación), el flash podría captar instrucciones lo suficientemente rápido como para mantener la CPU saturada incluso a frecuencias más altas. Como dijo Olin, una CPU de arquitectura Harvard con un programa separado y rutas de lectura de datos podría funcionar de manera diferente cuando el código y los datos están en diferentes memorias.

Las ROM de metal (y otras memorias no volátiles como FRAM) tienen sus propias características y pueden o no ser tan rápidas como SRAM. La capacidad de escribir no necesariamente hace la diferencia; se trata más de las características de la salida de celda de bits y los circuitos de detección.

La hoja de datos le dará una idea aproximada de la diferencia de velocidad, pero la única forma de saberlo con certeza es perfilando su código.

Adam Haun
fuente
1

"Ejecutar un programa" requiere una CPU con un reloj síncrono. La memoria lenta se puede acomodar ejecutando todo el sistema a un reloj lo suficientemente lento o insertando wait states(ciclos de reloj adicionales de no hacer nada entre las fases de recuperación y decodificación), activa solo para ciertos rangos de direcciones (ver el antiguo 8085 por ejemplo). La búsqueda de instrucciones de la CPU no sabe ni le importa exactamente cuándo los datos se liquidan en su valor final, siempre que no cambien durante el intervalo de configuración / retención.

Un microcontrolador generalmente tiene toda su memoria en el chip, por lo que, a menos que se indique lo contrario, asumiría que el sistema de memoria está en estado de espera cero. (pero lea la hoja de datos para confirmar). Los microcontroladores típicos están destinados a ser soluciones de chip único más simples en comparación con una computadora de escritorio, por lo que los estados de espera son poco probables en un microcontrolador. Por lo tanto, es poco probable que un microcontrolador tenga velocidades de memoria en el chip que no coinciden.

La memoria más rápida generalmente cuesta una prima (mayor voltaje, menor capacitancia, más demanda). Un 80xx86 tiene una SRAM rápida en caché L2 y una SRAM aún más rápida en caché L1, y un montón de DRAM fuera de chip más lento conectado a un controlador de memoria. Este tipo de sistema es mucho más complicado que un microcontrolador y está fuera del alcance de la pregunta. (¡Pero de gran interés para un ingeniero informático!)

MarkU
fuente
1
En realidad, un diseño perfectamente adaptado no es posible sin restricciones. Un procesador segrega las instrucciones y la memoria de datos, subutiliza la velocidad de la memoria en las instrucciones sin datos de memoria, sufre estados de espera o usa memoria de múltiples puertos.
Chris Stratton
2
Los estados de espera son bastante comunes en los microcontroladores de alto rendimiento. El flash es lento.
Adam Haun
@AdamHaun: Por otro lado, muchas matrices flash internas pueden leer muchas palabras a la vez; Si el código salta a una ubicación arbitraria en flash, puede tomar un par de ciclos recuperar la primera instrucción, pero una vez que se obtiene, las siguientes instrucciones pueden estar disponibles sin más demora. En muchos casos, acceder a algo cerca del final del búfer preparará el sistema para cargar el siguiente conjunto de palabras.
supercat