Está en la página 1de 43

CAPITULO 4

Problema 1:
Estimar las velocidades pico de los procesadores que se describen en el capitulo utilizando los datos respecto
a las frecuencias de reloj, instrucciones que se retiran por ciclo y unidades funcionales que se indican en el
texto.

Solución:

Procesador Frecuencia Finalizan / Ciclo Velocidad Pico


MIPS R100 275 5 1375
Ultra Sparc II 250 6 1500
HP PA 8500 400 6 2400
DEC Alpha 21264 600 8 4800
Power PC 620 200 4 800
AMD Athlon K7 1200 3 3600
Pentium 4 1400 3 4200

Problema 2:
Se dispone de una aplicación de procesamiento de señal que debe repetir 3000 veces el cálculo ( ) =
( ), ( + ), ( + ), ( + ) para cada muestra de la señal ( ) = , … , − que ocupa 4
bytes, y () es una función determinada. El código por 12 instrucciones de 32 bit que se repiten para cada
muestra. De las instrucciones, 4 son de acceso a memoria para leer/escribir datos, 4 son instrucciones de
operaciones aritméticas, y 4 son de control del bucle, actualización de punteros, etc.

Estimar el tiempo mínimo que tardaría en ejecutarse esa aplicación (suponemos que no hay fallos de caché
para instrucciones o datos) en los siguientes microprocesadores:

- UltraSPARC III 600 MHz


- Alpha 21264 450 MHz
- MIPS R10000 180MHz
- Power PC G5 800MHz

Solución:

UltraSPARC III:

Ciclos de acceso a memoria = 4 ∗ = 2


Ciclos de instrucciones aritméticas = 4 ∗ = 2


Ciclos de control y actualización = 4 ∗
= 4

= º ∗ ∗ º

1
= 8∗ ∗ 3000 = 40
600

1/6
Alpha 21264:

Ciclos de acceso a memoria = 4 ∗ = 1


Ciclos de instrucciones aritméticas = 4 ∗ = 2


Ciclos de control y actualización = 4 ∗
= 4

= º ∗ ∗ º

1
=7∗ ∗ 3000 = 46.6
450

MIPS R10000:

Ciclos de acceso a memoria = 4 ∗ = 1


Ciclos de instrucciones aritméticas = 4 ∗
= 2


Ciclos de control y actualización = 4 ∗
= 2

= º ∗ ∗ º

1
=5∗ ∗ 3000 = 83.3
180
*Nota: Los ciclos de acceso a memoria, instrucciones aritméticas, control y actualización del MIPS R10000 y del PowerPC G5 tienen que ser confirmados
por el ingeniero.

2/6
Problema 3:
Utilizar las instrucciones cmovcc y setcc para reducir el número de instrucciones de salto en el siguiente
bucle:
if (A>B) then (X=1); else { if (C<D) then (X=2); else (X=3)}

Solución:

Código Original:

Código Optimizado:

3/6
xor %al, %al
xor %bl, %bl
xor %cl, %cl

cmpl B, A // si (A>B), al=1


setgtb %al
cmpl S1, %al
cmoveq S1, X // si al=1, X=1
neg al

cmpl C, B // si (D>C), bl=1


setgtb %bl
and %al, %bl
cmpl S1, %bl
cmoveq S2, X // si bl=1, al=1, bl and al=1  X=2

cmpl C, D // si (D<=C), cl=1


setleb %cl
and %al, %cl
cmpl S1, %cl
cmoveq S3, X // si cl=1, al=1, cl and al=1  X=3

Banderas
Operación
al bl cl
1 0 0 X=1
0 1 0 X=2
0 0 1 X=3

Problema 4:
Para el siguiente código optimizar las instrucciones usando setccb.

if (A<B) ebx=C; else ebx=D

Solución:

Código Original:

cmpl B, A
jge LO
mov1 c, %ebx
jmp L1
L0: mov1 D, %ebx
L1:

4/6
Código Optimizado:

xorl %ebx, %ebx


cmpl B, A
setgeb %bl
decl %ebx
andl (C-D), %ebx
addl D, %ebx

Si A>=B, setgeb hace bl=1, dec hace ebx=0, (ebx and C-D)=0  ebx=0, ebx+D=0+D=D  ebx=D.
Si A<B, setgeb hace bl=0, dec hace ebx=0xFFFFFFFF, (ebx and C-D)=C-D  ebx=C-D, ebx+D=C-D+D=C  ebx=C.

Problema 5:
Utilizar las instrucciones con predicado setccb y cmovcc para reducir las instrucciones en:

if (A<=B) then cbx=2; else cbx=4

Solución:

Código Optimizado:

xorl %al, %al


cmpl A, B
setgeb %al // al=1 si A<=B, al=0 si A>B
cmpl S1, %al
cmoveq S2, %cbx // si al=1 (A<=B)  cbx=2
cmpl S0, %al
cmoveq S4, %cbx // sia al=0 (A>B)  cbx=4

5/6
Problema 6:
Utilizar las instrucciones con predicado del repertorio IA-32 para reducir las instrucciones de salto
condicional en la secuencia.

if ((X[0] mod 2)==0) then


for i=1 to 2 do
if ((X[i] mod 2)==0) then X[i]=2*X[i]
else if (X[0]<0) then X[i]=0;

6/6
PROBLEMAS
Capitulo 4
Problema 1

En un computador el bus de memoria principal es de 100 MHz y 64 bits de datos.


Si el ciclo de lectura del bus necesita dos ciclos de reloj, ¿cuál sería el tiempo máximo
de acceso que debería tener la memoria para que no se necesiten introducir estados
de espera?
Suponga que quiere cargar desde la memoria una línea de cache constituida por 64
bytes ¿Cuál es la ganancia en ancho de banda que se obtiene si se utiliza acceso en
modo burst con relación a acceso palabra a palabra si el tiempo de acceso de la
memoria es de 45 ns?
Problema 1

■ El periodo de ciclo de lectura de bus necesita 2 ciclos de reloj, entonces el tiempo


máximo de acceso debe ser:

𝑁𝑐𝑖𝑐𝑙𝑜𝑠 2
𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 𝑁𝑐𝑖𝑐𝑙𝑜𝑠 ∗ 𝑇𝑏𝑢𝑠 = = 6
= 20𝑛𝑠
𝐹𝑏𝑢𝑠 100 ∗ 10

El enunciado dice que el tiempo de acceso a memoria es de 45ns, entonces sería


necesario introducir 3 ciclos de espera para que la memoria devuelva los datos
solicitados.
Problema 1

Entonces el tiempo mínimo de acceso a la memoria debe cumplir que:


𝑁𝑐𝑖𝑐𝑙𝑜𝑠 − 1 𝑁𝑐𝑖𝑐𝑙𝑜𝑠
< 𝑇𝑚𝑒𝑚 = 45𝑛𝑠 <
𝐹𝑏𝑢𝑠 𝐹𝑏𝑢𝑠
Siendo 𝐹𝑏𝑢𝑠 = 100 𝑀𝐻𝑧, el tiempo mínimo de acceso a la memoria será de 5 ciclos.
Al ser el bus de 64 bits, para acceder a 64 bytes se necesitarán 8 accesos a memoria,
por lo tanto, el tiempo necesario para realizar todas las lecturas sería:
𝑇 = 𝑁𝑎𝑐𝑐𝑒𝑠𝑜𝑠 ∗ 𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 8 ∗ 50 = 400𝑛𝑠
Problema 1

SI es posible añadir un modo burst para leer los 64 bytes, el numero de ciclos
necesario sería 5-1-1-1-1-1-1-1, es decir 5 ciclos para la primera palabra y 1 ciclo para
las demás, por lo tanto el tiempo necesario para la lectura sería:
𝑁𝑏𝑢𝑟𝑠𝑡 5 + 1 + 1 + 1 + 1 + 1 + 1 + 1
𝑇𝑏𝑢𝑟𝑠𝑡 = = 6
= 120𝑛𝑠
𝐹𝑏𝑢𝑠 100 ∗ 10
Problema 1

Entonces se puede calcular la ganancia en velocidad como:


𝑇 400
𝑆= = = 3.33
𝑇𝑏𝑢𝑟𝑠𝑡 120
Problema 2

Un computador dispone de un procesador de 64 bits y utiliza una memoria cache con


correspondencia directa de 64 Kbytes y una memoria principal de 32 Mbytes.
■ a) Teniendo en cuenta que cada línea de cache es de 128 bytes, indique la posición
de cache que ocupa la instrucción que se encuentra en la dirección de memoria
0x0110ab48.
■ b) ¿Y si, con los mismos datos, la memoria cache fuese asociativa por conjuntos de
4 vías?
Problema 2

Reuniendo la información del enunciado


■ Memoria principal de 32 Mbytes = 225 bytes
■ Memoria caché de correspondencia directa de 64 Kbytes = 216 bytes
Considerando esto, será necesario utilizar direcciones de 25 bits para la memoria RAM
y 16 bits para la memoria caché para referirse a cada dirección en estas memorias.
Problema 2

Si cada línea de caché son de 128 bytes, es decir 27 bytes, entonces el número de
líneas de caché serán:
𝑡𝑎𝑚𝑎ñ𝑜 𝑐𝑎𝑐ℎé 216
𝑁𝑙𝑖𝑛𝑒𝑎𝑠 = = 7 = 29
𝑡𝑎𝑚𝑎ñ𝑜 𝑝𝑜𝑟 𝑙𝑖𝑛𝑒𝑎 2
Por lo tanto habrán 512 líneas en el caché, donde se necesitarían 9 bits para designar
una línea.
Problema 2

Al ser la memoria caché de correspondencia directa, los 7 bits menos significativos en


la memoria RAM indicarán la posición de un byte en una línea.
Los siguientes 9 bits se usan para indicar la línea de caché en donde se almacena la
línea de memoria principal.
Los 9 bits restantes se usarán como campo marca para poder identificar la línea
concreta de memoria principal que se introdujo en la línea de caché.
Problema 2

La siguiente figura muestra la disposición del uso de los bits en las direcciones de
memoria y cache, donde la marca y la línea de cache son de 9 bits cada uno, y Desp. es
la posición del byte dentro de una línea.

Marca Línea Desp. Dirección de memoria

Línea Desp. Dirección de cache


Problema 2

Entonces, si un byte se encuentra en la dirección de memoria 0x0110ab48, podemos


saber su posición en el caché por lo expuesto anteriormente.

Repr. Dir. RAM Marca Línea Desp.


BIN 1 0001 0000 1010 1011 0100 1000 1 0001 0000 1 0101 0110 100 1000
HEX 0x0110ab48 0x110 0xab48

Entonces un byte en la dirección dicha estaría situado en la dirección 0xab48 en el


caché.
Problema 2

Si la memoria cache fuese asociativa de 4 vías, el número de conjuntos posibles sería


29
= 27 conjuntos, entonces se necesitarían 7 bits para indicar el conjunto y 11 bits de
4
marca.

Marca Conjunto Desp. Dirección de memoria

Conjunto Vía Desp. Dirección de cache


Problema 2

La dirección de memoria contendría el conjunto y la ubicación del byte en la línea, pero


no la vía como podremos observar en la siguiente tabla.

Repr. Dir. RAM Marca Conjunto Vía Desp.


BIN 1 0001 0000 1010 1011 0100 1000 1000 1000 0010 101 0110 XX 100 1000
HEX 0x0110ab48 0x442 0xa??8

A priori no podemos saber la línea del conjunto en donde se alojará nuestro dato al no
poseer la información de la vía.
ARQUITECTURA DE COMPUTADORAS

PROBLEMAS CAP 4
Arocupita Zambrano Alejandro
Chambi Serrano Hernán
Huarza Hincho Oscar
Maldonado Apaza Jesús
Quispe Atajo Jesús
Revollo Flores Mario
PROBLEMA 3
Disponemos de una computadora basado en Pentium II, que
dispone de una memoria de cache de segundo nivel de
256Kbytes asociativa por conjuntos de 4 vías, y una memoria
principal de 64 Mbytes.

Si las líneas de cache son de 32bytes, indique las posiciones que


ocupa en las memorias de caches una instrucción de programa
que se encuentra en la posición de memoria 0x0012aac4.

Pentium II (Las caches internas están asociadas por un conjunto


de 2 vías de 16Kbytes para datos y 16Kbytes para instrucciones)
SOLUCIÓN:
Los bits que constituyen las direcciones en cada una de las memorias son:

Memoria principal: 64𝑀𝑏𝑦𝑡𝑒𝑠 = 226 𝑏𝑦𝑡𝑒𝑠(26 bits de los 32 que genera el procesador para
codificar las direcciones)

Memoria Cache L1(2 vías) 16𝐾𝑏𝑦𝑡𝑒𝑠 = 214 𝑏𝑦𝑡𝑒𝑠 y Lineas de 32𝑏𝑦𝑡𝑒𝑠 = 25 𝑏𝑦𝑡𝑒𝑠
Cada una de sus líneas se direccionan mediante 14 bits, los 5 menos significativos indican el
desplazamiento del dato dentro de la línea.

Calculamos numero de líneas que hay en la cache:


𝑡𝑎𝑚𝑎ñ𝑜 𝑐𝑎𝑐ℎ𝑒 𝐿1 214
𝑁𝑙𝑖𝑛𝑒𝑎𝑠 𝑐𝑎𝑐ℎ𝑒 𝐿1 = = 5 = 29 = 512
𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑐𝑎𝑑𝑎 𝑙𝑖𝑛𝑒𝑎 2

Calculamos el numero de conjuntos


𝑁𝑙𝑖𝑛𝑒𝑎𝑠 𝑐𝑎𝑐ℎ𝑒 𝐿1 29
𝑁𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜𝑠 𝑐𝑎𝑐ℎ𝑒 𝐿1 = = = 28 = 256
𝑁𝑣𝑖𝑎𝑠 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜 2
Donde los 5 bits menos significativos corresponden a la posición de byte dentro de una línea,
los 8 siguientes el conjunto en que se introduce la línea, y el resto se usa como marca.
Memoria
8 5 Principal
Marca Byte
Conjunto
1 Memoria
8 5
Cache

14
Correspondencia entre direcciones de memoria y las de cache L1
Marca, conjunto y desplazamiento dentro de la línea de la cache L1 de la dirección de memoria

REPRESENTACION DIRECCION RAM MARCA CONJUNTO VIA DESP


BINARIO 00 0001 0010 1010 1010 1100 0100 0000010010101 01010110 X 0 0100
HEX 0x0012aac4 0x0095 0x15?4
Los bits que constituyen las direcciones en cada una de las memorias son:

Memoria principal: 64𝑀𝑏𝑦𝑡𝑒𝑠 = 226 𝑏𝑦𝑡𝑒𝑠(26 bits de los 32 que genera el procesador para
codificar las direcciones)

Memoria Cache L2(4 vías) 256𝐾𝑏𝑦𝑡𝑒𝑠 = 218 𝑏𝑦𝑡𝑒𝑠 y Lineas de 32𝑏𝑦𝑡𝑒𝑠 = 25 𝑏𝑦𝑡𝑒𝑠
Cada una de sus líneas se direccionan mediante 18 bits, los 5 menos significativos indican el
desplazamiento del dato dentro de la línea.

Calculamos numero de líneas que hay en la cache:


𝑡𝑎𝑚𝑎ñ𝑜 𝑐𝑎𝑐ℎ𝑒 𝐿1 218
𝑁𝑙𝑖𝑛𝑒𝑎𝑠 𝑐𝑎𝑐ℎ𝑒 𝐿1 = = 5 = 213 = 8192
𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑐𝑎𝑑𝑎 𝑙𝑖𝑛𝑒𝑎 2

Calculamos el numero de conjuntos


𝑁𝑙𝑖𝑛𝑒𝑎𝑠 𝑐𝑎𝑐ℎ𝑒 𝐿1 213
𝑁𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜𝑠 𝑐𝑎𝑐ℎ𝑒 𝐿1 = = 2 = 211 = 2048
𝑁𝑣𝑖𝑎𝑠 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜 2
Donde los 5 bits menos significativos corresponden a la posición de byte dentro de una línea,
los 11 siguientes el conjunto en que se introduce la línea, y el resto se usa como marca.
Memoria
11 5 Principal
Marca Byte
Conjunto
2 Memoria
11 5
Cache

18
Correspondencia entre direcciones de memoria y las de cache L2
Marca, conjunto y desplazamiento dentro de la línea de la cache L2 de la dirección de memoria

REPRESENTACION DIRECCION RAM MARCA CONJUNTO VIA DESP


BINARIO 00 0001 0010 1010 1010 1100 0100 00 0001 0010 101 0101 0110 XX 0 0100
HEX 0x0012aac4 0x012 0x2ab?4
PROBLEMA 4
En un computador, la cache interna del procesador tiene un
tiempo de acceso de 2.5ns y una tasa de aciertos del 80%, y la
memoria principal tiene un tiempo de acceso de 10ns. Suponga
que dispone de una memoria cache SRAM con un tiempo de
acceso de 5ns.
a) ¿Qué taza de fallos tendrá para que el tiempo de acceso
medio a memoria se reduzca con respecto a la situación
anterior?
b) ¿Es posible obtener un tiempo de acceso medio de 3.7ns?
c) ¿Cuál es el mínimo tiempo de acceso medio que se puede
conseguir?
SOLUCIÓN:
El tiempo de acceso al sistema de memoria constituido por la memoria cache interna (L1) y la
memoria principal DRAM es igual a:
𝑇𝐿1−𝐷𝑅𝐴𝑀 = 𝑎𝑐𝑎𝑐ℎ𝑒 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + (1 − 𝑎𝑐𝑎𝑐ℎ𝑒 )(𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 )
𝑇𝐿1−𝐷𝑅𝐴𝑀 = 0.8 2.5 + 1 − 0.8 2.5 + 10 = 4.5𝑛𝑠
Donde:
• 𝑎𝑐𝑎𝑐ℎ𝑒 es la tasa de aciertos de la memoria L1.
• 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 es el tiempo de acceso a la memoria de cache L1
• 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 es el tiempo de acceso a la memoria principal.
Se supone que el dato buscado siempre esta en la memoria principal y que la memoria cache
es del tipo look-trough

En el caso de un sistema de memoria con tres niveles, en el que existe una memoria
iplementada con seldas SRAM que constituye el nivel de cache externa L2, se tiene que a2 es
la tasa de aciertos de la memoria cache L2. El tiempo de acceso será:
𝑇𝐿2−𝐷𝑅𝐴𝑀 = 𝑎1 𝑡1 + 1 − 𝑎1 𝑎2 𝑡1 + 𝑡2 + 1 − 𝑎1 1 − 𝑎2 𝑡1 + 𝑡2 + 𝑡𝐷𝑅𝐴𝑀
𝑇𝐿2−𝐷𝑅𝐴𝑀 = (0.8)(2.5) + 1 − 0.8 𝑎2 2.5 + 5 + 1 − 0.8 1 − 𝑎2 2.5 + 5 + 10
𝑇𝐿2−𝐷𝑅𝐴𝑀 = 5.5 − 2𝑎2
De esta forma, para que 𝑇𝐿2−𝐷𝑅𝐴𝑀 < 𝑇𝐿1−𝐷𝑅𝐴𝑀 , es preciso que:

5.5 − 2𝑎2 < 4.5


𝑎2 > 0.5
Esto quiere decir que la memoria de cache L2 tiene que tener una tasa de aciertos mayor al
50%, esto significa que la tasa de fallos será menor a 50%

Para que el tiempo de acceso será igual a 3.7ns.

𝑇𝐿2−𝐷𝑅𝐴𝑀 = 5.5 − 2𝑎2 = 3.7𝑛𝑠

Donde a2 será 0.9 esto representa el 90%

Para el mínimo de acceso medio correspondería cuando a2 = 1

𝑇𝐿2−𝐷𝑅𝐴𝑀 = 5.5 − 2𝑎2 = 5.5 − 2 = 3.5𝑛𝑠


PROBLEMA 5
Un micro procesador incluye una CPU de 32bits y caches
separadas para datos e instrucciones, de 4 Kbytes cada uno, con
líneas de 32 bytes, y organizadas como caches asociativas por
conjunto de dos vías. El tiempo de acceso a la memoria es de
5ns, la política de reemplazo es LRU (se reemplaza la línea que
lleve mas tiempo sin utilizarse), y la de actualización es de post-
escritura (write-back). El microprocesador está conectado a dos
memorias externas separadas para datos e instrucciones
mediante dos buses independientes de 100Mhz y 64 líneas de
datos cada uno, con un tiempo de acceso de 50ns y acceso busrt
5-1-1-1
PROBLEMA 5
Se esta ejecutando un programa en el que la secuencia de
instrucciones que se encuentran entre las direcciones 0x0000 –
0x1fffh constituyen un bucle que se repite 30 veces, y tras ella
existe una secuencia de instrucciones que ocupa desde la
dirección 0x2000h hasta la 0x2ff8h, y que se ejecuta una vez. En
el 60% de las instrucciones del programa, se hace referencia a un
dato, ocasionándose un total de 500 fallos en el acceso a estos
datos.

a) Suponiendo que las caches están inicialmente vacías ¿Cuál es


la taza de aciertos para el acceso a los datos y a las
instrucciones en el programa?
PROBLEMA 5
b) ¿Cuál es el tiempo medio de acceso a las instrucciones ?
c) ¿Cuál es el tiempo medio de acceso a la memoria de datos si
el 20% de los fallos por acceso a datos dan lugar a
reemplazo de la línea con actualización de la línea
reemplazada en memoria?
SOLUCIÓN:
a) Cache de instrucciones 4Kbytes = 212 𝑏𝑦𝑡𝑒𝑠, con líneas de 32bytes =
25 𝑏𝑦𝑡𝑒𝑠
Calculamos numero de líneas que hay en la cache:

𝑡𝑎𝑚𝑎ñ𝑜 𝑐𝑎𝑐ℎ𝑒 212


𝑁𝑙𝑖𝑛𝑒𝑎𝑠 𝑐𝑎𝑐ℎ𝑒 = = 5 = 27 = 128 𝑙𝑖𝑛𝑒𝑎𝑠
𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑐𝑎𝑑𝑎 𝑙𝑖𝑛𝑒𝑎 2
Calculamos el numero de conjuntos
𝑁𝑙𝑖𝑛𝑒𝑎𝑠 𝑐𝑎𝑐ℎ𝑒 27
𝑁𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜𝑠 𝑐𝑎𝑐ℎ𝑒 = = = 26 = 64
𝑁𝑣𝑖𝑎𝑠 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜 2
Los 5 primeros bits nos indica el byte dentro de la línea los 6 bits siguientes
indican el conjunto en que se introduce la línea.

Para determinar el numero de fallos en la cache de instrucciones, el buble


tiene 8𝐾𝑏𝑦𝑡𝑒𝑠, empieza en la posición 0h, las líneas se empiezan a cargar
en cache (los bits de los conjuntos serán 0 ), así los 4𝐾𝑏𝑦𝑡𝑒𝑠 128 se cargan
en los 64 conjuntos de dos vías, esto ocasiona 128 fallos. Los 4𝐾𝑏𝑦𝑡𝑒𝑠 128
restantes reemplazaran las 128 líneas ya cargadas, esto ocasiona 128
fallas mas en total 256 fallos en la iteración del buble.

Cuando el programa se esta ejecutando el bucle se repite 30 veces. Por lo


tanto el fallo será 256(30)=7680 fallos.
La secuencia de la parte final es menos de 4𝐾𝑏𝑦𝑡𝑒𝑠, por lo que estos se
introducen en cache.
Los bits 5-10 de la posición 0x2000 son 0 y empieza a cargar desde 0,
habrán tantos fallos como líneas hayan.
El numero de líneas de la secuencia se obtiene desplazando las direcciones
de comienzo y final 5 bits a la derecha. (la línea es de 32bytes) y restando
tenemos 0111 1111 = 0x7f, por lo tanto desde 0 a 0x7f hay 128 líneas. 128
fallos.

El total de fallos será:


𝑁𝑓𝑎𝑙𝑙𝑜𝑠 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎 = 7680 + 128 = 7808

Para calcular la tasa de fallos necesitamos conocer el numero de


instrucciones que se han ejecutado.
𝑁𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑇𝑏𝑢𝑐𝑙𝑒 + 𝑇𝑓𝑖𝑛𝑎𝑙 30 8𝑥2𝑥1010 + 4088
𝑁𝐼 = + = 62462
𝑇𝑖𝑛𝑠𝑡𝑟𝑢𝑐𝑐𝑖𝑜𝑛𝑒𝑠 4
La tasa de fallos en la cache L1 de instrucciones será:
𝑁𝑓𝑎𝑙𝑙𝑜𝑠 7808
𝐹𝐼1 = = = 0.125
𝑁𝐼 62462

La tasa de aciertos será:


𝑎𝐼1 = 1 − 𝐹𝐿1 = 1 − 0.125 = 0.875

Para la tasa de fallos de la memoria de datos, como sabemos el numero de


instrucciones que se ejecuta es 62462 y el 60% de estos se hace referencia
al dato entonces el numero de accesos a la memoria de cache de datos es:

𝑁𝐷 = 𝑁𝐼 0.6 = 62462 0.6 = 37477


Calculamos la tasa de fallos, como dato se producen 500 fallos en el acceso
al cache de datos
𝑁𝑓𝑎𝑙𝑙𝑜𝑠 500
𝐹𝐷1 = = = 0.013
𝑁𝐼 37477
La tasa de aciertos será:

𝑎𝐷1 = 1 − 𝐹𝐷1 = 1 − 0.013 = 0.987

b) El tiempo de acceso a la memoria de cache de instrucciones

𝑎𝐼1 = 0.875
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 = 5𝑛𝑠
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 = 50𝑛𝑠 La frecuencia del microprocesador es 100MHz, por
ello cada ciclo de bus será 10ns, y para acceder a una palabra se necesita 5
ciclos.

𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 𝑎𝐼1 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + (1 − 𝑎𝐼1 )(𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 )


𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 0.875 5 + 1 − 0.875 5 + 50 = 11.25𝑛𝑠
c) El tiempo medio de acceso a la memoria de datos para ello tomamos en
cuenta el tiempo de acceso a la cache.

𝑎𝐷1 = 0.987
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 = 5𝑛𝑠
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 = 50𝑛𝑠
𝑝𝑟𝑒𝑒𝑚𝑝𝑙𝑎𝑧𝑜 = 0.2 Frecuencia de reemplazo de línea, y en 20% de los fallos
hay necesidad de reemplazo
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑙𝑖𝑛𝑒𝑎 = 80𝑛𝑠 Tiempo de actualización el acceso a burst
(5+1+1+1=8 ciclos de bus), cada ciclo de bus es de 10ns

𝑇𝑎𝑐𝑐𝑒𝑠𝑜
= 𝑎𝐷1 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + (1 − 𝑎𝐷1 )(𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎
+ 𝑝𝑟𝑒𝑒𝑚𝑝𝑙𝑎𝑧𝑜 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑙𝑖𝑛𝑒𝑎 )
𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 0.975 5 + 1 − 0.975 5 + 50 + 0.2(80) = 5.793𝑛𝑠
PROBLEMA 6
En un computador, el bus tiene una frecuencia de 200MHz, y la
memoria principal un tiempo de acceso de 30ns, que, tras el
primer acceso, puede proporcionar (o reducir) una palabra por
ciclo en los accesos burst 6-1-1-1 . El procesador superescalar de
1GHz dispone de una cache interna con líneas de 4 palabras.

En los programas, por termino medio, un 30% de las


instrucciones necesitan leer o escribir un dato (una palabra) en
memoria, la tasa de aciertos de la cache interna es del 90% y en
un 20% de los accesos a datos se necesita remplazar el bloque,
en caso de que se haya producido un fallo
PROBLEMA 6
a) ¿Cuál es el tiempo medio de acceso a la memoria?
b) ¿Cuántas instrucciones por siclo se pueden ejecutar, por termino medio
en el procesador? Y ¿Si la tasa de aciertos pasa a ser de un 95%?
SOLUCIÓN:
a) Para calcular el tiempo medio de acceso a memoria, vamos a tener en
cuenta el tiempo de acceso al cache, y a la memoria principal.

𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 𝑎𝑐𝑎𝑐ℎ𝑒 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + (1 − 𝑎𝑐𝑎𝑐ℎ𝑒 )(𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 + 𝑝𝑟𝑒𝑒𝑚𝑝𝑙𝑎𝑧𝑜 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑙𝑖𝑛𝑒𝑎 )
Donde:
Tenemos la tasa de aciertos de la cache (90%)
𝑎𝑐𝑎𝑐ℎ𝑒 = 0.9
El tiempo de acceso a una palabra de la cache interna
1
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 = 𝑡𝑐𝑖𝑐𝑙𝑜 = 9 = 1𝑛𝑠
10
El tiempo de acceso a una palabra en la memoria

𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 = 30𝑛𝑠

Debido a que abra un reemplazo de línea en un 20% de los accesos de


datos y el 30% de las instrucciones acceden a los datos, para un programa
de N intrusiones tenemos:
0.3 𝑁 0.3
𝑝𝑟𝑒𝑒𝑚𝑝𝑙𝑎𝑧𝑜 = 0.2𝑥 = 0.2𝑥 = 0.046
𝑁 + 0.3𝑁 1.3

El tiempo de actualización de una línea en memoria principal cuando debe


reemplazarse dicha línea en memoria cache. La línea esta constituida por 4
palabras, el tiempo de actualización corresponde al tiempo de acceso a un
burst a la memoria principal, es decir 6+1+1+1=9 ciclos de bus. 200MHz

𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑙𝑖𝑛𝑒𝑎 = 9 5𝑛𝑠 = 45𝑛𝑠


Sustituimos los valores correspondientes:

𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 𝑎𝑐𝑎𝑐ℎ𝑒 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + 1 − 𝑎𝑐𝑎𝑐ℎ𝑒 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑐𝑎𝑐ℎ𝑒 + 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑚𝑒𝑚𝑜𝑟𝑖𝑎 + 𝑝𝑟𝑒𝑒𝑚𝑝𝑙𝑎𝑧𝑜 𝑡𝑎𝑐𝑐𝑒𝑠𝑜 𝑎 𝑙𝑖𝑛𝑒𝑎

𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = (0.9)(1𝑛𝑠) + (1 − 0.9)(1𝑛𝑠 + 30𝑛𝑠 + 0.046 45𝑛𝑠 )


𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 4.209𝑛𝑠

b) Para la segunda pregunta calculamos el tiempo mínimo que tardaría el procesador


superescalar en ejecutar el programa, suponiendo un programa que ejecuta NI
instrucciones y que no hubiera retardos en la ejecución:

𝐶𝑃𝐼 𝑁𝐼 𝐶𝑃𝐼 𝑁𝐼
𝑇𝐶𝑃𝑈 = 𝐶𝑃𝐼 𝑁𝐼 𝑡𝑐𝑖𝑐𝑙𝑜 = = 9
= 𝐶𝑃𝐼 𝑁𝐼 1𝑛𝑠
𝐹 1𝑥10

Ahora calculamos el ancho de banda que se le daría al sistema de memoria

𝑁𝑎𝑐𝑐𝑒𝑠𝑜 𝑡𝑜𝑡𝑎𝑙 𝑁𝐼 + 0.3𝑁𝐼 1.3


𝐵𝐶𝑃𝑈 = = = palabras/s
𝑇𝐶𝑃𝑈 𝐶𝑃𝐼 𝑁𝐼 1𝑛𝑠 𝐶𝑃𝐼 1𝑛𝑠
Ahora calculamos el ancho de banda de la memoria

1 1
𝐵𝑀𝑒𝑚 = = = 237.58𝑀𝑝𝑎𝑙𝑎𝑏𝑟𝑎𝑠/𝑠
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 4.209𝑛𝑠

Igualamos ambos anchos de banda y calculamos CPI


1.3 1
=
𝐶𝑃𝐼 1𝑛𝑠 4.209𝑛𝑠
C𝑃𝐼 = 5.47
Queremos hallar las instrucciones por ciclo, por lo cual invertimos, y esto nos
da 0.18 instrucciones por siclo.

En el caso de que la tasa de fallos sea del 95%, calculamos el tiempo de


acceso.
𝑇𝑎𝑐𝑐𝑒𝑠𝑜 = 0.95 1𝑛𝑠 + 1 − 0.95 1𝑛𝑠 + 30𝑛𝑠 + 0.046 45𝑛𝑠
= 2.603𝑛𝑠
Ahora calculamos el ancho de banda de la memoria

1 1
𝐵𝑀𝑒𝑚 = = = 384.17𝑀𝑝𝑎𝑙𝑎𝑏𝑟𝑎𝑠/𝑠
𝑡𝑎𝑐𝑐𝑒𝑠𝑜 2.603𝑛𝑠

Igualamos ambos anchos de banda


1.3 1
=
𝐶𝑃𝐼 1𝑛𝑠 2.603𝑛𝑠
C𝑃𝐼 = 3.38
Queremos hallar las instrucciones por ciclo, por lo cual invertimos, y esto nos
da 0.29 instrucciones por siclo.

Con esto vemos que ha mejorado el ancho de banda, pero el CPI sigue
siendo mayor que 1 , lo cual quiere decir que no puede procesar ni 1
instrucción por ciclo.

También podría gustarte