Sunteți pe pagina 1din 8

DEPARTAMENTO DE INGENIERA ELCTRICA

FACULTAD DE INGENIERA
UNIVERSIDAD DE CONCEPCIN
CONCEPCIN, CHILE.

REVISIN EXAMEN 2
Sistemas Computacionales
Nombre: Salvador Gallardo Riquelme
Profesor: Mario Medina
Ayudante: Danilo Bonometti

1 de Diciembre de 2014

Sistemas Computacionales 2014


Ingeniera Civil Biomdica

DESARROLLO PROBLEMA 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

bae:

yolo:

pushl %ebp
#Almacena puntero base en la pila
movl %esp, %ebp
#Redefine el puntero base
movl 8(%ebp), %edx #Lee p en registro %edx
movl 12(%ebp), %ecx #Lee c en registro %ecx
cmpl $0, %ecx
#Compara c cero
jle yolo
#Salta a yolo si c 0
decl %ecx
#Decrementa c en 1
pushl %ecx
#Almacena c
addl $4, %edx
#Suma 4 a p
pushl %edx
#Almacena p
call bae
#Llama a la funcin bae
popl %edx
#Recupera el registro %edx en la pila
popl %ecx
#Recupera el registro %edx en la pila
addl -4(%edx), %eax #Suma -4 al contenido de %edx y lo guarda en el
#registro %eax
leave
#Prepara la pila para el retorno
ret
#Retorna la funcin
xorl %eax, %eax
#Hace cero el contenido del registro %eax
leave
#Prepara la pila para el retorno
ret
#Retorna la funcin

a) Una posible cdigo en C equivalente a la funcin dada es:


int bae (int *p, int c){
if(c>0){
c--;
p=p+1;
return *(p-1)+bae(p,c);
}
else
return 0;
}
Bae es una funcin recursiva que ocupa el argumento c como un ndice y adems que ejecuta
la recursin siempre que c sea mayor que cero, esto es para c=3,c=2 y c=1. En cada ciclo
iterativo se accede a un elemento de los contenidos en determinada parte de la memoria
apuntada por *p y lo suma al elemento al cual acceder en la prxima iteracin, as llega a
sumar los 3 elementos de *p, estos son 10, 25 y 8.
b) Para los argumentos dados el valor retornado por la funcin ser como se mencion en la
parte a la suma de cada elemento de *p, por lo tanto la funcin retorna 43.

c) Si la funcin es invocada con los argumentos dados se ejecutan 57 instrucciones.


Esto es ya que el ciclo iterativo recorrer desde la instruccin 1 a la 11 tres veces, para C=3, C=2
y C=1, luego para C=0 recorre desde la instruccin 1 a la instruccin 6 en donde compara C con
cero y salta a yolo en donde ejecuta las 3 ltimas instrucciones, posteriormente va a la
instruccin 12 y recorre desde 12 hasta 16, tres veces, todo esto suma un total de 57
instrucciones ejecutadas.
d)
Peligros de lectura y uso:
Entre las instrucciones 4 y 5
Entre las instrucciones 5 y 6
Saltos Condicionales:
Entre las instrucciones 5 y 6
Retorno:
Despus de la instruccin 15
Despus de la instruccin 18

Las instancias donde hay Forwarding sern ilustradas de color verde en el siguiente esquema y
descritas a continuacin.

bae:

pushl %ebp

movl %esp, %ebp

movl 8(%ebp), %edx

movl 12(%ebp), %ecx

cmpl $0, %ecx

jle yolo

decl %ecx

pushl %ecx

addl $4, %edx

10

pushl %edx

11

call bae

12

popl %edx

13

popl %ecx

14

addl -4(%edx), %eax

15

leave

16

ret

17

yolo:

xorl %eax, %eax

18

leave

19

ret

Si existe dependencia de datos entre dos instrucciones es necesario redirigir un registro entre
las etapas de estos registros que se encuentra ejecutndose, cuando se dan estas condiciones
se produce un forwarding. Para efectos de anlisis se asume que los registros son ledos al
comienzo del ciclo Instruction Decode y escritos al finalizar Write back, por lo tanto cualquier
transferencia de datos entre registros de otras etapas requiere forwarding.
Los casos en los que se necesita forwarding para este cdigo son:
1.- Forwarding del registro %ebp desde la etapa EXECUTE de la instruccin 1 a la etapa
DECODE de la instruccin 2.
2.- Forwarding del registro %ebp desde la etapa MEMORY de la instruccin 1 a la etapa
DECODE de la instruccin 3.
3.- Forwarding del registro %ebp desde la etapa MEMORY de la instruccin 2 a la etapa
DECODE de la instruccin 4.
4.- Forwarding del registro %ecx desde la etapa EXECUTE de la instruccin 4 a la etapa
DECODE de la instruccin 5.
5.- Forwarding del registro %ecx desde la etapa EXECUTE de la instruccin 5 a la etapa
DECODE de la instruccin 6.
6.- Forwarding del registro %ecx desde la etapa MEMORY de la instruccin 5 a la etapa
DECODE de la instruccin 7.
7.- Forwarding del registro %ecx desde la etapa EXECUTE de la instruccin 7 a la etapa
DECODE de la instruccin 8.
8.- Forwarding del registro %edx desde la etapa EXECUTE de la instruccin 9 a la etapa
DECODE de la instruccin 10.
9.- Forwarding del registro %edx desde la etapa MEMORY de la instruccin 10 a la etapa
DECODE de la instruccin 12.
10.- Forwarding del registro %edx desde la etapa MEMORY de la instruccin 12 a la etapa
DECODE de la instruccin 14.
11.- Forwarding de los cdigos de condicin desde la etapa MEMORY de la instruccin 5 a la
etapa EXECUTE de la instruccin 6.

e)
En la siguiente tabla se muestra los ciclos correspondientes a cada tipo de instancia; peligros
de lectura y uso, saltos condicionales y retornos.
Cantidad de veces que se repite para Ciclos
los argumentos datos
4
8

Peligros de lectura y
2
uso
Saltos condicionales
1
4
4
Retorno
2
3 y 1 (*)
4
(*) Las instrucciones que corresponden a retorno son la instruccin 16 y 19, en donde la
primera se ejecuta 3 veces y la segunda 1 vez por lo tanto esto genera 4 ciclos.
Ahora se muestra el total de burbujas producidas por estas instancias

Lectura y uso
Salto condicional
Retorno
Total

Ciclos
8
4
4
-

Penalidad
1
2
3
-

Burbujas
8
8
12
28

Finalmente se obtiene el CPI de la siguiente forma:

CPI=1,491 ciclos por instruccin


f)
Yo agregara una prediccin de salto. Considerando que hay 4 saltos hacia adelante durante la
ejecucin del cdigo las predicciones serian:

Los saltos hacia adelante se predicen como no tomados


Los saltos hacia atrs se predicen como tomados

En base a estas predicciones habra solo una prediccin errada ya que solo una vez el salto de
la instruccin 6 es tomado y va hacia adelante (en los otros casos no es tomado) esta
prediccin errada tiene una penalidad asociada de 2 mientras que los aciertos no tiene
penalidad asociada.
Esto producira 1x2 = 2 burbujas asociadas a saltos condicionales, lo cual entrega un total de 22
burbujas. El nuevo CPI ser:

CPI=1,385 ciclos por instruccin


Esto muestra que con la prediccin de salto descrita se consigue un mejor rendimiento.

DESARROLLO PROBLEMA 2
Nivel
L1
L2
L3
RAM

Tamao
32 KiB
256 KiB
8 MiB
8 GiB

Asociatividad
8 Vas
8 Vas
16 Vas

Tiempo de Acceso
1 Ciclo
5 Ciclos
40 Ciclos
120 Ciclos

Tasa de Aciertos
90 %
95 %
98 %
100 %

En la siguiente tabla se describen los tiempos de cada nivel de memoria y la tasa de fallos
correspondiente.
Nivel
L1
L2
L3
RAM

Tiempo (segundos)
1s
0,2 s
0,025 s
0,0083 s

Tasa de Fallos
10 %
5%
2%
0%

El tiempo de acceso promedio AMAT, se calcula como:


AMAT = (tasa de acierto)*(tiempo de acierto) + (tasa de fallo)*(penalidad de fallo)

Como sabemos que usar una jerarqua de memoria de dos o ms niveles afecta a la penalidad
de fallo de la cache de nivel anterior por lo que la ecuacin anterior se expresa como:
AMAT = (tasa de acierto L1)*(tiempo de acierto L1) + (tasa de fallo L1)*(penalidad de fallo L1)*
(penalidad de fallo L2)*(penalidad de fallo L3)
En donde:
Penalidad de fallo L1= (tasa de acierto L2)*(tiempo de acierto L2)+(tasa de fallo L2)*(penalidad
de fallo L2)
Penalidad de fallo L2= (tasa de acierto L3)*(tiempo de acierto L3)+(tasa de fallo L3)*(penalidad
de fallo L3)
Penalidad de fallo L3= tiempo de acceso a la DRAM
Reemplazando en la ecuacin de AMAT

AMAT= (tasa de acierto L1)*(tiempo de acierto L1)+(tasa de fallo L1)*(tasa de acierto


L2*tiempo de acierto L2+tasa de fallo L2*(tasa de acierto L3*tiempo de acierto L3+tasa de fallo
L3*(tiempo de accedo a la DRAM)))
Remplazando los valores obtenidos de la tabla:
AMAT = 0,9*1 + 0,1*(0,95*5+0,05*(0,98*40+0,02*(120)))
AMAT= 1,583

DESARROLLO PROBLEMA 3

Memoria de cache traduccin directa de 64 KiB = 2N N=16


Bloques de 16 Bytes = 2M M=4
N-M=12 212 =4096 ndices

a)
128 Filas y 128 columnas producen una matriz con 16384 enteros, cada entero es de 4 bytes
por lo que se obtienen 16384*4 = 65536 bytes.
Como cada bloque es de 16 bytes, del cociente entre 65536 y los bytes de cada bloque se
obtienen 4096 bloques.
Como se determin anteriormente los ndices son 4096 por lo tanto los bloques se pueden
enumerar con ndices del 0 al 4095.
En consecuencia tanto la matriz destino como la matriz fuente tendrn los mismos ndices
para todos sus bloques. Es por ello que:

Copiar el bloque cero en la matriz fuente que esta vaca genera un fallo
Copiar determinado bloque desde matriz fuente a matriz destino, implica un fallo
causado por la igualdad de sus ndices.

Esto ocurre sucesivamente para todos los elementos de la matriz por lo que la tasa de acierto
es de un 0%
b)
128 Filas y 192 columnas producen una matriz con 24576 enteros, cada entero es de 4 bytes
por lo resultan 24576*4 = 98304 bytes.
Sabemos que cada bloque es de 16 bytes por lo tanto del cociente entre 98304 bytes y 16
bytes sabemos que son 6144 bloques.

De estos, los primeros 4096 seran etiquetados con un ndice, el cual ira de 0 a 4095, el resto
tendr ndices del 0 al 2047. Por lo tanto:

Copiar el primer elemento del bloque implica fallo


Copiar los siguientes 3 bloques no implica fallo

Por lo que la tasa de acierto es de un 75%


c)
128 Filas y 256 columnas producen una matriz con 32768 enteros, cada entero es de 4 bytes
por lo que se obtienen 32768*4 = 131072 bytes.
Como cada bloque es de 16 bytes, del cociente entre 131072 y los bytes de cada bloque se
obtienen 8192 bloques.
En este caso se observa que la cantidad de bloques es el doble que el caso a por lo que un
cambio de este tipo no afecta la tasa de ciertos de la memoria, por lo que habra una tasa de
acierto de 0%. Adems esto se sostiene en que el bloque cero de la matriz de entrada tendra
el mismo ndice que el bloque cero de la matriz de salida, produciendo siempre un fallo.
Finalmente lo propuesto por un X compaero, no produce mejoras en las diferentes tasas de
aciertos ya que el proceso seria anlogo para bytes o enteros. A mi entender una mejora de las
tasas se podra capitalizar mediante el uso de una memoria cache completamente asociativa
ya que esta reduce la tasa de fallos debido a que busca en todas las lneas simultneamente y
no en solo una como lo hace la cache de traduccin directa. Una mejor opcin aun, sera la
cache asociativa por conjunto, est a pesar de que tiene una tasa de fallos similar a la anterior
es mucho ms sencilla y por lo tanto mas rpida.

S-ar putea să vă placă și