¿Por qué necesitamos una memoria RAM si tenemos la caché y por qué necesitamos una caché si tenemos una RAM?

Todo es una jerarquía de proximidad y enredo con la CPU frente al tamaño y la velocidad de la memoria. A medida que los recuerdos se hacen más grandes, se vuelven más lentos.

La memoria más rápida no siempre se considera memoria

Los recuerdos más rápidos posibles son los registros de su CPU. Solo hay un número muy pequeño de registros, pero se ejecutan, en realidad, más rápido que el reloj de su CPU. Esto se debe a que tienen múltiples puertos, por lo que diferentes etapas de una tubería de CPU pueden acceder a ellos al mismo tiempo. Los registros son una parte inherente del funcionamiento interno de la CPU. En una arquitectura moderna de “carga / almacenamiento”, la CPU solo puede realizar operaciones directamente, como operaciones matemáticas y lógicas, en un registro. La razón de esto es simple: cualquier otro acceso a la memoria ralentizará la CPU.

Su CPU prácticamente solo sabe sobre registros y memoria principal. Pero la memoria principal es demasiado lenta, incluso la memoria DDR4 rápida y loca que tenemos hoy. Sin mencionar el hecho de que colocamos cuatro, seis, ocho, incluso más núcleos de CPU en un solo chip, todos accediendo a la misma memoria y E / S.

El caché de nivel 1 está perfectamente integrado

Entonces, para hacer que la memoria externa parezca más rápida, agregamos caché. Cada arquitectura de CPU moderna tiene un caché de nivel 1 estrechamente integrado con el diseño de la CPU. Estos generalmente son cachés de instrucciones y datos divididos, y estos, como los registros, pueden tener múltiples puertos. Siempre están muy estrechamente integrados, construidos básicamente dentro de cada núcleo de CPU. Por lo tanto, la CPU puede alcanzar el nivel 1 de caché muy rápido, pero aún no tan rápido como un registro. Cada núcleo de CPU normalmente tiene su propio caché de nivel 1. Esta es una memoria costosa, medida en transistores, y la velocidad depende de la proximidad a la CPU. La velocidad de la luz es un factor real en los diseños de memoria en estos días. Por lo tanto, el tamaño del caché L1 es limitado … un i7 típico tiene 32K de datos y 32K de caché de instrucciones.

Una nota al margen interesante … algunas arquitecturas de conjuntos de instrucciones de CPU (ISA) más antiguas como la x86 y x86–64 reciben un tratamiento extraño en una CPU moderna como la Intel Core i7 y regresan a un chip creado por una startup llamada NexGen de vuelta en los años 90. Las instrucciones x86 no son RISC. La Computadora de conjunto de instrucciones reducidas (RISC) es una especie de truco publicitario de los años 90, pero también es esencialmente una bolsa de trucos que los diseñadores de CPU han acumulado para hacer las instrucciones más simples y, por lo tanto, más fáciles de ejecutar en un solo ciclo. Los chips más antiguos usaban microcódigo, básicamente una pequeña subrutina en un lenguaje de máquina que solo se veía dentro del chip, para crear estas instrucciones. Los chips modernos desean ejecutar todas las instrucciones en un solo ciclo que no sean las instrucciones de carga / almacenamiento (por ejemplo, memoria principal).

En los modernos chips x86, las instrucciones complejas se traducen en múltiples instrucciones de tipo RISC. Estas llamadas microoperaciones pueden ser diferentes para cada generación de procesadores, por lo que no se hacen públicas. En algunas arquitecturas, ya sea la caché de instrucciones L1 o una caché de microoperación especializada, almacenará en caché las microoperaciones en lugar de las instrucciones estándar.

Los siguientes niveles de caché

El caché de nivel 2 está más alejado del núcleo de la CPU, pero puede funcionar directamente con la unidad de carga / almacenamiento de la CPU y el caché L1. Será absolutamente más lento que el caché L1.

En estos días, probablemente todavía tenga un caché L2 asociativo de 4 u 8 vías. Esa es una complejidad adicional basada en la forma en que funcionan los cachés, para ofrecer más eficiencia, lo cual es más fácil de hacer en un caché más pequeño que uno muy grande. Las memorias caché L2 en algunos chips antiguos eran de 2 MB, a veces de 4 MB, pero la memoria caché L2 en un Intel i7 es de solo 256K. ¿Por qué? Porque eso permite que sea mucho más rápido … está más cerca de la CPU y un caché más pequeño funciona más rápido, todo lo demás es igual.

Por supuesto, la memoria caché L2 pudo reducirse debido a la memoria caché de nivel 3 que se encuentra en muchas CPU modernas en estos días. El caché de nivel 3 en ese Intel i7 es de 8 MB, en otros es de 12 MB o 20 MB. Esa es la otra clave aquí … cada núcleo de CPU en un i7 tiene su propio caché L1 y L2. AMD tiene algunas arquitecturas en las que los pares de núcleos comparten la memoria caché FPU y L2. Pero el caché L3 simple, asociativo de conjunto único es más lento, más alejado de cada núcleo de CPU, compartido por todos, y se puede escalar en función de la velocidad y el número de núcleos de CPU en un chip.

El caché L1 que funciona de la manera en que lo hace hoy en día el caché L1 debe estar en el chip, debido a su enredado con la CPU. En la década de 1980, los sistemas tenían caché L2 en el bus del procesador principal, funcionando a velocidades del bus del procesador principal. Todavía más rápido que DRAM, pero también complica el acceso a DRAM. En algún momento, las compañías de CPU construyeron buses especiales “backside” para caché L2, ofreciendo buses más rápidos y anchos que el bus principal de propósito general.

Hoy, por supuesto, los procesadores realmente no tienen un bus principal. Tienen controladores de memoria en chip que controlan directamente la DRAM DDR3 o DDR4 y tienen varios enlaces de alta velocidad (PCIe, QuickPath, Hypertransport, etc.) que van punto a punto entre dispositivos. Esta arquitectura permitió una memoria mucho más rápida, pero también significa que cada caché debe estar en el chip.

Pero, por favor, ¿no podemos tener caché?

Bueno, piensalo. Si solo tienes registros, no es muy divertido. Si solo necesitara 64K de memoria, estaría bien con ese caché L1 del i7. Pero en realidad no puedes usar el caché de esa manera. entonces simplemente usarías esa memoria muy rápida como RAM estática, y eso sería todo. O tal vez 256K es suficiente … si es así, el chip podría usar toda la memoria caché de L2 reconfigurada como RAM estática. Pero va a ralentizar la CPU a menos que mantenga la caché L1.

En los sistemas informáticos integrados, los diseños más simples harán exactamente esto: incluirán una CPU con una pequeña cantidad de RAM estática, en lugar de caché. Esa RAM estará profundamente en el chip, estrechamente acoplada a los núcleos de la CPU, posiblemente con múltiples puertos, etc. Pero, por supuesto, cuando haces una CPU de $ 5 o una CPU de $ 50 en lugar de una CPU de $ 500, tienes que hacer algo compensaciones de todos modos. De modo que el chip de $ 5 solo puede funcionar a 50MHz, el chip de $ 50 tal vez solo a 1GHz, por lo que no son tan agresivos en velocidad de todos modos. Aunque el chip ARM de cuatro núcleos de menos de $ 50 que utilizo en algunos de mis diseños tiene sus propios cachés L1 y L2 y 512 MB de memoria DDR3 de 64 bits de ancho de lo que pensé en el sistema. Esto es para el procesamiento en red, una carga más ligera que su PC típica, un trabajo más pesado que su horno tostador.

La memoria caché es más rápida y tenía una latencia más baja en comparación con la RAM.

Digamos que ahora tenemos DDR 4 de 3.8GHz con CPU de 3.8GHz, puede parecer que la velocidad de la memoria es la misma con la CPU, por lo tanto, puede reemplazar el caché, ¿verdad?

Bueno, no fue el caso.

Lo explicaré de manera simple, asumiendo una máquina con solo 1 nivel de caché, y funciona a toda velocidad.

La velocidad de RAM es aproximadamente la velocidad de los datos que puede mover de acuerdo con su velocidad de bits que es 64. Entonces, DDR4 a 3.8GHz tendrá una velocidad de datos de 3.8GHz x 64 bits = 24.3 GB por segundo. Multiplique eso por la cantidad de canales que dará como resultado el ancho de banda teórico máximo de su RAM.

Sin embargo, la memoria caché es mucho más rápida que eso, puede alcanzar la velocidad de 200 GB / s. La memoria caché generalmente buscará datos e instrucciones de la RAM para una ejecución rápida y luego devolverá los datos a la RAM. Dado que la velocidad de la memoria caché es mucho más rápida en comparación con la velocidad de la RAM, la ejecución de datos se realizará más rápido en la memoria caché.

La RAM en el sistema moderno generalmente se encuentra a 2–3 cm de la CPU. Esa es una larga distancia considerando la velocidad de la CPU moderna. La velocidad de la electricidad está cerca de la velocidad de la luz, por lo tanto, es de 30.000.000.000 cm / s. Digamos que la RAM se encuentra a 3 cm de la CPU, para que la CPU solicite datos de 8 bytes de la RAM, hay una distancia que debe viajar. La señal llegará a la RAM 0.0000000001s más tarde, esperando que la RAM recupere datos, digamos que tenemos una RAM muy rápida que puede recuperar datos en 0.00000001s, y el viaje de regreso de 0.0000000001 a un total de 0.0000000102s que nos parece pequeño, pero por eso vez que nuestra CPU de 3.8GHz ya se saltó muchos ciclos solo para acceder a 8 bytes de datos. Esto desperdiciará efectivamente el poder de procesamiento.

Aquí la memoria caché llena el vacío para que la CPU pueda procesar los datos en fragmentos sin tener que esperar RAM para entregar los datos. Por ejemplo, obtenga 1 MB de los datos en caché y trabaje y luego recupere los siguientes MB. Dado que la memoria caché se encuentra en la CPU, los datos están disponibles instantáneamente ya que la CPU lo solicita, por lo tanto, se llama memoria caché a toda velocidad.

En 1998, Intel lanzó el procesador Covington Celeron sin caché L2, que era muy lento.

Un buen día, podríamos tener varios GB de caché ejecutándose en la CPU. Puede costar astronómicamente, pero el sistema podría ejecutar el sistema operativo 2017 y las aplicaciones sin RAM si el fabricante lo permite.

Esta es la forma más sencilla de pensarlo:

La memoria caché proporciona un acceso más rápido, pero no puede poner todo en la memoria caché.

La RAM tiene todo lo que necesita, pero acceder a ella es más lento (generalmente ubicado más lejos de donde realmente se necesita) que acceder a la caché.

RESPUESTA COMPLETA

Cuando una computadora ejecuta un programa, el microprocesador carga el archivo ejecutable del programa en la RAM de la computadora. Algunos programas contienen una gran cantidad de datos que deben cargarse en la RAM para funcionar correctamente. Si no hay suficiente espacio en la memoria, esto puede hacer que la computadora funcione lentamente. El sistema operativo de la computadora necesita una cantidad suficiente de memoria para mantener la computadora en funcionamiento. Además del sistema operativo, muchos usuarios operarán múltiples programas a la vez, como un navegador web, un programa de correo electrónico y un programa de procesamiento de texto. Cada uno de estos programas ocupará parte de la memoria de la computadora. Cuanta más memoria RAM tenga una computadora, más eficientemente podrán ejecutarse los programas.

Costo / tamaño / compensación de rendimiento:

La RAM dinámica es económica y muy espaciosa, pero no muy rápida (mucho más lenta que la CPU).

La memoria caché RAM (hoy en día integrada en la CPU) es costosa, no tan espaciosa (debido al tamaño, la complejidad pero también al costo), pero muy rápida.

Como la memoria caché RAM es relativamente pequeña, el administrador de caché necesita predecir de manera inteligente lo que se necesita antes de que sea necesario, de modo que la CPU se alimente continuamente con código y datos. También necesita administrar la escritura de datos en la RAM, de modo que con el tiempo se traslade a la RAM más lenta.

Los cachés generalmente tienen varias etapas con un rendimiento cada vez más alto, pero también menos espacio, cuanto más cerca está de la CPU.