12 memoria caché

jerarquía de memoria

Una jerarquía de memoria de computadora es una forma de organizar diferentes tipos de dispositivos de almacenamiento según la velocidad, la capacidad y el tiempo de acceso. Esta estructura jerárquica mejora el rendimiento de la computadora, permitiendo que el procesador acceda a los datos de manera eficiente. Generalmente, la jerarquía de la memoria se puede dividir en los siguientes niveles:

  • Registro: El registro es una unidad de almacenamiento de extremadamente alta velocidad ubicada dentro de la CPU y se utiliza para almacenar valores inmediatos y datos necesarios para los cálculos. Hay un número limitado de ellos, pero el acceso es muy rápido y normalmente requiere sólo un ciclo de CPU.

  • Caché: El caché es una memoria pequeña pero rápida ubicada cerca del procesador. Se utiliza para almacenar temporalmente datos a los que la CPU puede acceder con frecuencia. La caché generalmente se divide en tres niveles: L1, L2 y L3, donde L1 y L2 se encuentran dentro de cada núcleo y L3 es compartida por todos los núcleos. A medida que los niveles bajan, la capacidad aumenta pero la velocidad se vuelve más lenta.

  • Memoria principal (RAM): La memoria principal, también conocida como memoria de acceso aleatorio (RAM), es la memoria principal de la computadora. La RAM almacena programas y datos en ejecución, pero solo está disponible cuando el sistema está encendido. La RAM tiene una capacidad mucho mayor que la caché, pero su acceso es más lento.

  • Memoria virtual: la memoria virtual es una tecnología en la que el sistema operativo utiliza el espacio del disco duro para simular la RAM y se utiliza para ampliar la memoria disponible cuando la RAM es insuficiente. El acceso a la memoria virtual es mucho más lento que la RAM, pero puede manejar grandes cantidades de datos.

  • Almacenamiento secundario (HDD/SSD): Los dispositivos de almacenamiento secundario, como unidades de disco duro (HDD) y unidades de estado sólido (SSD), se utilizan para el almacenamiento a largo plazo de datos y programas. Estos dispositivos tienen un acceso más lento que la RAM, pero tienen mayor capacidad y retienen datos después de un corte de energía.

    En general, la jerarquía de la memoria de la computadora sigue un principio básico: de arriba a abajo, los dispositivos de almacenamiento se ralentizan gradualmente, pero la capacidad y el tiempo de acceso aumentan. Los sistemas informáticos logran un alto rendimiento a través de esta estructura jerárquica mientras encuentran un equilibrio entre velocidad y capacidad entre las diferentes capas.

Insertar descripción de la imagen aquí

Cache

¿Qué es?

La caché es una memoria pequeña de alta velocidad ubicada entre la CPU y la memoria principal, que se utiliza para almacenar temporalmente datos a los que el procesador puede acceder con frecuencia. El propósito del caché es reducir el tiempo que la CPU pasa accediendo a la memoria principal, mejorando así el rendimiento de la computadora.
La caché generalmente se divide en tres niveles: L1, L2 y L3, donde L1 y L2 se encuentran dentro de cada núcleo de la CPU y L3 es compartida por todos los núcleos. A medida que los niveles bajan, la capacidad aumenta pero la velocidad se vuelve más lenta.

¿principio de funcionamiento?

  • Principio de localidad: el caché aprovecha el principio de localidad del acceso del programa a datos e instrucciones, es decir, el programa tiende a acceder a direcciones de memoria adyacentes en un corto período de tiempo (localidad espacial) y a acceder a la misma dirección de memoria varias veces dentro de un período. de tiempo (localidad horaria). Por lo tanto, los cachés almacenan temporalmente datos e instrucciones a los que se accedió recientemente para que puedan recuperarse más rápidamente la próxima vez que se acceda a ellos.
  • Mapeo de caché: el caché divide partes de la memoria principal en bloques (Bloques) y coloca estos bloques en Líneas de caché (Línea de caché) de acuerdo con ciertas estrategias de mapeo. Las estrategias de mapeo comunes incluyen mapeo totalmente asociativo, mapeo directo y mapeo asociativo grupal.
  • Estrategia de reemplazo: cuando el caché está lleno y necesita dejar espacio para nuevos datos, Cache utiliza una estrategia de reemplazo para determinar qué bloque de datos debe reemplazarse. Las estrategias de reemplazo comunes incluyen el uso menos reciente (LRU) y el reemplazo aleatorio (Random).
  • Estrategia de escritura: cuando el procesador necesita modificar datos en el caché, el caché debe decidir cuándo escribir esos cambios en la memoria principal. Las estrategias de escritura comunes incluyen Write-Back y Write-Through.

¿Cuál es el papel del caché?

  • Latencia de acceso reducida: al almacenar los datos a los que se accedió recientemente en una caché rápida, la CPU puede obtener los datos necesarios más rápido, lo que reduce la latencia de acceso.
  • Reducir la carga de la memoria principal: la existencia de caché puede reducir la cantidad de accesos a la memoria principal, reduciendo así la carga de la memoria principal.
  • Rendimiento mejorado del procesador: dado que la CPU puede acceder a los datos en la caché más rápido, se puede mejorar el rendimiento del procesador.

En resumen, la función de la caché es mejorar la velocidad de acceso a los datos aprovechando la localidad de acceso al programa y adoptando ciertas estrategias de mapeo, reemplazo y escritura, mejorando así el rendimiento de la computadora.

Estructura organizativa de caché

La estructura organizativa del caché (Caché) se refiere a la forma en que se asignan los datos desde la memoria principal al caché. Las estructuras organizativas de caché comunes incluyen las siguientes:

  • Mapeado directo: en la estructura de mapeo directo, cada bloque de datos en la memoria principal solo se puede asignar a una ubicación específica en la caché. La relación de mapeo está determinada por la siguiente fórmula: Línea de caché = número de bloque de memoria principal % Número de línea de caché. Esta estructura es simple y fácil de implementar, pero puede provocar conflictos de mapeo, es decir, es necesario asignar varios bloques de memoria principal a la misma línea de caché, lo que reduce la utilización de la caché.
  • Mapeo totalmente asociativo (completamente asociativo): en la estructura de mapeo totalmente asociativo, cualquier bloque de datos en la memoria principal se puede asignar a cualquier ubicación en la caché. Esta estructura necesita atravesar todo el caché cuando se buscan datos, por lo que requiere un circuito de búsqueda más complejo. El mapeo totalmente asociativo evita conflictos de mapeo, pero es relativamente complejo y costoso de implementar.
  • Establecer mapeo asociativo (Establecer mapeo asociativo): la estructura de mapeo asociativo establecido es un compromiso entre el mapeo directo y el mapeo totalmente asociativo. La caché se divide en varios grupos (Conjuntos), cada grupo contiene varias filas. Los bloques de datos en la memoria principal se pueden asignar a cualquier línea de caché dentro del mismo grupo. En comparación con el mapeo directo, el mapeo asociativo grupal reduce los conflictos de mapeo y reduce la complejidad de la implementación en comparación con el mapeo totalmente asociativo.

Las tres estructuras organizativas de caché anteriores tienen diferentes características de rendimiento en aplicaciones prácticas. La estructura de mapeo directo es simple de implementar, pero puede generar mayores conflictos de mapeo; el mapeo totalmente asociativo puede hacer uso completo de la caché, pero es complejo de implementar y costoso; el mapeo asociativo de grupo logra un equilibrio entre la complejidad de la implementación y la utilización de la caché. ampliamente utilizado en los sistemas informáticos modernos.

Modo de direccionamiento de caché

El método de direccionamiento de la caché se refiere a cómo extraer información relevante de la dirección de la memoria para determinar la ubicación de los datos en la caché. Existen principalmente tres modos de direccionamiento: mapeo directo, mapeo asociativo de grupo y mapeo totalmente asociativo. Estos modos de direccionamiento afectan la forma en que los índices, las etiquetas y los desplazamientos dentro del bloque se extraen de las direcciones de memoria.

  • Asignación directa:
    en la asignación directa, cada bloque de memoria solo se puede asignar a una línea de caché específica. La dirección de memoria se divide en tres partes: desplazamiento de bloque (Block Offset), índice (Índice) y etiqueta (Etiqueta).
    Desplazamiento intrabloque: se utiliza para localizar bytes específicos dentro de un bloque de datos.
    Índice: se utiliza para localizar filas específicas en la caché.
    Etiqueta: se utiliza para verificar si los datos existen en la caché.
  • Establecer mapeo asociativo (Establecer mapeo asociativo):
    en el mapeo asociativo establecido, el caché se divide en varios grupos y cada grupo contiene varias filas. La dirección de memoria también se divide en tres partes: desplazamiento de bloque (Block Offset), índice de grupo (Set Index) y etiqueta (Tag).
    Desplazamiento intrabloque: se utiliza para localizar bytes específicos dentro de un bloque de datos.
    Índice de grupo: se utiliza para localizar un grupo específico en la caché.
    Etiqueta: se utiliza para verificar si los datos existen en el grupo especificado en la caché.
  • Mapeo totalmente asociativo:
    en el mapeo totalmente asociativo, cualquier bloque de memoria se puede asignar a cualquier fila de la caché. La dirección de memoria solo necesita dividirse en dos partes: desplazamiento de bloque (Block Offset) y etiqueta (Etiqueta).
    Desplazamiento intrabloque: se utiliza para localizar bytes específicos dentro de un bloque de datos.
    Etiqueta: se utiliza para verificar si los datos existen en la caché.

Operación de lectura de caché

Las operaciones de lectura de caché implican recuperar datos del caché. Cuando la CPU necesita acceder a datos en una determinada dirección de memoria, la operación de lectura de caché sigue los siguientes pasos:
+ Índice y etiqueta: primero, extraiga el índice y la etiqueta de la dirección de memoria a la que se accederá. El índice se utiliza para localizar la fila o grupo de destino en la memoria caché, y la etiqueta se utiliza en un paso posterior para verificar si los datos existen en la memoria caché.

  • Verificar caché: después de determinar la fila o grupo de caché de destino, verifique la etiqueta de la fila (asignación directa) o todas las filas del grupo (asignación asociativa de grupo, asignación totalmente asociativa) para determinar si los datos a los que se accederá existen en el medio de la caché. . Si se encuentra una etiqueta coincidente, se ha producido un acierto de caché.
  • Leer datos: si se produce un acierto en el caché, la CPU lee los datos correspondientes del caché y los transfiere al registro u otra unidad de procesamiento para su procesamiento.
  • Manejo de errores de caché: si no se encuentra ninguna etiqueta coincidente en el caché, se ha producido un error de caché. En este caso, la CPU necesita leer los datos requeridos de la memoria principal y cargarlos en la caché. Dependiendo de la estructura organizativa y la estrategia de reemplazo de la caché (como LRU, FIFO, etc.), es posible que sea necesario reemplazar un determinado bloque de datos en la caché con datos recién leídos.
  • Actualizar la información de reemplazo: si la caché utiliza una determinada estrategia de reemplazo (como LRU), la información de reemplazo correspondiente debe actualizarse después de leer los datos para que se puedan tomar decisiones correctas cuando sea necesario reemplazar los datos en el futuro.
    Resumen: las operaciones de lectura de caché incluyen extraer el índice y la marca de la dirección de memoria, verificar la línea o grupo de caché, leer los datos (si hay un acierto) y manejar errores de caché. Durante la operación de lectura, es posible que también sea necesario actualizar la información relacionada con la política de reemplazo.

Operación de escritura en caché

Las operaciones de escritura en caché implican escribir datos en el caché y posiblemente volver a escribirlos en la memoria principal. Cuando la CPU necesita escribir datos en una determinada dirección de memoria, la operación de escritura en caché sigue los siguientes pasos:

  • Índice y etiqueta: primero, el índice y la etiqueta se extraen de la dirección de memoria a la que se accederá. El índice se utiliza para localizar la fila o grupo de destino en la memoria caché, y la etiqueta se utiliza en un paso posterior para verificar si los datos existen en la memoria caché.
  • Verificar caché: después de determinar la fila o grupo de caché de destino, verifique la etiqueta de la fila (asignación directa) o todas las filas del grupo (asignación asociativa de grupo, asignación totalmente asociativa) para determinar si los datos a los que se accederá existen en el medio de la caché. . Si se encuentra una etiqueta coincidente, se ha producido un acierto de caché.
  • Estrategia de escritura: en el caso de un acierto de caché, la CPU escribe los datos en la línea de caché correspondiente. En este momento, se deben realizar diferentes operaciones de acuerdo con la estrategia de escritura de la caché (escritura posterior o escritura directa).
    Escritura recíproca: escriba datos en la caché y marque la línea de la caché como "modificada" (sucia). Más adelante, cuando la línea de caché modificada se reemplaza desde el caché, se vuelve a escribir en la memoria principal. Esta estrategia reduce la cantidad de operaciones de escritura en la memoria principal y mejora el rendimiento.
    Escritura directa: escribe datos en la caché y en la memoria principal simultáneamente. Esta estrategia garantiza que los datos en la memoria caché y la memoria principal sean siempre consistentes, pero puede generar más operaciones de escritura en la memoria principal y reducir el rendimiento.
    Manejo de errores de caché: si no se encuentra ninguna etiqueta coincidente en el caché, se ha producido un error de caché. En este momento, se deben realizar diferentes operaciones según la estrategia de escritura y la estrategia de asignación de la caché (asignación de escritura Write-Allocate o asignación sin escritura No-Write-Allocate).
    Write-Allocate: cargue el bloque de datos que se escribirá desde la memoria principal en la caché y luego realice la operación de escritura. Esta estrategia es adecuada para anticipar lecturas posteriores del mismo bloque de datos porque ya se ha cargado en la memoria caché.
    Asignación sin escritura (No-Write-Allocate): escribe datos directamente en la memoria principal sin cargar bloques de datos en la caché. Esta estrategia es adecuada cuando se espera que no se vuelva a acceder al mismo bloque de datos posteriormente.

Resumen: las operaciones de escritura en caché incluyen extraer índices y etiquetas de direcciones de memoria, verificar filas o grupos de caché, escribir datos en el caché y/o la memoria principal de acuerdo con la política de escritura y manejar errores de caché de acuerdo con la política de asignación. Durante la operación de escritura, es posible que también sea necesario actualizar la información relacionada con la política de reemplazo.

Métricas de rendimiento de la caché

La medición del rendimiento de la caché se centra principalmente en dos aspectos: tasa de aciertos y tiempo de acceso. Estas métricas reflejan el impacto de la caché en el rendimiento general del sistema.

  • Tasa de aciertos: la tasa de aciertos se refiere a la probabilidad de encontrar con éxito los datos o instrucciones requeridos en el caché. La fórmula de cálculo de la tasa de aciertos es:
    tasa de aciertos = número de aciertos de caché/número total de accesos

La tasa de aciertos se puede subdividir en tasa de aciertos de lectura (tasa de aciertos de lectura) y tasa de aciertos de escritura (tasa de aciertos de escritura), que representan la tasa de aciertos de las operaciones de lectura y las operaciones de escritura, respectivamente. Una tasa de aciertos alta significa que la CPU obtiene los datos que necesita de la caché de alta velocidad con más frecuencia que de la memoria principal más lenta, mejorando así el rendimiento del sistema.

  • Tiempo de acceso: El tiempo de acceso se refiere al tiempo que lleva desde que se emite una solicitud de acceso hasta que se obtienen los datos requeridos. El tiempo de acceso a la caché se puede dividir en las siguientes partes:
    Tiempo de acierto de la caché (Hit Time): en el caso de un acierto de la caché, el tiempo necesario para obtener datos de la caché.
    Tiempo de pérdida de caché (Miss Time): En el caso de pérdida de caché, el tiempo necesario para obtener datos de la memoria principal.
    Penalización por error de caché (Miss Penalty): el tiempo adicional dedicado a cargar datos desde la memoria principal y actualizar el caché.

El tiempo de acceso promedio es un indicador integral que representa el tiempo que le toma al procesador acceder a los datos en circunstancias promedio. La fórmula de cálculo del tiempo total de acceso es:
tiempo total de acceso = tiempo de acierto de caché + (tasa de aciertos × penalización por error de caché)

Para mejorar el rendimiento de la caché, los diseñadores suelen optimizar la tasa de aciertos y el tiempo de acceso. Esto se puede lograr ajustando la estructura organizativa de la caché, la estrategia de reemplazo, la estrategia de escritura, etc. Sin embargo, estas optimizaciones suelen ir acompañadas de compensaciones: por ejemplo, aumentar la capacidad de la caché puede mejorar la tasa de aciertos, pero también puede aumentar el tiempo de acceso. Por lo tanto, la optimización del rendimiento de la caché requiere encontrar el equilibrio adecuado entre diferentes factores.

Tecnología de fragmentación

La tecnología de bloques (Block, también llamada Cache Line) es un concepto importante en el diseño de Cache. Cuando la CPU necesita acceder a algunos datos en la memoria principal, no solo carga los datos requeridos en la caché, sino que también carga todo el bloque donde se encuentran los datos en la caché. Un bloque es una unidad contigua de datos en la memoria principal. El tamaño suele ser una potencia entera de 2, como 32 bytes, 64 bytes o 128 bytes.
Las principales ventajas de la tecnología de fragmentación:

  • Utilice la localidad espacial:
    durante la ejecución del programa, a menudo se accede a direcciones de memoria adyacentes. La tecnología de bloqueo aprovecha la localidad espacial y carga juntos datos adyacentes en la caché, mejorando así la tasa de aciertos. Cuando la CPU accede a ciertos datos, es probable que en un futuro próximo acceda a sus datos adyacentes, que se han almacenado en el mismo bloque de la caché, logrando así un acierto de caché.
  • Reducir la cantidad de transferencias:
    dado que las transferencias de datos entre la caché y la memoria principal generalmente se realizan en bloques, la tecnología de bloqueo puede reducir la cantidad de transferencias de datos. Cargar todo el bloque de datos en la caché significa que no es necesario volver a cargar desde la memoria principal el acceso futuro a otros datos dentro del bloque.
  • Captura previa: la tecnología de bloqueo puede realizar una captación previa, es decir, cargar por adelantado en la caché los datos a los que se podrá acceder en el futuro. Esto ayuda a reducir la probabilidad de errores de caché, mejorando así el rendimiento.
    Las principales desventajas de la tecnología de fragmentación:
  • Desperdicio de memoria: si el programa no accede a todos los datos de un bloque de datos, cargar todo el bloque de datos en la memoria caché puede desperdiciar espacio en la memoria caché.
  • Conflictos de reemplazo: si los datos a los que accede el programa abarcan varios bloques de datos, esto puede provocar que los datos en la caché se reemplacen continuamente, lo que reduce la tasa de aciertos. Esta situación se llama Conflicto de Reemplazo.

En resumen, la tecnología de bloqueo es un método clave para mejorar el rendimiento en el diseño de caché: aprovecha la localidad espacial del acceso del programa a la memoria, reduce la cantidad de transmisiones de datos e implementa la captación previa. Sin embargo, este enfoque también puede conducir a un desperdicio de memoria y a conflictos de sustitución. Por lo tanto, al diseñar una caché, es necesario equilibrar el tamaño del bloque y otros parámetros para lograr un rendimiento óptimo.

Análisis de fallas de caché de la tecnología de bloqueo

Cache Miss (faltante) significa que los datos requeridos no están en el caché y deben cargarse desde la memoria principal. La tecnología de bloqueo Cache Miss se puede dividir en los siguientes tres tipos:

  • Fallo de inicio en frío (Cold Miss, también llamado fallo obligatorio, Fallo obligatorio):
    El fallo de arranque en frío se refiere a un fallo que ocurre cuando un programa accede a determinados datos por primera vez. Debido a que el programa no ha accedido a estos datos, no puede estar en la caché. Los errores de este tipo son inevitables, pero el número de errores de arranque en frío disminuye a medida que avanza la ejecución del programa.
  • Falta de capacidad:
    La falta de capacidad se debe a una capacidad de caché insuficiente para acomodar todos los datos requeridos por el programa. Cuando un programa necesita acceder a un conjunto de datos que es mayor que la capacidad del caché, algunos datos deben reemplazarse del caché para dejar espacio para datos nuevos. La pérdida de capacidad ocurre cuando se accede nuevamente a los datos reemplazados. Aumentar la capacidad de la caché puede ayudar a reducir la pérdida de capacidad, pero el costo y el consumo de energía también aumentarán en consecuencia.
  • Fallo de conflicto:
    El fallo de conflicto se debe a la política de reemplazo de caché. En cachés mapeados directamente y asociativos por conjuntos, se pueden asignar diferentes bloques de datos a la misma ubicación de caché. Cuando un programa accede repetidamente a estos bloques de datos en conflicto, se reemplazan entre sí, lo que genera conflictos faltantes. Para reducir los errores de conflicto, puede utilizar métodos de organización de caché más complejos (como establecer mapeo asociativo o mapeo totalmente asociativo) u optimizar estrategias de reemplazo (como la LRU utilizada menos recientemente u otras estrategias).

El análisis de Cache Miss ayuda a comprender los cuellos de botella en el rendimiento del programa y proporciona una base para optimizar el diseño de Cache. Al reducir los diferentes tipos de Cache Miss, se puede mejorar el rendimiento del programa. Por ejemplo, para reducir los errores de arranque en frío, puede utilizar una estrategia de captación previa; para reducir los errores de capacidad, puede considerar aumentar la capacidad de la caché; para reducir los errores de conflicto, puede ajustar la estructura organizativa de la caché y la estrategia de reemplazo. Sin embargo, existen compensaciones entre rendimiento, costo y consumo de energía al optimizar el caché.

Análisis del efecto de bloqueo.

El bloqueo es una técnica para optimizar el rendimiento de la jerarquía de memoria de una computadora. En este enfoque, el programa fragmenta datos y cálculos durante la ejecución para hacer un uso más eficiente de la caché. Esto ayuda a mejorar la tasa de aciertos de la caché, mejorando así el rendimiento del programa. El siguiente es el análisis del efecto de la tecnología de bloqueo:

  • Mejorar la tasa de aciertos de la caché: el bloqueo puede mejorar la tasa de aciertos de la caché, porque cuando el programa procesa un bloque de datos, se puede acceder a los mismos datos varias veces. Esto mantiene los datos en la caché por más tiempo, mejorando así la tasa de aciertos de la caché. Esto es especialmente importante para los bucles, porque el acceso a los datos en el bucle puede ser regular. El bloqueo puede reducir el número de bucles a un número menor y reducir la pérdida de caché.
  • Reducir la cantidad de accesos a la memoria principal: dado que la tecnología de bloqueo puede mejorar la tasa de aciertos de la caché, también puede reducir la cantidad de accesos a la memoria principal. Esto ayuda a mejorar el rendimiento del programa ya que el acceso a la memoria principal es relativamente lento.
  • Utilizando el principio de localidad: la tecnología de bloqueo aprovecha los principios de localidad espacial y localidad temporal del programa. Localidad espacial significa que un programa accede con frecuencia a direcciones de memoria adyacentes durante la ejecución. Localidad temporal significa que un programa puede acceder a los mismos datos varias veces en un corto período de tiempo. El bloqueo permite que el programa aproveche al máximo estos principios de localidad al procesar un bloque de datos, mejorando así el rendimiento.
  • Reutilización de datos mejorada: el bloqueo ayuda a mejorar la reutilización de datos porque se puede acceder a los mismos datos varias veces mientras se procesa un bloque de datos. Esto permite reutilizar más los datos de la caché, mejorando así el rendimiento del programa.

Algunas limitaciones de la tecnología de bloqueo:

  • Complejidad de la implementación: la implementación de la tecnología de bloqueo puede aumentar la complejidad de la implementación del programa porque el programa debe ajustarse adecuadamente para implementar el bloqueo. Esto puede incluir ajustar el número de bucles, el orden de acceso a los datos, etc.
  • Es necesario elegir el tamaño de bloque correcto: elegir el tamaño de bloque correcto es crucial para lograr el efecto de la tecnología de bloqueo. Los bloques demasiado grandes pueden provocar una capacidad de caché insuficiente, mientras que los bloques demasiado pequeños pueden no aprovechar al máximo el principio de localidad. Por lo tanto, es necesario elegir un tamaño de bloque apropiado según las características del programa y los parámetros de caché.

En resumen, la tecnología de bloqueo puede utilizar la caché de forma eficaz y mejorar el rendimiento del programa mediante el procesamiento de datos y cálculos en bloques. Sin embargo, la implementación de la tecnología de bloqueo requiere considerar la complejidad de la implementación y la selección de tamaños de bloque adecuados.

Supongo que te gusta

Origin blog.csdn.net/m0_56898461/article/details/129788199
Recomendado
Clasificación