9 votos

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

La mayoría de los que tenemos formación en electrónica sabemos que la SRAM es más rápida que la DRAM. Pero cuando se trata de comparar la RAM con la ROM, no estoy seguro.

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

También hay que tener en cuenta que las ROM están diseñadas para tener una mayor velocidad de LECTURA, mientras que en el caso de las RAM, hay un intercambio de velocidad de lectura por tener capacidad de escritura.

10 votos

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 desde la memoria flash. Algunos micros no pueden ejecutar programas desde la RAM en absoluto y otros pueden funcionar a la misma velocidad.

0 votos

Todavía no puedo añadir un comentario, sólo intento ser útil. Depende de si la ROM es más rápida que la RAM que estás usando. ¿Son de igual velocidad?

0 votos

Muchas de las piezas actuales de ARM Cortex-M son ejemplos de las que puede ejecutan desde la SRAM pero son más lento al hacerlo, ya que no se puede utilizar la ruta de instrucción dedicada a la flash. Por el contrario, el acceso a los datos en la memoria flash puede ser más lento que en la RAM.

17voto

RelaXNow Puntos 1164

La hoja de datos debería indicarle el tiempo que tarda cada instrucción, y qué diferencias hay, si las hay, entre la ejecución desde la RAM o la ROM.

Para los microcontroladores que ofrecen la opción de ejecutar desde la RAM, es decir probablemente más rápido, siendo probablemente el punto principal del uso del espacio RAM adicional para ejecutar el código. También puede haber algunos problemas de solapamiento de fetch. En algunos casos puede ser más rápido ejecutar desde la ROM porque es una memoria separada y el acceso a la RAM puede ser simultáneo.

De nuevo, la única forma de saberlo para cualquier micro en particular es LEER LA HOJA DE DATOS .

0 votos

Es aún más rápido ejecutar desde el registro.

0 votos

@Joshua ¿Tienes algún ejemplo de lo que podrías hacer con un programa ejecutado desde registros? Parece endiabladamente inteligente, pero limitado a un tamaño de programa bastante pequeño. He oído hablar de demos gráficas de 64kB, pero ¿una demo de 16 registros? =)

3 votos

@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 arrancar (lo que tarda 100s de milisegundos). Tengo un inicializador/lector de tarjetas 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 así que todo no cabe en un registro, (esto dejaría no suficiente para hacer algo interesante) pero ya no necesito el inicializador, así que sobreescribe.

9voto

Al pacino Puntos 415

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

La rapidez (si la hay) depende de nuevo de la arquitectura: el tamaño de palabra de las memorias, el número de estados de espera en cada una, la presencia de caché, el tamaño de las instrucciones de la CPU, etc. Si se ejecuta a una frecuencia lo suficientemente baja, podría tener cero estados de espera en la flash y la RAM, por lo que podrían funcionar a la misma velocidad.

El código también es importante. Si el código es estrictamente lineal (sin bifurcaciones), la memoria flash podría precargar las 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 rutas de lectura de programa y datos separadas podría tener un rendimiento diferente cuando el código y los datos están en memorias diferentes.

Las ROM metálicas (y otras memorias no volátiles como la FRAM) tienen sus propias características, y pueden ser o no tan rápidas como la SRAM. La capacidad de escritura no supone necesariamente una diferencia; se trata más bien de las características de la salida de la célula de bits y de los circuitos de detección.

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

1voto

MarkU Puntos 3743

"Para ejecutar un programa se necesita una CPU con un reloj síncrono. La memoria lenta se puede acomodar ya sea ejecutando todo el sistema a un reloj lo suficientemente lento, o insertando wait states (ciclos de reloj extra entre las fases de búsqueda y decodificación), activo sólo para ciertos rangos de direcciones (ver el antiguo 8085 por ejemplo). La búsqueda de instrucciones de la CPU no sabe o no le importa exactamente cuando los datos se asientan en su valor final, siempre y cuando no cambien durante el intervalo de preparación/retención.

Un microcontrolador suele tener toda su memoria en el chip, por lo que, a menos que se indique lo contrario, yo asumiría que el sistema de memoria es de estado de espera cero. (pero lee la hoja de datos para confirmarlo). Los microcontroladores típicos están pensados para ser soluciones más simples, de un solo chip, en comparación con un ordenador de sobremesa, por lo que los estados de espera son poco probables en un microcontrolador. Así que es poco probable que un microcontrolador tendrían velocidades de memoria en el chip desajustadas.

Las memorias más rápidas suelen tener un coste superior (mayor voltaje, menor capacitancia, mayor demanda). Un 80xx86 tiene una SRAM rápida en la caché L2 y una SRAM aún más rápida en la caché L1, y mucha DRAM más lenta fuera del chip conectada 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!)

1 votos

En realidad, un diseño perfectamente ajustado no es posible sin limitaciones. Un procesador segrega la memoria de instrucciones y la de datos, infrautiliza la velocidad de la memoria en las instrucciones que no son de memoria, sufre estados de espera o utiliza una memoria multipuerto.

2 votos

Los estados de espera son bastante comunes en los microcontroladores de mayor rendimiento. La flash es lenta.

0 votos

@AdamHaun: Por otro lado, muchas matrices flash internas pueden leer muchas palabras a la vez; si el código salta a alguna ubicación arbitraria en la flash, puede tardar un par de ciclos en obtener la primera instrucción, pero una vez obtenida, las siguientes instrucciones pueden estar disponibles sin más demora. En muchos casos, acceder a algo cerca del final del buffer preparará al sistema para cargar el siguiente conjunto de palabras.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X