¿Cómo lee la CPU los datos de la RAM?

En una computadora de uso general (como una PC normal), ¿cómo lee CPUel archivo RAM, asumiendo que primero lee desde el archivo Cache.

Suponiendo que cachees una memoria caché asociativa de conjuntos de n vías . De nuevo, tendríamos L1 Cachey L2 Cache.

  1. Por lo general, CPUlee una cantidad blockde datos del archivo RAM. Así que estos blockspueden ser varios words. ¿No cuesta esto muchos ciclos de tiempo/reloj? ¿Cómo es/puede hacerse esto más eficiente? (No estoy hablando de usar caché aquí, sino de la transferencia de datos)

  2. RAMes bastante más lento que el CPU, ¿cómo se las CPUarregla el todavía para ser eficiente?

a menudo, los datos que se entregan a la CPU son grandes porciones y se procesan muy rápidamente y luego la gran porción se mueve a otro lugar o se descarga después del procesamiento. La transmisión real de datos no es tan rápida como la CPU en la mayoría de los casos
esto es tarea?

Respuestas (2)

Hay rendimiento y latencia.

En núcleos muy simples y lentos, la memoria caché se ejecuta a la misma velocidad que la CPU y puede proporcionar datos en 1 ciclo, por lo que los datos están disponibles de inmediato sin detenerse. Cuando hay una pérdida de caché, los datos se toman de la memoria principal y la latencia inicial puede ser de más de 10 ciclos. Lo bueno es que una vez que los primeros datos están disponibles, los siguientes datos se pueden obtener rápidamente, de ahí la idea de las transferencias en ráfaga y los rellenos de caché. La CPU solo necesita un byte, o una palabra de 32 bits, pero se transfieren 32 o 64 bytes a la vez desde la memoria al caché.

En las CPU más avanzadas, las que tienen reloj L1, L2, DRAM y gigahercios, incluso el contenido de la memoria caché L1 no se puede obtener de inmediato. Para la instrucción, existen mecanismos para predecir el flujo de instrucciones y obtener instrucciones por adelantado: Obtener continuamente direcciones consecutivas, a menos que la instrucción sea una bifurcación, una llamada,... Para datos, es más complejo. Al usar canalización, algunas CPU pueden tener varias transferencias de datos pendientes antes de detenerse. La verdadera solución actual para mitigar las largas latencias es la ejecución fuera de orden, la CPU hace todo el trabajo posible, incluso ejecutando instrucciones que no están en el orden del programa, para ocultar la larga latencia de instrucciones como lecturas y escrituras de datos.

Probablemente valdría la pena mencionar primero la obtención del bloque de caché del fragmento crítico (p. ej., obtener primero el fragmento con los datos solicitados; técnicamente, el orden de criticidad no necesita ser el mismo que el orden de solicitud, y luego el resto del bloque) y el reinicio anticipado (es decir, , solo se detiene hasta que los datos solicitados estén disponibles). Además, la latencia adicional de la ráfaga es relativamente baja (p. ej., DDR3 de 1 GHz tarda 4 ns en transmitir las 8 transferencias en una ráfaga en comparación con los más de 50 ns típicos para iniciar el acceso). Asumiendo la localidad, uno de los otros fragmentos proporciona datos para lo que sería otro fallo.
  1. Sí. Mediante el uso de RAM más eficiente, como la memoria que admite el modo de ráfaga.

  2. Mediante el uso de caché, que es una memoria RAM más rápida, junto con un controlador de memoria que continúa leyendo de la RAM mientras la CPU está ocupada ejecutando lo que está en la memoria caché.

También vale la pena señalar que las "PC normales" modernas usan múltiples niveles de almacenamiento en caché, y la lógica utilizada para determinar qué se almacena en caché (especialmente en el caso de los algoritmos modernos de lectura anticipada) varía de un producto a otro y no es trivial. También parte del software de escritura a menudo incluye optimizaciones que ayudan a la CPU a acceder a la memoria de manera predecible/eficiente. Esta es ciertamente una pregunta muy amplia.