Optimización de Rendimiento en Arquitectura de Computadores: Ejercicio Práctico de CPU y Caché
Clasificado en Informática
Escrito el en español con un tamaño de 6,34 KB
Problema de Arquitectura de Computadores: Configuración de CPU, Memoria y Caché
Se tiene un computador con una CPU que funciona a 2.5 GHz, con un bus de direcciones de 32 bits, y una memoria principal del tamaño máximo permitido para dicho bus (cada celda de memoria contiene 1 byte). La CPU dispone de una caché con un tamaño total de 128 Kilobytes, que tiene 512 líneas de caché (bloques).
En dicho computador se ejecuta un programa cuyo tamaño completo (desde la primera hasta la última instrucción) es de 8 veces el tamaño de la caché, y que además no contiene ningún bucle (es decir, al ejecutarse, se ejecuta su primera instrucción, luego la siguiente, y así sucesivamente, hasta que simplemente se llega a la última). El programa tampoco accede a memoria para leer ningún dato (solamente accede a la misma para leer las propias instrucciones). El tamaño del código máquina de cada instrucción en memoria es de exactamente 4 bytes (longitud fija), y cada instrucción se ejecuta exactamente en tres pasos, correspondientes cada uno a un ciclo de reloj.
Cuestiones a Resolver:
- Calcular el tamaño total de la memoria principal.
- Calcular el tamaño de cada línea (o bloque) de caché.
- Deducir el formato de la dirección de 32 bits (cómo se distribuyen sus 32 bits en los campos etiqueta, índice y desplazamiento).
- Justificar si la ejecución del programa muestra localidad espacial, temporal, ambas, o ninguna.
- Calcular el tiempo que tarda en ejecutarse el programa completo.
Nota Importante para el Cálculo de Tiempo:
Para simplificar al máximo el ejercicio, a pesar de haber caché, no se ha de tener en cuenta ningún tipo de diferencia en ciclos de ejecución de instrucciones con fallo o sin fallo de caché. Es decir, para el apartado e) no hay que tener en cuenta para nada el efecto de la caché sobre el tiempo de ejecución.
Solución Detallada al Ejercicio de Arquitectura de Computadores
a) Cálculo del Tamaño Total de la Memoria Principal
Dado que el bus de direcciones es de 32 bits, el tamaño máximo de la memoria direccionable es:
232 bytes = 4.294.967.296 bytes = 4 Gigabytes (GB)
b) Cálculo del Tamaño de Cada Línea (o Bloque) de Caché
La caché tiene un tamaño total de 128 Kilobytes (KB) y consta de 512 líneas (bloques). Por lo tanto, el tamaño de cada línea es:
128 KB / 512 bloques = (128 * 1024 bytes) / 512 bloques = 131072 bytes / 512 bloques = 256 bytes/bloque
c) Deducción del Formato de la Dirección de 32 Bits
Para una dirección de 32 bits, necesitamos determinar la distribución de los campos de desplazamiento, índice y etiqueta:
- Campo de Desplazamiento (Offset): Determinado por el tamaño del bloque de caché.
Cada bloque contiene 256 bytes. Como
256 = 28
, se necesitan 8 bits para el campo de desplazamiento. - Campo de Índice (Index): Determinado por el número de líneas de caché.
El número de líneas de caché es 512. Como
512 = 29
, se necesitan 9 bits para el campo de índice. - Campo de Etiqueta (Tag): El resto de los bits de la dirección.
Número total de bits de la dirección = 32 bits.
Número de bits del campo de etiqueta =
32 - (bits de índice + bits de desplazamiento) = 32 - (9 + 8) = 32 - 17 = 15 bits
.
Por lo tanto, el formato de la dirección es: Etiqueta (15 bits) | Índice (9 bits) | Desplazamiento (8 bits).
d) Justificación de la Localidad Espacial y Temporal
La ejecución del programa muestra las siguientes características de localidad:
- Localidad Temporal: No utiliza la localidad temporal. Esto se debe a que ninguna instrucción se ejecuta dos o más veces, ya que el programa no contiene bucles y se ejecuta de forma secuencial de principio a fin.
- Localidad Espacial: Sí aprovecha la localidad espacial. Tras ejecutarse una instrucción, la próxima en ejecutarse será precisamente la siguiente instrucción en orden espacial en la memoria. Dado que las instrucciones tienen un tamaño fijo de 4 bytes y los bloques de caché son de 256 bytes, cada vez que se carga un bloque de caché, se traen múltiples instrucciones que serán ejecutadas consecutivamente.
e) Cálculo del Tiempo de Ejecución del Programa Completo
Para calcular el tiempo total, seguimos los siguientes pasos:
- Tamaño del Programa:
El tamaño del programa es 8 veces el tamaño de la caché:
8 * 128 KB = 1024 KB = 1 MB
.En bytes:
1 MB = 1 * 1024 * 1024 bytes = 1.048.576 bytes
. - Número de Instrucciones:
Cada instrucción tiene un tamaño de 4 bytes. Por lo tanto, el número de instrucciones es:
1.048.576 bytes / 4 bytes/instrucción = 262.144 instrucciones
.Esto también se puede expresar como
220 bytes / 22 bytes/instrucción = 218 instrucciones
. - Número Total de Ciclos de Reloj:
Cada instrucción se ejecuta en 3 ciclos de reloj:
262.144 instrucciones * 3 ciclos/instrucción = 786.432 ciclos
.Esto también se puede expresar como
3 * 218 ciclos
. - Tiempo Total de Ejecución:
La CPU funciona a 2.5 GHz, lo que significa
2.5 * 109 ciclos por segundo
.Tiempo =
(Número total de ciclos) / (Frecuencia de la CPU)
Tiempo =
786.432 ciclos / (2.5 * 109 ciclos/segundo)
Tiempo =
0.0003145728 segundos
Convertido a milisegundos (ms):
Tiempo =
0.0003145728 * 1000 ms = 0.3145728 ms
Redondeando, el tiempo de ejecución es aproximadamente 0.31 ms.