La jerarquía de caché, o caché multinivel , es una arquitectura de memoria que utiliza una jerarquía de almacenes de memoria en función de las distintas velocidades de acceso a los datos almacenados en caché. Los datos más solicitados se almacenan en caché en almacenes de memoria de acceso de alta velocidad, lo que permite un acceso más rápido por parte de los núcleos de la unidad central de procesamiento (CPU).
La jerarquía de caché es una forma y parte de la jerarquía de memoria y puede considerarse una forma de almacenamiento por niveles . [1] Este diseño fue pensado para permitir que los núcleos de CPU procesen más rápido a pesar de la latencia de memoria del acceso a la memoria principal . El acceso a la memoria principal puede actuar como un cuello de botella para el rendimiento del núcleo de la CPU mientras la CPU espera datos, mientras que hacer que toda la memoria principal sea de alta velocidad puede ser prohibitivamente costoso. Las cachés de alta velocidad son un compromiso que permite el acceso de alta velocidad a los datos más utilizados por la CPU, lo que permite un reloj de CPU más rápido . [2]

Fondo
En la historia del desarrollo de chips electrónicos y de computadoras, hubo un período en el que los aumentos en la velocidad de la CPU superaron las mejoras en la velocidad de acceso a la memoria. [3] La brecha entre la velocidad de las CPU y la memoria significaba que la CPU a menudo estaba inactiva. [4] Las CPU eran cada vez más capaces de ejecutar mayores cantidades de instrucciones en un tiempo determinado, pero el tiempo necesario para acceder a los datos de la memoria principal impedía que los programas se beneficiaran plenamente de esta capacidad. [5] Este problema motivó la creación de modelos de memoria con mayores tasas de acceso para aprovechar el potencial de los procesadores más rápidos. [6]
Esto dio lugar al concepto de memoria caché , propuesto por primera vez por Maurice Wilkes , un científico informático británico de la Universidad de Cambridge en 1965. Llamó a estos modelos de memoria "memoria esclava". [7] Entre aproximadamente 1970 y 1990, los artículos de Anant Agarwal , Alan Jay Smith , Mark D. Hill , Thomas R. Puzak y otros discutieron mejores diseños de memoria caché. Los primeros modelos de memoria caché se implementaron en ese momento, pero incluso cuando los investigadores estaban investigando y proponiendo mejores diseños, la necesidad de modelos de memoria más rápidos continuó. Esta necesidad resultó del hecho de que, aunque los primeros modelos de caché mejoraron la latencia de acceso a los datos, con respecto a los costos y las limitaciones técnicas no era factible que la caché de un sistema informático se acercara al tamaño de la memoria principal. A partir de 1990, se propusieron ideas como agregar otro nivel de caché (segundo nivel), como respaldo para la caché de primer nivel. Jean-Loup Baer , Wen-Hann Wang, Andrew W. Wilson y otros han realizado investigaciones sobre este modelo. Cuando varias simulaciones e implementaciones demostraron las ventajas de los modelos de caché de dos niveles, el concepto de cachés multinivel se impuso como un modelo nuevo y generalmente mejor de memorias caché. Desde el año 2000, los modelos de caché multinivel han recibido una amplia atención y actualmente se implementan en muchos sistemas, como los cachés de tres niveles que están presentes en los productos Core i7 de Intel. [8]
Caché de varios niveles
El acceso a la memoria principal para cada ejecución de instrucción puede resultar en un procesamiento lento, ya que la velocidad del reloj depende del tiempo necesario para encontrar y obtener los datos. Para ocultar esta latencia de la memoria al procesador, se utiliza el almacenamiento en caché de datos. [9] Siempre que el procesador requiere los datos, se obtienen de la memoria principal y se almacenan en la estructura de memoria más pequeña llamada caché. Si hay alguna necesidad adicional de esos datos, primero se busca en la caché antes de ir a la memoria principal. [10] Esta estructura se encuentra más cerca del procesador en términos del tiempo que se tarda en buscar y obtener datos con respecto a la memoria principal. [11] Las ventajas de utilizar la caché se pueden demostrar calculando el tiempo de acceso promedio (AAT) para la jerarquía de memoria con y sin caché. [12]
Tiempo promedio de acceso (AAT)
Los cachés, al ser de pequeño tamaño, pueden dar lugar a errores frecuentes (cuando una búsqueda en el caché no proporciona la información buscada), lo que da lugar a una llamada a la memoria principal para recuperar los datos. Por lo tanto, la AAT se ve afectada por la tasa de errores de cada estructura en la que busca los datos. [13]
La AAT para la memoria principal se obtiene mediante Hit time main memory . La AAT para cachés se puede obtener mediante
- Caché de tiempo de acierto + ( caché de tasa de errores × tiempo de penalización por error que tarda en llegar a la memoria principal después de un error en el caché ). [ se necesita más explicación ]
El tiempo de acceso a los cachés es menor que el tiempo de acceso a la memoria principal, por lo que el AAT para la recuperación de datos es significativamente menor cuando se accede a los datos a través del caché en lugar de la memoria principal. [14]
Compensaciones
Si bien el uso de la memoria caché puede mejorar la latencia de la memoria, es posible que no siempre resulte en la mejora necesaria en el tiempo que se tarda en recuperar los datos debido a la forma en que se organizan y recorren las memorias caché. Por ejemplo, las memorias caché de mapeo directo que tienen el mismo tamaño suelen tener una tasa de errores más alta que las memorias caché completamente asociativas. Esto también puede depender del parámetro de referencia de la computadora que prueba el procesador y del patrón de instrucciones. Pero el uso de una memoria caché completamente asociativa puede resultar en un mayor consumo de energía, ya que tiene que buscar en toda la memoria caché cada vez. Debido a esto, el equilibrio entre el consumo de energía (y el calor asociado) y el tamaño de la memoria caché se vuelve crítico en el diseño de la memoria caché. [13]
Evolución

En caso de que se produzca un error de caché, el propósito de utilizar dicha estructura se volverá inútil y el ordenador tendrá que ir a la memoria principal para obtener los datos necesarios. Sin embargo, con un caché de varios niveles , si el ordenador no encuentra el caché más cercano al procesador (caché de nivel uno o L1), buscará en el nivel o niveles de caché más cercanos y accederá a la memoria principal solo si estos métodos fallan. La tendencia general es mantener el caché L1 pequeño y a una distancia de 1 a 2 ciclos de reloj de CPU del procesador, y los niveles inferiores de caché aumentan de tamaño para almacenar más datos que L1, por lo que están más distantes pero con una tasa de errores menor. Esto da como resultado una mejor AAT. [15] Los arquitectos pueden diseñar la cantidad de niveles de caché según sus requisitos después de verificar las compensaciones entre el costo, las AAT y el tamaño. [16] [17]
Mejoras en el rendimiento
Con el escalamiento tecnológico que permitió que los sistemas de memoria se pudieran acomodar en un solo chip, la mayoría de los procesadores modernos tienen hasta tres o cuatro niveles de caché. [18] La reducción en la AAT se puede entender con este ejemplo, donde la computadora verifica la AAT para diferentes configuraciones hasta cachés L3.
Ejemplo : memoria principal = 50 ns , L1 = 1 ns con una tasa de error del 10 %, L2 = 5 ns con una tasa de error del 1 %, L3 = 10 ns con una tasa de error del 0,2 %.
- Sin caché, AAT = 50 ns
- Caché L1, AAT = 1 ns + (0,1 × 50 ns) = 6 ns
- Cachés L1–2, AAT = 1 ns + (0,1 × [5 ns + (0,01 × 50 ns)]) = 1,55 ns
- Cachés L1–3, AAT = 1 ns + (0,1 × [5 ns + (0,01 × [10 ns + (0,002 × 50 ns)])]) = 1,5101 ns
Desventajas
- La memoria caché tiene un costo marginal mayor que la memoria principal y, por lo tanto, puede aumentar el costo del sistema general. [19]
- Los datos en caché se almacenan solo mientras se suministra energía a la caché.
- Se requiere mayor área en el chip para el sistema de memoria. [20]
- Los beneficios pueden minimizarse o eliminarse en el caso de programas grandes con mala localidad temporal , que acceden con frecuencia a la memoria principal. [21]
Propiedades

Bancario versus unificado
En una caché con bancos, la caché se divide en una caché dedicada al almacenamiento de instrucciones y una caché dedicada a los datos. Por el contrario, una caché unificada contiene tanto las instrucciones como los datos en la misma caché. [22] Durante un proceso, el procesador accede a la caché L1 (o la mayoría de las cachés de nivel superior en relación con su conexión con el procesador) para recuperar tanto las instrucciones como los datos. Para que se implementen ambas acciones al mismo tiempo, se necesitan varios puertos y más tiempo de acceso en una caché unificada. Tener varios puertos requiere hardware y cableado adicionales, lo que genera una estructura significativa entre las cachés y las unidades de procesamiento. [23] Para evitar esto, la caché L1 a menudo se organiza como una caché con bancos, lo que da como resultado menos puertos, menos hardware y, en general, tiempos de acceso más bajos. [13]
Los procesadores modernos tienen cachés divididos y en sistemas con cachés multinivel, los cachés de nivel superior pueden unificarse mientras que los de nivel inferior se dividen. [24]
Políticas de inclusión

La política de inclusión del sistema de memoria determina si un bloque presente en la capa de caché superior también puede estar presente en el nivel de caché inferior y puede ser inclusiva, exclusiva o no inclusiva no exclusiva (NINE). [ cita requerida ]
Con una política inclusiva, todos los bloques presentes en la caché de nivel superior deben estar presentes también en la caché de nivel inferior. Cada componente de la caché de nivel superior es un subconjunto del componente de la caché de nivel inferior. En este caso, dado que hay una duplicación de bloques, se desperdicia algo de memoria. Sin embargo, la comprobación es más rápida. [ cita requerida ]
En una política exclusiva, todos los componentes de la jerarquía de caché son completamente exclusivos, de modo que ningún elemento de la caché de nivel superior estará presente en ninguno de los componentes de la caché de nivel inferior. Esto permite el uso completo de la memoria caché. Sin embargo, existe una alta latencia de acceso a la memoria. [25]
Las políticas anteriores requieren que se respete un conjunto de reglas para implementarlas. Si no se fuerza ninguna de ellas, la política de inclusión resultante se denomina política de inclusión no inclusiva y no exclusiva (NINE). Esto significa que la caché de nivel superior puede o no estar presente en la caché de nivel inferior. [21]
Redactar políticas
Hay dos políticas que definen la forma en que se actualizará un bloque de caché modificado en la memoria principal: escritura directa y escritura diferida. [ cita requerida ]
En el caso de la política de escritura continua, siempre que cambia el valor del bloque de caché, también se modifica aún más en la jerarquía de memoria de nivel inferior. [26] Esta política garantiza que los datos se almacenen de forma segura a medida que se escriben en toda la jerarquía.
Sin embargo, en el caso de la política de escritura diferida, el bloque de caché modificado se actualizará en la jerarquía de nivel inferior solo cuando se expulse el bloque de caché. Se adjunta un "bit sucio" a cada bloque de caché y se establece siempre que se modifica el bloque de caché. [27] Durante la expulsión, los bloques con un bit sucio establecido se escribirán en la jerarquía de nivel inferior. Con esta política, existe un riesgo de pérdida de datos, ya que la copia más recientemente modificada de un dato solo se almacena en la caché y, por lo tanto, se deben observar algunas técnicas correctivas.
En caso de una escritura en la que el byte no está presente en el bloque de caché, el byte puede llevarse al caché según lo determinado por una política de asignación de escritura o de no asignación de escritura. [28] La política de asignación de escritura establece que en caso de una falla de escritura, el bloque se recupera de la memoria principal y se coloca en el caché antes de escribir. [29] En la política de no asignación de escritura, si el bloque no se encuentra en el caché, se escribirá en la jerarquía de memoria de nivel inferior sin buscar el bloque en el caché. [30]
Las combinaciones comunes de políticas son "escritura diferida, escritura con asignación" y "escritura directa, escritura sin asignación" .
Compartido versus privado

Una caché privada se asigna a un núcleo en particular en un procesador y no puede ser accedida por ningún otro núcleo. En algunas arquitecturas, cada núcleo tiene su propia caché privada; esto crea el riesgo de bloques duplicados en la arquitectura de caché de un sistema, lo que resulta en una utilización reducida de la capacidad. Sin embargo, este tipo de elección de diseño en una arquitectura de caché multicapa también puede ser buena para una latencia de acceso a los datos más baja. [28] [31] [32]
Una caché compartida es una caché a la que pueden acceder varios núcleos. [33] Dado que es compartida, cada bloque de la caché es único y, por lo tanto, tiene una mayor tasa de aciertos, ya que no habrá bloques duplicados. Sin embargo, la latencia de acceso a los datos puede aumentar a medida que varios núcleos intentan acceder a la misma caché. [34]
En los procesadores multinúcleo , la elección de diseño para hacer que una caché sea compartida o privada afecta el rendimiento del procesador. [35] En la práctica, la caché de nivel superior L1 (o a veces L2) [36] [37] se implementa como privada y las cachés de nivel inferior se implementan como compartidas. Este diseño proporciona altas tasas de acceso para las cachés de alto nivel y bajas tasas de error para las cachés de nivel inferior. [35]
Modelos de implementación recientes

Intel Xeon Emerald Rapids (2024)
Hasta 64 núcleos:
- Caché L1: 80 kB por núcleo
- Caché L2: 2 MB por núcleo
- Caché L3: 5 MB por núcleo (es decir, hasta 320 MB en total)
Intel i5 Raptor Lake-HX (2024)
6 núcleos (rendimiento | eficiencia):
- Caché L1: 128 kB por núcleo
- Caché L2: 2 MB por núcleo | 4-8 MB semicompartidos
- Caché L3: 20-24 MB compartidos
Procesador AMD EPYC 9684X (2023)
96 núcleos:
- Caché L1: 64 kB por núcleo
- Caché L2: 1 MB por núcleo
- Caché L3: 1152 MB compartidos
Apple M1 Ultra (2022)
20 núcleos (núcleo de "rendimiento" 4:1 | núcleo de "eficiencia"):
- Caché L1: 320|192 kB por núcleo
- Caché L2: 52 MB semicompartidos
- Caché L3: 96 MB compartidos
AMD Ryzen 7000 (2022)
De 6 a 16 núcleos:
- Caché L1: 64 kB por núcleo
- Caché L2: 1 MB por núcleo
- Caché L3: 32 a 128 MB compartidos
Microarquitectura AMD Zen 2 (2019)
- Caché L1: 32 kB de datos y 32 kB de instrucciones por núcleo, 8 vías
- Caché L2: 512 kB por núcleo, 8 vías incluidas
- Caché L3: 16 MB locales por CCX de 4 núcleos, 2 CCX por chiplet, 16 vías no incluidas. Hasta 64 MB en CPU de escritorio y 256 MB en CPU de servidor
Microarquitectura AMD Zen (2017)
- Caché L1: 32 kB de datos y 64 kB de instrucciones por núcleo, 4 vías
- Caché L2: 512 kB por núcleo, 4 vías incluidas
- Caché L3: 4 MB locales y remotos por CCX de 4 núcleos, 2 CCX por chiplet, 16 vías no incluidas. Hasta 16 MB en CPU de escritorio y 64 MB en CPU de servidor
Microarquitectura Intel Kaby Lake (2016)
- Caché L1 (instrucciones y datos): 64 kB por núcleo
- Caché L2: 256 kB por núcleo
- Caché L3: 2 MB a 8 MB compartidos [37]
Microarquitectura Intel Broadwell (2014)
- Caché L1 (instrucciones y datos): 64 kB por núcleo
- Caché L2: 256 kB por núcleo
- Caché L3: 2 MB a 6 MB compartidos
- Caché L4: 128 MB de eDRAM (solo modelos Iris Pro) [36]
IBM POWER7 (2010)
- Caché L1 (instrucciones y datos): cada banco tiene 64 bancos, cada banco tiene 2.º + 1 puerto de escritura, 32 kB, asociativo de 8 vías, bloque de 128 B, escritura directa
- Caché L2: 256 kB, 8 vías, bloque de 128 B, escritura diferida, incluye L1, latencia de acceso de 2 ns
- Caché L3: 8 regiones de 4 MB (32 MB en total), región local 6 ns, remota 30 ns, cada región asociativa de 8 vías, matriz de datos DRAM, matriz de etiquetas SRAM [39]
Véase también
- PODER7
- Microarquitectura Intel Broadwell
- Microarquitectura Intel Kaby Lake
- Caché de CPU
- Jerarquía de la memoria
- Latencia CAS
- Caché (informática)
Referencias
- ^ Hennessy, John L; Patterson, David A; Asanović, Krste ; Bakos, Jason D; Colwell, Robert P; Bhattacharjee, Abhishek; Conte, Thomas M; Duato, José; Franklin, Diana; Goldberg, David; Jouppi, Norman P; Li, Sheng; Muralimanohar, Naveen; Peterson, Gregory D; Pinkston, Timothy Mark; Ranganathan, Prakash; Wood, David Allen; Young, Clifford; Zaky, Amr (2011). Arquitectura informática: un enfoque cuantitativo (sexta edición). Elsevier Science. ISBN 978-0128119051.OCLC 983459758 .
- ^ "Caché: ¿Por qué nivelarlo?" (PDF) .
- ^ Ronald D. Miller; Lars I. Eriksson; Lee A Fleisher, 2014. Anestesia de Miller, libro electrónico. Elsevier Health Sciences. pág. 75. ISBN 978-0-323-28011-2 .
- ^ Albert Y. Zomaya, 2006. Manual de computación innovadora e inspirada en la naturaleza: integración de modelos clásicos con tecnologías emergentes. Springer Science & Business Media. pág. 298. ISBN 978-0-387-40532-2 .
- ^ Richard C. Dorf, 2018. Sensores, nanociencia, ingeniería biomédica e instrumentos: sensores, nanociencia, ingeniería biomédica. CRC Press. pág. 4. ISBN 978-1-4200-0316-1 .
- ^ David A. Patterson; John L. Hennessy, 2004. Organización y diseño de computadoras: la interfaz hardware/software, tercera edición. Elsevier. pág. 552. ISBN 978-0-08-050257-1 .
- ^ "Sir Maurice Vincent Wilkes | Informático británico". Encyclopædia Britannica . Consultado el 11 de diciembre de 2016 .
- ^ Berkeley, John L. Hennessy, Universidad de Stanford, y David A. Patterson, Universidad de California. "Diseño de la jerarquía de memoria - Parte 6. Intel Core i7, falacias y trampas". EDN . Consultado el 13 de octubre de 2022 .
{{cite news}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ^ Shane Cook, 2012. Programación CUDA: Guía para desarrolladores sobre computación paralela con GPU. Newnes. págs. 107-109. ISBN 978-0-12-415988-4 .
- ^ Bruce Hellingsworth; Patrick Hall; Howard Anderson; 2001. Computación Nacional Superior. Routledge. págs. 30–31. ISBN 978-0-7506-5230-8 .
- ^ Reeta Sahoo, Gagan Sahoo. Prácticas informáticas. Saraswati House Pvt Ltd. págs. 1–. ISBN 978-93-5199-433-6 .
- ^ Phillip A. Laplante; Seppo J. Ovaska; 2011. Diseño y análisis de sistemas en tiempo real: herramientas para el profesional. John Wiley & Sons. págs. 94–95. ISBN 978-1-118-13659-1 .
- ^ abc Hennessey y Patterson. Arquitectura informática: un enfoque cuantitativo . Morgan Kaufmann . ISBN 9780123704900.
- ^ Cetin Kaya Koc, 2008. Ingeniería criptográfica. Springer Science & Business Media. págs. 479–480. ISBN 978-0-387-71817-0 .
- ^ David A. Patterson; John L. Hennessy; 2008. Organización y diseño de computadoras: la interfaz hardware/software. Morgan Kaufmann. págs. 489–492. ISBN 978-0-08-092281-2 .
- ^ Harvey G. Cragon, 2000. Arquitectura e implementación de computadoras. Cambridge University Press. págs. 95–97. ISBN 978-0-521-65168-4 .
- ^ Baker Mohammad, 2013. Diseño de memoria integrada para sistemas multinúcleo y en chip. Springer Science & Business Media. págs. 11-14. ISBN 978-1-4614-8881-1 .
- ^ Gayde, William. "Cómo se diseñan y construyen las CPU". Techspot . Consultado el 17 de agosto de 2019 .
- ^ Vojin G. Oklobdzija, 2017. Diseño y fabricación digital. CRC Press. pág. 4. ISBN 978-0-8493-8604-6 .
- ^ "Jerarquía de la memoria".
- ^ ab Solihin, Yan (2016). Fundamentos de la arquitectura multinúcleo paralela . Chapman y Hall. pp. Capítulo 5: Introducción a la organización jerárquica de la memoria. ISBN 9781482211184.
- ^ Yan Solihin, 2015. Fundamentos de la arquitectura multinúcleo paralela. CRC Press. pág. 150. ISBN 978-1-4822-1119-1 .
- ^ Steve Heath, 2002. Diseño de sistemas integrados. Elsevier. pág. 106. ISBN 978-0-08-047756-5 .
- ^ Alan Clements, 2013. Organización y arquitectura de computadoras: temas y variaciones. Cengage Learning. pág. 588. ISBN 1-285-41542-6 .
- ^ "Evaluación del rendimiento de jerarquías de caché exclusivas" (PDF) . Archivado desde el original (PDF) el 2012-08-13 . Consultado el 2016-10-19 .
- ^ David A. Patterson; John L. Hennessy; 2017. Organización y diseño de computadoras Edición RISC-V: La interfaz de hardware y software. Elsevier Science. págs. 386–387. ISBN 978-0-12-812276-1 .
- ^ Stefan Goedecker; Adolfy Hoisie; 2001. Optimización del rendimiento de códigos numéricamente intensivos. SIAM. pág. 11. ISBN 978-0-89871-484-5 .
- ^ ab Solihin, Yan (2009). Fundamentos de la arquitectura de computadoras paralelas . Solihin Publishing. pp. Capítulo 6: Introducción a la organización jerárquica de la memoria. ISBN 9780984163007.
- ^ Harvey G. Cragon, 1996. Sistemas de memoria y procesadores segmentados. Jones & Bartlett Learning. pág. 47. ISBN 978-0-86720-474-2 .
- ^ David A. Patterson; John L. Hennessy; 2007. Organización y diseño de computadoras, edición revisada, tercera edición: La interfaz hardware/software. Elsevier. pág. 484. ISBN 978-0-08-055033-6 .
- ^ "Técnicas de software para sistemas multinúcleo con caché compartida". 24 de mayo de 2018.
- ^ "Un esquema de particionamiento de caché NUCA compartido/privado adaptativo para multiprocesadores de chip" (PDF) . Archivado desde el original (PDF) el 19 de octubre de 2016.
- ^ Akanksha Jain; Calvin Lin; 2019. Políticas de reemplazo de caché. Morgan & Claypool Publishers. pág. 45. ISBN 978-1-68173-577-1 .
- ^ David Culler; Jaswinder Pal Singh; Anoop Gupta; 1999. Arquitectura de computadoras paralelas: un enfoque de hardware/software. Gulf Professional Publishing. pág. 436. ISBN 978-1-55860-343-1 .
- ^ por Stephen W. Keckler; Kunle Olukotun; H. Peter Hofstee; 2009. Procesadores y sistemas multinúcleo. Springer Science & Business Media. pág. 182. ISBN 978-1-4419-0263-4 .
- ^ ab "Microarquitectura Intel Broadwell".
- ^ ab "Microarquitectura Intel Kaby Lake".
- ^ "La arquitectura del procesador Nehalem y las plataformas SMP Nehalem-EP" (PDF) . Archivado desde el original (PDF) el 11 de agosto de 2014.
- ^ "IBM Power7". Archivado desde el original el 21 de agosto de 2010.