¿La memoria caché es innecesaria en los microcontroladores?

¿Usamos memoria caché en microcontroladores, si no, por qué no? En caso afirmativo, ¿cuál es su aplicación en sistemas integrados o es suficiente solo con tener RAM?

El Freescale (NXP) Vybrid con el que estoy trabajando actualmente tiene caché (L1 + L2 opcional).
Es innecesario en todos los procesadores (aparte de las limitaciones de tiempo). Es una optimización de velocidad más que un equipo esencial.
No creo que nadie construya PC (o teléfonos inteligentes) en estos días sin algún tipo de caché a bordo. ¿No lo hace necesario hasta cierto punto? ¿No es diferente a usar RAM para limitar los accesos al disco duro y, por lo tanto, aumentar la velocidad de ejecución de los programas?
Estoy de acuerdo con @BrianDrummond. El caché solo ofrece un beneficio cuando el microcontrolador se ejecuta más rápido que la memoria. Si la memoria puede seguir el ritmo, entonces el caché aumenta la complejidad sin ningún valor. Ha habido una brecha de rendimiento cada vez mayor entre la memoria y la CPU durante muchos años en el "extremo superior" de los sistemas. Sin embargo, eso no significa que la mayoría de las MCU estén siquiera cerca del "extremo superior" de los sistemas. ¿ Podría explicar exactamente qué quiere decir con microcontrolador y caché ? ¿Está leyendo más de una instrucción en una sola lectura, porque la memoria flash es mucho más amplia que una instrucción, un caché o un búfer?
NXP Vybrid VF5xxR viene con dos núcleos: 400MHz Cortex-A5 y 167Mhz Cortex-M4. Es algo diferente de los microcontroladores comunes :)

Respuestas (3)

La memoria caché agrega un nivel de latencia impredecible que puede no ser deseado. Muchos (¿la mayoría?) de los microcontroladores se utilizan en una configuración en tiempo real en la que debe presupuestar para el peor de los casos. No importa si su código es rápido en promedio , si existe la posibilidad de que no cumpla con la fecha límite en el peor de los casos . En el peor de los casos, el código o los datos no están en la memoria caché y, dado que tiene que presupuestarlos de todos modos, la memoria caché solo agrega costos y complejidad adicionales.

Algunos microcontroladores con los que he trabajado tienen una pequeña SRAM integrada que se puede usar como "caché manual". Pones cosas allí que deben tener una latencia baja, ya sea código o datos.

Ahora, el término "microcontrolador" se está volviendo cada vez más inflado. ¿El procesador ARM de 8 núcleos de su teléfono es un microcontrolador? Si es así, entonces sí, por supuesto que debería tener un caché.

el cortex-m4 cae en esta categoría de ¿es un microcontrolador? desde el flash incorporado y la ram y cómo se ejecuta, sí, pero tiene cachés y una fpu y se puede sincronizar bastante rápido, desde esos no, no es un microcontrolador.
La mayoría de los µC que funcionan >25 MHz tienen un caché para memoria flash. La memoria flash es un poco lenta incluso durante la lectura.

Por encima de cierta velocidad, la memoria rápida cuesta más por byte que la memoria lenta (por debajo de esa velocidad, hacer que la memoria sea más lenta no la abaratará). Si un sistema tiene una gran cantidad de memoria, hacer que la mayor parte sea lenta pero luego incluir un caché de memoria rápida y la lógica para ejecutarla será más económico que hacer que toda la memoria sea rápida. Sin embargo, si el sistema no funciona muy rápido, la memoria que puede seguir el ritmo del sistema no costará más que la memoria más lenta, por lo que no hay motivo para que toda la memoria no sea lo suficientemente rápida para seguir el ritmo del sistema. Si el sistema es rápido pero no tiene mucha memoria, los ahorros de costos de hacer que la mayor parte de la memoria sea lenta no serán suficientes para justificar el costo de agregar un caché.

Muchos microcontroladores tienen una interfaz flash que puede obtener varios bytes a la vez en un búfer; Si bien esto podría verse como una especie de caché, en muchos casos no será una memoria direccionable, ya que cada bit del búfer solo podrá tomar datos de una sola fuente [una línea de bits de la matriz flash].

Tener un caché de nivel 1 es una compensación entre velocidad y costo. Para la velocidad, cuanto más grande sea la memoria, más larga será la ruta a los datos. Eso significa que tomará más y más tiempo (en términos de latencia) cuanta más memoria agregue. En algún momento, el rendimiento se degrada debido a esta latencia, que es el punto en el que tiene sentido agregar un caché de nivel 1. El costo también es una consideración, ya que la memoria de alta velocidad es más costosa que otros tipos de memoria. Finalmente, un beneficio adicional es que los cachés pueden hacer que el microcontrolador ignore el tipo de memoria desde la que se lee.

Los microcontroladores suelen tener memorias pequeñas y, por lo tanto, a menudo no tienen caché de nivel 1. ¡En cierto sentido, toda su memoria podría considerarse un caché de nivel 1! Sin embargo, muchos microcontroladores de hoy en día son muy capaces y comienzan a cruzar al territorio de los microprocesadores, con memorias más grandes y, por lo tanto, también cachés de nivel 1 (y nivel 2).

Tener cachés agrega un costo bastante significativo en el lado de la programación, ya que el comportamiento en tiempo real de los errores de caché puede ser difícil de predecir. A veces, esto no importa y/o se puede solucionar, pero en los casos en que sí, hay algunas opciones:

  • Utilice microcontroladores más pequeños para subtareas específicas en un sistema más grande.
  • Utilice un chip que tenga unidades físicas de tiempo real integradas.

La primera solución es bastante atractiva, ya que los microcontroladores son baratos y capaces. Sin embargo, la comunicación entre los controladores y la unidad principal (CPU) podría convertirse en un problema. Esta es la razón por la que los chips con capacidades integradas en tiempo real pueden ser una mejor solución.

Al igual que con toda la ingeniería, existen ventajas y desventajas para cada solución. ¡Elija la herramienta adecuada para el trabajo!

El banco de registros no se parece en nada a un caché, especialmente en un microcontrolador. El hecho de que sea rápido no implica que algo sea un caché.
@pipe Gracias, debo haberme equivocado (o el nombre cambió con el tiempo). Parece que el caché de nivel 0 se usa ahora para el caché de microinstrucciones. He editado esa parte.