You are on page 1of 4

5.1.

En este ejercicio examinaremos las propiedades de la localidad de


memoria en el cálculo de matrices. El siguiente código está escrito en C, donde
los elementos de una misma fila se almacenan de forma contigua. Suponga que
cada palabra es un entero de 64 bits.
for (I=0; I<8; I++)
for (J=0; J<8000; J++)
A[I][J]=B[I][0]+A[J][I];
5.1.1 ¿Cuántos enteros de 64 bits pueden almacenarse en un bloque de caché de
16 bytes
?
Respuesta:
1 byte = 8 bits
=> 16 bytes = 128bits
=> En un bloque de caché de 16 bytes se pueden almacenar 2 enteros de 64 bits.
5.1.2 ¿Qué referencias variables de presentan localidad temporal?
Contesta:
Variable de localidad temporal: I, J, B[I][0]

5.1.3 ¿Qué referencias de variables muestran localidad espacial? La localidad se


ve afectada tanto por el orden de referencia como por la disposición de los
datos. El mismo cálculo también se puede escribir a continuación en Matlab,
que difiere de C en que almacena los elementos de la matriz dentro de la misma
columna de forma contigua en la memoria.
for I=1:8
for J=1:8000
A(I,J)=B(I,0)+A(J,I);
end
end
Respuesta: A[I][J]
5.1.4 ¿Qué referencias de variables muestran localidad temporal?
Contesta: I, J, B(I,0)

5.1.5 ¿Qué referencias de variables muestran localidad espacial?


Respuesta: A(J,I) y B(I,0)
5.1.6 ¿Cuántos bloques de caché de 16 bytes se necesitan para almacenar todos
los elementos de matriz
de 64 bits que se referencian usando el almacenamiento de matrices de Matlab?
¿Cuántos utilizando el almacenamiento matricial de C? (Supongamos que cada
fila contiene más de un elemento).
Contesta:
Con la matriz A, el código hace referencia a 8*8000=64 000 enteros. Como hay
2 enteros por bloque de 16 bytes, necesitamos 64 000/2 = 32 000 bloques.
Utilizando el almacenamiento matricial de C (que almacena los elementos de la
matriz dentro de la misma columna de forma contigua en memoria), con la
matriz B tenemos 8 bloques
=> 32000 + 8 = 32 008 (bloques)
Usando el almacenamiento matricial de Matlab (que almacena los elementos de
la matriz dentro de la misma fila contigua en memoria), con la matriz B
tenemos 4 bloques (2 enteros por bloque)
=> 32000 + 4 = 32 004 (bloques)

5.2 Las cachés son importantes para proporcionar una jerarquía de memoria
de alto rendimiento
a los procesadores. A continuación se muestra una lista de referencias de
direcciones de memoria de 64 bits, dadas como direcciones de palabra.
0x03, 0xb4, 0x2b, 0x02, 0xbf, 0x58, 0xbe, 0x0e, 0xb5, 0x2c, 0xba, 0xfd
5.2.1 Para cada una de estas referencias, identifique la dirección binaria de
palabra, la etiqueta y el índice dada una caché de mapeo directo con 16 bloques
de una palabra. Indique también si cada referencia es un acierto o un fallo,
suponiendo que la caché esté inicialmente vacía.
Contesta:
16 bloques =24 => Índice de 4 bits
Dirección Dirección binaria Etiqueta Índice Acierto/
error
0x03 0000 0011 0x0 0011 M
0xb4 1011 0100 0xb 0100 M
0x2b 0010 1011 0x2 1011 M
0x02 0000 0010 0x0 0010 M
0xbf 1011 1111 0xb 1111 M
0x58 0101 1000 0x5 1000 M
0xbe 1011 1110 0xb 1110 M
0x0e 0000 1110 0x0 1110 M
0xb5 1011 0101 0xb 0101 M
0x2c 0010 1100 0x2 1100 M
0xba 1011 1010 0xb 1010 M
0xfd 1111 1101 0xf 1101 M

5.2.2 Para cada una de estas referencias, identifique la dirección binaria de


palabra, la etiqueta, el índice y el desplazamiento, dada una caché de mapeo
directo con bloques de dos palabras y un tamaño total de ocho bloques.
También lista si cada referencia es un acierto o un fallo, asumiendo
que la caché está inicialmente vacía.
Contesta:
8 bloques =23 => índice de 3 bits
2 palabras/bloque =21 => desplazamiento de 1 bit
Dirección Dirección Etiquet Índice Despl Acierto/
binaria a azami error
ento
0x03 0000 0011 0x0 001 1 M
0xb4 1011 0100 0xb 010 0 M
0x2b 0010 1011 0x2 101 1 M
0x02 0000 0010 0x0 001 0 M
0xbf 1011 1111 0xb 111 1 M
0x58 0101 1000 0x5 100 0 M
0xbe 1011 1110 0xb 111 0 M
0x0e 0000 1110 0x0 111 0 M
0xb5 1011 0101 0xb 010 1 M
0x2c 0010 1100 0x2 110 0 M
0xba 1011 1010 0xb 101 0 M
0xfd 1111 1101 0xf 110 1 M

5.2.3 Se le pide que optimice un diseño de caché para las referencias dadas. Hay
tres diseños de caché de mapeo directo posibles, todos con un total de ocho
palabras de datos:
■ C1 tiene bloques de 1 palabra
■ C2 tiene bloques de 2 palabras
■ C3 tiene bloques de 4 palabras.
Respuesta:
C1 tiene bloques de 1 palabra => 8 bloques => Índice de 3 bits, sin
desplazamiento de bits
C2 tiene bloques de 2 palabras => 4 bloques => Índice de 2 bits +
desplazamiento de 1 bit
C3 tiene bloques de 4 palabras => 2 bloques => Índice de 1 bit +
desplazamiento de 2 bits

Palabra Dirección Etiqu Caché 1 Caché 2 Caché 3


Direcció binaria eta Índic Acierto/ Índic Acierto/ Índic Acierto/
n e error e error e error
0x03 0000 0011 0x00 011 M 01 M 0 M
0xb4 1011 0100 0x16 100 M 10 M 1 M
0x2b 0010 1011 0x05 011 M 01 M 0 M
0x02 0000 0010 0x00 010 M 01 M 0 M
0xbf 1011 1111 0x17 111 M 11 M 1 M
0x58 0101 1000 0x0b 000 M 00 M 0 M
0xbe 1011 1110 0x17 110 M 11 H 1 H
0x0e 0000 1110 0x01 110 M 11 M 1 M
0xb5 1011 0101 0x16 101 M 10 H 1 M
0x2c 0010 1100 0x02 100 M 10 M 1 M
0xba 1011 1010 0x17 010 M 01 M 0 M
0xfd 1111 1101 0x1f 101 M 10 M 1 M

Tasa de fallos de caché 1 = 100%


Tasa de fallos de caché 2 = 10/12 = 83%.
Tasa de fallos de la caché 3 = 11/12 = 92%
=> La caché 2 ofrece el mejor rendimiento.

You might also like