Propósito de la memoria caché de instrucciones

Un procesador está trabajando a 100 MHz. La memoria de programa interconectada puede funcionar solo a un máximo de 25 MHz. ¿Hay alguna forma en que podamos obtener una instrucción en un ciclo de reloj del procesador? Leí que el caché de instrucciones se puede usar para este propósito. ¿Cómo es que la memoria caché de instrucciones realmente hace que las instrucciones se obtengan más rápido, mientras que no podemos aumentar la velocidad de la memoria lenta?

un caché es solo una parte de él, la captura previa y el búfer de captura previa son un factor. cache simplemente hace que parte de la información sea más rápida para accesos repetitivos o lineales. pero su procesador aún se detiene si solo obtiene una instrucción a la vez, incluso con un caché (dependiendo de dónde esté el caché, los buses, etc.).

Respuestas (2)

Los procesadores tienen una canalización de obtención/ejecución que obtiene, decodifica y ejecuta instrucciones. Los diferentes procesadores tienen un número diferente de niveles de canalización. Se muestra una tubería de tres etapas. Cada instrucción requiere tres ciclos de reloj para ejecutarse, pero debido a que las etapas pueden estar en paralelo, la ejecución neta es de 1 reloj/instrucción para el procesador.

Obtener/Ejecutar canalización

Idealmente, nos gustaría que los programas se ejecuten lo más rápido posible. Pero esto no es rentable. Se muestra una jerarquía de memoria típica.

Jerarquía de memoria

La memoria más rápida son los registros. Si tiene muchos registros de propósito general, el programa puede ejecutarse desde los registros.

La localidad significa que la mayoría de las búsquedas de instrucciones serán secuenciales. La única vez que no es cuando se encuentra una rama. El contenido actual de la canalización de 3 etapas se debe desechar para que se puedan cargar las nuevas instrucciones. Si la sucursal es pequeña, el contenido puede estar en los registros. Perdemos 3 ciclos de reloj, mientras que la nueva instrucción se obtiene de los registros. El procesador se detiene hasta que hay una nueva instrucción para ejecutar. Se insertan ciclos de reloj adicionales.

Si no está en los registros, la dirección se envía al caché. El caché en chip es una pequeña cantidad de memoria de alta velocidad. Si es un golpe. El caché en chip es de 1 o 2 ciclos de reloj para acceder a la siguiente instrucción. Todavía 1'ish ciclos de reloj/instrucciones.

Saltamos múltiples niveles de caché. Solo otro nivel de almacenamiento en búfer. Ningún punto real a 100MHz. Las cachés L2 son solo pequeñas cantidades de SRAM rápida.

Si falla, la memoria caché debe solicitar instrucciones de la memoria principal. La memoria principal es una gran cantidad de memoria barata. A 25 MHz, cada instrucción requeriría 4 ciclos de reloj para obtenerla. La instrucción se lee en la caché y el procesador. 4 relojes para buscar y 3 para ejecutar.

La localidad significa que el procesador también necesitará la siguiente instrucción. El controlador de memoria está configurado para leer un bloque completo de ubicaciones adyacentes de DRAM a la memoria caché. El contador del programa del procesador solicitará la siguiente ubicación, la pérdida de memoria caché, pero el controlador de memoria ya está obteniendo esta segunda ubicación de la memoria principal, por lo que la demora general es menor.

Finalmente, si el programa no está en la memoria principal, debe cargarse en la DRAM desde el almacenamiento. Gran impacto en el rendimiento, ya que el almacenamiento es muy lento...

En última instancia, 1 ciclo de reloj/instrucción depende del programa y del compilador/programador.


Editar...

El caché tiene que ser cargado. Por lo general, los controladores DRAM tienen capacidad de ráfaga, donde la primera lectura toma 4 ciclos, pero la dirección DRAM inicial ya está proporcionada y las lecturas posteriores toman menos de 4, digamos 2 ciclos. Un procesador de canalización de tres etapas tiene que esperar 7 ciclos de reloj para obtener la primera instrucción (en el peor de los casos: bifurcación, canalización basura: pérdida de caché, recuperación de DRAM), pero 2 o 3 para la siguiente instrucción que ya está en camino a el caché

Muchos programas no son secuenciales sino bucles o subrutinas reutilizadas, donde el caché (y los niveles de caché) pueden mejorar el rendimiento. Si un programa fuera secuencial, el caché no tendría ningún propósito. El procesador funcionaría a la velocidad de acceso de lectura de DRAM.

Sin canalización, código secuencial, sin capacidad de ráfaga, entonces su procesador funciona a 25 MHz, con 3 estados de espera insertados en cada instrucción. Canalización, código loopey (que cabe en registros de 100 MHz o caché de 100 MHz) y capacidad de lectura de DRAM en ráfagas significa que el procesador funciona a 100 MHz y 1 ciclo de reloj/instrucción.

Entonces, si el caché funciona a aproximadamente 100 MHz, ¿el procesador puede obtener instrucciones en un ciclo? ¿Significa que el caché ya ha almacenado más de una instrucción en él, desde la memoria a 4 ciclos/instrucción, antes de que el procesador comience a buscar instrucciones?
Pero si el caché también necesita 4 ciclos para obtener una instrucción de la memoria, ¿cómo es útil al final? Si hay 4 instrucciones, se necesitarán 16 ciclos para copiar a la memoria caché, aunque el procesador puede obtener una instrucción en un ciclo de la memoria caché.
Correcto. El beneficio se aplica la próxima vez que ejecute las mismas instrucciones cuando todavía están en el caché y se pueden recuperar en un ciclo. También hay algunos tipos de memoria en los que se necesitan (por ejemplo) 4 ciclos para recuperar, pero obtienes 4 o más instrucciones a la vez. Que se puede agregar al caché.
"pero recibes 4 o más instrucciones a la vez" - ¿Eso se llama modo ráfaga o algo así? :-) @pjc50
Sí, exactamente eso: modo de ráfaga de DRAM.

En palabras del padre Ted , el caché de instrucciones es pequeño pero la memoria está muy lejos.

La memoria de 25 MHz tomará al menos cuatro de los ciclos del procesador de 100 MHz. La memoria caché de instrucciones en realidad no hace que el acceso a la memoria principal sea más rápido, pero devolverá valores inmediatamente en lugar de después de un retraso. La ventaja de esto está en la segunda y subsiguientes veces que el procesador intenta acceder a una dirección en particular. Como cuando se ejecuta un bucle.

Entonces, ¿si es un programa sin ningún bucle? Si el programa solo se ejecuta secuencialmente de arriba a abajo de inmediato. ¿No habrá ninguna ventaja al usar el caché?
@MeenieLeis correcto, pero en la práctica, ¿cuántos programas simplemente se ejecutan secuencialmente sin bifurcaciones ni bucles? Muy pocos que hacen algo útil.