guía de ejercicios del sistema de memoria

Anuncio
El Sistema de Memoria
Organización de Computadoras - 66:20
1.
Se brinda a continuación una serie de referencias a memoria, dadas como
direcciones de palabras: 2, 3, 11, 16, 21, 13, 64, 48, 19, 11, 3, 22, 4, 27,
6 y 11. Suponer una memoria caché de correspondencia directa con 16
bloques de una palabra inicialmente vacı́os. Rotular cada referencia de la
lista como “acierto”(hit) o “desacierto” (miss) y mostrar el contenido final
de la caché.
2.
Usando la serie de referencias dadas en el ejercicio anterior, mostrar los
aciertos y desaciertos y el contenido final de la memoria caché para una
organización de correspondencia directa con bloques de cuatro palabras y
un tamaño total de 16 palabras.
3.
Suponer que se tienen dos computadoras idénticas A y B, salvo por su
organización de memoria caché. Se pide la escritura de dos códigos de
manera tal que se cumpla que el primer código se ejecute mucho más
rápido en la máquina A que en la B, y que el segundo código se ejecute
mucho más rápido en la máquina B que en la A.
Datos:
Cachés unificadas.
El tiempo de escritura de una palabra de 32 bits en memoria principal
es igual a 5 tiempos de acierto en memoria caché.
Penalidad de desacierto = 10 tiempos de acierto.
Caché A: 128 conjuntos, dos elementos por conjunto, bloque de 32
bytes, write through y no-write allocate.
Caché B: 256 conjuntos, un elemento por conjunto, bloque de 32
bytes, write back y write allocate.
4.
Dado el siguiente pseudocódigo:
int array[10000,100000];
para cada elemento array[i][j]
array[i][j] = array[i][j]*2;
Escribir dos programas en C que implementen este algoritmo: uno debe
acceder los elementos del array recorriéndolo por filas (row-major order ) y
el otro debe accederlos reocrriédolo por columnas (column-major order ).
Compare los tiempos de ejecución de los dos programas. ¿Cómo explica
los resultados obtenidos en base al impacto que el código ha producido en
la jerarquı́a de memoria?
5.
Suponer dos memorias cachés: C1 es una organización de correspondencia
directa con 16 bloques de una palabra y C2 es una organización de correspondencia directa con bloques de cuatro palabras y un tamaño total de
16 palabras. Suponer una penalidad de desacierto para C1 de 8 ciclos de
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
reloj de bus y una penalidad de desacierto para C2 de 11 ciclos de reloj de
bus. Suponiendo que las cachés están inicalmente vacı́as, encontrar una secuencia de referencias para la cual C2 tenga una tasa de desaciertos (miss
rate) más baja pero pase más ciclos de reloj en desaciertos de caché que
C1. Usar direcciones de palabras.
6.
Una computadora presenta las siguientes caracterı́sticas:
El 95 % de los accesos a memoria se encuentran en la memoria caché.
Cada bloque de caché es de dos palabras.
El procesador envı́a referencias al sistema de memoria a una tasa de
109 palabras por segundo.
El 25 % de las referencias son escrituras.
La memoria principal trabaja a una tasa de 109 palabras por segundo
(lecturas o escrituras).
En cualquier instante de tiempo, el 30 % de los bloques de la caché se
encuentra modificado.
La caché usa write allocate sobre un desacierto de escritura.
Se está considerando agregar un periférico al sistema y se desea saber
cuánto del ancho de banda de la memoria del sistema ya está siendo usado.
Calcular el ancho de banda de la memoria del sistema usado en promedio
para los dos casos siguientes (establezca sus hipótesis):
7.
a)
La caché es write through.
b)
La caché es write back.
Para una computadora con CPU MIPS R2000 y memoria caché de 16-KB
con asociatividad de grado 4 y lı́nea de 16 bytes:
a)
Calcular el número de bits de tag, ı́ndice y offset.
b)
Dibujar un esquema detallado de la memoria caché (numerar los conjuntos desde 0 en adelante).
c)
Dar la dirección (en hexadecimal) correspondiente a cada uno de los
siguientes datos y ubicarlos en el esquema del ı́tem b:
1)
A y B son datos de un mismo bloque de memoria que mapean
en el conjunto número 7.
2) C y D son datos de distintos bloques de memoria que mapean
en el conjunto número 255.
3) E y F son datos que pertenecen a los bloques de memoria principal siguientes a C y D, respectivamente.
4) G es un dato separado en 1-MB de distancia respecto a B.
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
8.
Dar una secuencia de 5 direcciones de memoria distintas generadas por
una CPU MIPS con memoria caché, de manera tal que se cumpla con lo
siguiente:
La segunda dirección es acierto.
La tercera mapea en un conjunto distinto al correspondiente a la
primera.
La quinta es desacierto.
Las direcciones se deben dar en hexadecimal. La memoria caché es de
8-KB, asociativa de grado 2 y bloque de 16 bytes. No se pueden hacer
hipótesis acerca del contenido previo de la caché. Justificar su respuesta.
9.
Para el siguiente código:
loop:
.data
array:
add $t2, $0, $0
sll $t1, $t2, 2
sw $t2, array($t1)
addi $t2, $t2, 1
slti $t3, $t2, 12
bgtz $t3, loop
ori $v0, $0, 10
syscall
.word 0, 1, 2, 3, 4, 5, ...
a)
Calcular el CPI promedio.
b)
Calcular el promedio de accesos a memoria por instrucción.
c)
Calular la tasa de desaciertos.
Datos: caché de 8-KB, de 2 vı́as asociativa por conjunto, unificada, con
bloque de 32 bytes y reemplazo LRU. Aclare las hipótesis que utilice.
10.
Para una computadora con CPU MIPS R2000 y memoria caché de 512
bytes con asociatividad de grado 2 y lı́nea de 16 bytes.
a)
Calcular el número de bits de tag, ı́ndice y offset.
b)
Dibujar un esquema detallado y completo de la memoria caché (área
de datos y tags). Numerar los conjuntos desde 0 en adelante.
c)
Ubicar en el dibujo a cada uno de los siguientes datos (bytes) dados por su dirección, y dar y ubicar en el área de tags, a los tags
correspondientes.
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
Dato
A
B
C
D
E
F
Dirección
0xffffff00
0xffffff04
0xcccccc08
0xffffff1a
0xffffff70
0xffffffff
Justifique todas sus respuestas y muestre sus cálculos.
11.
El código que se da a continuación, escrito en lenguaje C para ambientes
UNIX, permite ejercitar los distintos niveles de una jerarquı́a de memoria. Esto se hace a partir de recorrer una zona contigua de memoria con
un “tranco” (o separación entre las distintas referencias) dado. Fijado el
tamaño de la zona de memoria a recorrerse se repite el acceso de la misma para trancos de distintos tamaños. Asimismo, se consideran zonas de
distintos tamaños. Para combinación de zona de memoria recorrida (tamaño del lazo) y tranco se obtienen los tiempos promedio para realizar
una lectura y una escritura en memoria.
Compilar y ejecutar el código dado. Realizar un gráfico con los datos obtenidos, donde se tienen los tiempos promedio de lectura más escritura
a memoria en función de los distintos saltos, para lazos de disitintos tamaños. Del análisis del gráfico determine para la computadora donde se
ejecutó este test:
a)
La cantidad de niveles presentes en la jerarquı́a de memoria.
b)
El tamaño de cada nivel.
c)
El grado de asociatividad de cada nivel.
d)
El tamaño del bloque.
Aclare sus hipótesis.
#include
#include
#include
#include
<stdio.h>
<sys/times.h>
<sys/types.h>
<time.h>
/* lazo mas peque~
no */
#define LAZO_MIN (1024)
/* lazo mas grande */
#define LAZO_MAX (1024*1024*4)
/* para obterner un tiempo de muestra mas grande */
#define SAMPLE 10
/* numero de ticks de reloj por segundo */
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
#ifndef CLK_TCK
#define CLK_TCK 60
#endif
/* array para ir recorriendolo */
int x[LAZO_MAX];
/* funcion para leer tiempo */
double get_seconds()
{
struct tms rusage;
times(&rusage); /* utilitario UNIX: tiempo en clock ticks */
return (double) (rusage.tms_utime)/CLK_TCK;
}
void main()
{
int register i, index, stride, limit, temp;
int steps, tsteps, csize;
double sec0, sec; /* variables de timing */
for (csize=LAZO_MIN; csize <= LAZO_MAX; csize=csize*2)
for (stride=1; stride <= csize/2; stride=stride*2)
{
sec = 0; /* inicializa timer */
limit = csize-stride+1; /* dimensiona lazo de esta iteracion */
steps = 0;
do /* repetir hasta colectar 1 segundo */
{
sec0 = get_seconds(); /* arrancar timer */
for (i=SAMPLE*stride;i!=0;i=i-1) /* muestra mas grande */
for (index=0; index < limit; index=index+stride)
x[index] = x[index] + 1; /* accesso a caché */
steps = steps + 1; /* cuenta iteraciones del lazo*/
sec = sec + (get_seconds() - sec0);/* finaliza timer */
}
while (sec < 1.0); /* hasta colectar 1 segundo */
/* Repetir loop vacio para restar overhead del lazo */
tsteps = 0; /* para equiparar nro. de iteraciones del while */
do /* repetir hasta mismo nro. de iteraciones com arriba */
{
sec0 = get_seconds(); /* arrancar timer */
for (i=SAMPLE*stride;i!=0;i=i-1) /* muestra mas grande */
for (index=0; index < limit; index=index+stride)
temp = temp + index; /* codigo dummy */
tsteps = tsteps + 1; /* cuenta iteraciones del wwhile*/
sec = sec - (get_seconds() - sec0);/* - overhead */
}
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
while (tsteps<steps); /* hasta = nro. de iteraciones */
printf("Size:%7d Stride:%7d read+write:%l4.0f ns\n",
csize*sizeof(int), stride*sizeof(int),
(double)sec*1e9/(steps*SAMPLE*stride*((limit-1)/stride+1)));
}
/* fin de de los dos loops for exteriores */
}
12.
El programa del ejercicio anterior se experimentó en una computadora
dada y se obtubieron resultados que fueron volcados en la siguiente figura:
Calcular en base a la figura:
13.
a)
La cantidad de niveles presentes en la jerarquı́a de memoria.
b)
El tamaño de cada nivel.
c)
El grado de asociatividad de cada nivel.
d)
El tamaño del bloque.
El “modelo del lazo” consiste en referenciar secuencialmente un grupo de
bloques consecutivos en memoria, en forma cı́clica, de manera de formar
un lazo infinito. Cada bloque recibe solo una referencia por vuelta del lazo
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
y todas son exactamente en el mismo byte dentro del bloque. Por ejemplo
la secuencia de direcciones de bloques en memoria:
b0 , b1 , b2 , b3 , b0 , b1 , b2 , b3 , ..., b0 , b1 , b2 , b3 , ...
conforma un lazo infinito compuesto de cuatro bloques.
Una posible implementación del modelo del lazo para las referencias a datos en memoria es la del pseudocódigo que se da a continuación:
variables enteras: i, L, B;
vector de punteros: a;
variables en registro: p, k;
inicialización del vector a
para todo a[i]:
a[i] ← dirección de a[(i + B) mod L];
p ← dirección a[0];
lazo
repetir k veces:
p ← lo apuntado por p;
Durante la ejecución del lazo, los únicos accesos a memoria para datos se
producen con la asignación p ← lo apuntado por p. Esto es ası́ dado que
el puntero p y la variable k de la repetición se mantienen en registros, no
requiriéndose accesos a memoria para las mismas. Los saltos en memoria
entre sucesivas referencias a datos distan exactamente un bloque (B), por
la inicialización del vector a. La proporción de desaciertos que produce el
pseudocódigo anterior es prácticamente igual a la de un lazo infinito (para
lograrlo, k debe tomar un valor suficientemente elevado).
Realice una codificación en C del modelo del lazo a partir del pseudocódigo
anterior. Implemente lazos de distintos tamaños de manera tal de cubrir
los tamaños de las memorias caché de los procesadores actuales. Efectúe
la medición de los tiempos de ejecución de los lazos considerados y en base
a ella determine:
a)
b)
c)
14.
La cantidad de niveles presentes en la jerarquı́a de memoria.
El tamaño de cada nivel.
El grado de asociatividad de cada nivel.
Use un simulador de memoria caché (por ejemplo, Dinero IV) para simular
varias organizaciones de memoria caché para el primer millón de referencias del benchmark GCC. Simular cachés separadas para instrucciones y
datos, de 32-KB y con la misma organización. Simular al menos dos grados
de asociatividades distintos y dos tamaños de bloques distintos. Dibujar
un diagrama en bloques completo de la organización de memoria caché que
logre la mejor tasa de desaciertos.
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
15.
Se le ha encargado el diseño de una memoria caché para un sistema nuevo. Se tienen direcciones de 32 bits y se requieren cachés separadas para
instrucciones y datos. Usted dispone de 16 chips SRAM para realizar el
diseño, los cuales tienen un tiempo de acceso de 1.5 ns. La penalidad de
desacierto para el sistema de memoria es de 8 + 2 × tamaño del bloque
en palabras. El uso de asociatividad agrega 0.2 ns al tiempo de acceso a
la memoria caché. Usando el benchmark GCC, y considerando el primer
millón de referencias a memoria, encontrar las mejores organizaciones de
cachés de instrucciones y datos, dadas las SRAMs disponibles.
16.
La asociatividad usualmente mejora la tasa de desacierto, pero no siempre.
Dé una serie corta de referencias a memoria para la cual una caché asociativa por conjuntos de grado 2 y polı́tica de reempalzo LRU experimenta
más desaciertos que una caché de correspondencia directa del mismo tamaño.
17.
El siguiente programa C es ejecutado (sin optimizaciones) sobre un procesador con una caché que tiene bloques de 8 palabras (32 bytes) y contiene
256 bytes de datos:
int i, j, c, stride, array[512];
...
for (i=0; i < 10000; i++)
for(j=0; j < 512; j = j + stride)
c = array[j] + 17;
Si consideramos solamente la actividad de memoria caché generada por
las referencias al arreglo, y suponenos que los enteros son palabras, ¿cuál
es la tasa de desaciertos esperada cuando la caché es de correspondencia
directa y stride es 256? ¿Y si stride es 255? ¿Podrı́a cualquiera de estos
cambiar si la caché fuera asociativa por conjuntos de grado 2?
18.
19.
Se quiere usar un simulador de memoria caché para simular varias TLB
y organizaciones de memoria virtual. Usar el primer millón de referencias
a memoria del benchmark GCC para esta evaluación. Se quiere conocer
la tasa de desaciertos de TLB para cada una de las siguientes TLBs y
tamaños de página:
a)
TLB de 64 entradas totalmente asociativa y páginas de 4-KB.
b)
TLB de 32 entradas totalmente asociativa y páginas de 8-KB.
c)
TLB de 64 entradas asociativa por conjuntos de grado 8 y páginas
de 4-KB.
d)
TLB de 128 entradas asociativa por conjuntos de grado 4 y páginas
de 4-KB.
Considere un sistema de memoria virtual con las siguientes propiedades:
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
Direcciones virtuales de 40 bits.
Páginas de 16-KB.
Direcciones fı́sicas de 36 bits.
¿Cuál es el tamaño total de la tabla de páginas para cada proceso en este
procesador, suponiendo que cada entrada en la tabla requiere de cuatro
bits adicionales (válido, protección, modificado, uso)?
20.
Colocar un “SI” en los casilleros correspondientes a los siguientes dispositivos si es que estos son accedidos en el proceso de proveer un dato solicitado
por la CPU, para cada fila de la siguiente tabla. Si no son accedidos colocar un “NO”. Si el acceso al dispositivo depende de si hubo algún otro
acierto o desacierto no explicitado en la primer columna, entonces colocar
una “X”. Justificar su respuesta con un breve párrafo para cada fila.
a)
L1 es direccionado por direcciones virtuales.
Evento
Hit L1
Hit L2
b)
Caché L2
Mem. Ppal.
TLB
Tabla Pag.
Swap
L1 es direccionado por direcciones fisicas.
Evento
Hit L1
Falla de
Pag.
21.
Caché L1
Caché L1
Caché L2
Mem. Ppal.
TLB
Tabla Pag.
Swap
Dada una CPU MIPS con hardware de manejo memoria virtual se pide:
a)
Calcular el tamaño del espacio de direcciones virtuales.
b)
Dar la cota máxima de la cantidad de memoria que efectivamente
puede usar un programa.
c)
Calcular el tamaño en bytes de una tabla de traducción de páginas
directa y de una invertida.
d)
Calcular el tiempo de acceso promedio a memoria para una caché direccionada por direcciones virtuales.
Datos:
RAM = 512-MB
SWAP = 256-MB
8 bytes por entrada en tabla de traducción de página.
Tasa de desaciertos de la memoria caché = 5 %
Tiempo de acierto = 2 ns.
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
Penalidad de desacierto de la memoria caché = 40ns
Tasa de desaciertos del TLB = 7 %
Penalidad de desacierto del TLB = 15 ns.
Tasa de falla de páginas = 0.01 %
Penalidad por falla de página = 3 mseg.
Aclare cualquier hipótesis que realice, y justifique las respuestas.
22.
En un sistema de memoria virtual paginada para MIPS, en un instante dado, la dirección virtual 0x7fc123h corresponde a la dirección fı́sica
0x9de123h.
a)
Defina un formato para las entradas de la tabla de traducción de
páginas y dé el contenido de la entrada correspondiente a la dirección
dada.
b)
Dar el contenido de la entrada correspondiente de la TLB suponiendo
acierto en TLB (indicar contenidos de tag y datos de la entrada).
Datos: páginas de 4-KB y TLB totalmente asociativa.
23.
Construir un banco de memoria de 3M × 8bits en base a circuitos integrados de 1M × 4bits para una CPU que tiene un bus de direcciones de
24 bits, y ubicarlo a partir de la dirección 4M de memoria.
24.
Dado el siguiente programa en lenguaje C:
int
i, j, stride;
double array[256];
...
for (i=0; i<100; i++)
for (j=0; j<256; j=j+stride)
procesar( array[j] );
...
Solamente debemos preocuparnos por los accesos a memoria generados
por el arreglo, y cada elemento del arreglo es de 64 bits. La memoria
caché L1 tiene bloques de 16 bytes. Se asume que esta memoria caché es
lo suficientemente grande para mantener todo el arreglo.
25.
a)
Asumiendo que los elementos del arreglo no están inicialmente en la
caché, ¿cuál serı́a la tasa de desaciertos si stride es 2?
b)
Se pretende disminuir la tasa de desaciertos utilizando la técnica de
prefetching, asumiendo que la distancia de prefetch es d = 5. Reescribir el programa anterior incluyendo las instrucciones de prefetch
correspondientes, y recalcular la tasa de desaciertos.
Dado el siguiente programa en lenguaje C:
$Date: 2006/08/14 15:06:35 $
El Sistema de Memoria
Organización de Computadoras - 66:20
double mult(double a, double b)
{
return (a * b);
}
...
double a[512], b[512], c[512];
register int i;
for (i=0; i<512; i++)
a[i] = mult( b[i] , c[i] );
...
Considerar una organización caché de datos L1 2WSA de 8-KB con lı́nea de
64 bytes, y que la llamada a mult() no produce accesos a dicha memoria.
26.
a)
Asumiendo que los elementos de los arreglos no están inicialmente en
la caché, y que los tres están ubicados uno a continuación del otro en
memoria principal ¿cuál es la tasa de desaciertos?
b)
Se pretende disminuir la tasa de desaciertos utilizando la técnica de
array padding. Reescribir el programa anterior (con la menor cantidad
posible de memoria adicional), y recalcular la tasa de desaciertos.
c)
De ser posible, ¿qué otra(s) optimización(es) aplicarı́a al programa
dado? (explique en qué consiste en caso de aplicar alguna).
Dado el siguiente programa en lenguaje C:
#define N 512
int A[N][N], B[N][N];
register int i, j, acum;
acum = 0;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
acum += A[j][i] + B[j][i];
Considerar una organización caché de datos L1 2WSA de 4-KB con lı́nea
de 64 bytes, y polı́tica de reemplazo LRU. El tipo int ocupa 4 bytes.
a)
Asumiendo que los elementos de las matrices no están inicialmente
en la caché, y que ambas están ubicadas una a continuación de la
otra en memoria principal ¿cuál es la tasa de desaciertos?
b)
Se pretende disminuir la tasa de desaciertos aplicando una sola optimización. Determine qué optimización (de las estudiadas en el curso)
aplicarı́a, explique en qué consiste, y vuelva a calcular la tasa de
desaciertos para el programa optimizado.
$Date: 2006/08/14 15:06:35 $
Descargar