¿Cuál es el significado de esta línea? “Vista en caché, asignada en memoria, de flash QSPI externo. El caché se especifica como 32 KB con asociatividad de 4 vías ".

5
  

Vista en caché, asignada en memoria, de flash QSPI externo. El caché se especifica como 32 KB con   Asociatividad de 4 vías.

¿Significa que mi flash QSPI externo es de solo 32Kb o que se ha asignado en memoria a 32Kb?

¿La vista en caché significa que la lectura repetida obtendrá los datos en caché dentro del procesador y no accederá realmente a la memoria?

    
pregunta MaNyYaCk

2 respuestas

34

La confusión probablemente proviene de la formulación: "vista en caché, asignada en memoria" El hecho de que sea mapeado en memoria no tiene nada que ver con el hecho de que esté en caché. El tamaño de la asignación de memoria es independiente del tamaño del caché.

Por lo tanto, lo desglosaré por ti:

  

Mapa de memoria

Significa que puede acceder al contenido de la memoria externa directamente leyendo / escribiendo el espacio de direcciones de la memoria principal (en una dirección específica). También suele implicar que, si la memoria externa contiene código ejecutable, puede ejecutar este código simplemente bifurcando: no necesita copiar el código en la memoria interna antes de bifurcarse. Esto se logra mediante la MCU que, internamente, traduce cualquier acceso a esta parte de la memoria en los comandos QSPI requeridos para leer / escribir el flash externo sobre la marcha. En este punto, no implica que haya un caché.

  

En caché

Significa que los datos leídos de esta parte de la memoria se colocarán en un área de memoria intermedia de menor tamaño (no accesible directamente), que la MCU buscará primero cuando se deba acceder nuevamente a la memoria externa. De esta manera, cuando se accede a los mismos datos dos veces, no es necesario volver a acceder a la memoria externa. Se recuperarán los datos del caché, que es mucho más rápido.

De hecho, esto es muy útil para QSPI asignados en memoria. La interfaz QSPI es mucho más lenta que la CPU: cualquier operación de lectura / escritura debe traducirse en comandos enviados en serie en unas pocas líneas de señal, lo que agrega mucha sobrecarga. Para reducir esta sobrecarga, normalmente tratará de leer varios bytes para cada acceso QSPI y los almacenará en un caché para que, si la próxima lectura se dirige al byte vecino (que es probable), lo tenga listo.

  

32kB

Aquí, este es el tamaño del caché, no el tamaño del mapa de memoria. El tamaño del mapa de memoria normalmente será lo suficientemente grande para todo el tamaño de la memoria externa (verifique las especificaciones detalladas).

  

asociatividad de 4 vías

Esta es la forma en que el caché está organizado internamente. El caché es mucho más pequeño que la memoria externa. La forma ingenua de implementar una memoria caché sería almacenar todos los bytes a los que se accedió recientemente junto con sus direcciones correspondientes y, cuando se realicen accesos posteriores, verificar en toda la memoria caché si un byte existente tiene su dirección correspondiente a la dirección a la que se accede. Esto es extremadamente ineficiente. Para cada byte, tendría que almacenar la dirección, que multiplica por cinco el tamaño requerido para el caché (asumiendo direcciones de 32 bits: para cada byte, necesita el valor del byte de datos más cuatro bytes para la dirección correspondiente), y para cada acceso, debe comparar la dirección con 32768 valores posibles para verificar si ya está en el caché o no.

Entonces, aquí está cómo se hace:

  • Primero, el caché se organiza en líneas de N bytes (por ejemplo, 16 o 32 bytes: tenga en cuenta que el tamaño de la línea del caché no se especifica en su caso). Almacena las direcciones para todas las líneas de caché, no para cada byte, lo que ahorra mucho espacio.
  • Entonces, no todas las direcciones posibles se pueden almacenar en ninguna parte del caché. Al acceder al caché, toma parte de la dirección y esto le dará el índice de un "conjunto de caché". Cada conjunto de caché puede contener 4 líneas de caché (en su caso). Al verificar si los datos están en la memoria caché, esto significa que solo tiene estas 4 direcciones de líneas de caché para verificar porque sabe que, si está allí, necesariamente estará en este conjunto. Esto reducirá en gran medida la complejidad de la estructura de la memoria caché, a costa de una menor flexibilidad en el almacenamiento de los datos (lo que significa una tasa de aciertos de memoria caché posiblemente menor, según los patrones de acceso a la memoria).

Esto es lo que es la asociación de caché: el número de líneas de caché por conjunto. Esto da una indicación de la probabilidad de que pueda recuperar datos en el caché si se ha leído anteriormente. Cuanto mayor sea la asociatividad, mejor, pero hace que el caché sea más complejo y más caro de fabricar. Y en algún momento, los beneficios ni siquiera valen la pena. 4 no es malo (por lo que están orgullosos de publicarlo).

    
respondido por el dim
6

La oración es bastante clara:

  
    

El caché se especifica como 32 KB con asociatividad de 4 vías.

  

Entonces,

  

¿Significa que mi flash QSPI externo es de solo 32Kb o que se ha asignado en memoria a 32Kb?

Ninguno. El caché es de 32 kB (no Kb, que es Kelvinbit! ¡Cuide su uso de mayúsculas!).

  

¿La vista en caché significa que la lectura repetida obtendrá los datos en caché dentro del procesador y no accederá realmente a la memoria?

Bueno, vea wikipedia en cachés. Sí, una lectura repetida dentro de las regiones almacenadas en caché recuperará la información del caché. Eso es lo que hace un caché.

No, ese caché no es necesariamente parte del procesador, sino del periférico del controlador flash.

    
respondido por el Marcus Müller

Lea otras preguntas en las etiquetas