Simulación de la
Memoria Cache
Práctica 3
Arquitectura de Computadores
Simulador sim-cache
Intalación
Descargar: simplesim_3v0d.tar.gz
gzip –d & tar –xvf
make config-alpha
make sim-cache
Se genera el ejecutable “sim-cache”
Simulador Cache Inclusiva: sim-cache
./sim-cache
-max:inst
<uint>
#
0 # maximum number of inst's to execute
-cache:dl1
<string>
# dl1:256:32:1:l # l1 data cache config, i.e., {<config>|none}
-cache:dl2
<string>
# ul2:1024:64:4:l # l2 data cache config, i.e., {<config>|none}
-cache:il1
<string>
# il1:256:32:1:l # l1 inst cache config, i.e., {<config>|dl1|dl2|none}
-cache:il2
<string>
#
dl2 # l2 instruction cache config, i.e., {<config>|dl2|none}
<name>:<nsets>:<bsize>:<assoc>:<repl>
Opciones por defecto
<name> - name of the cache being defined
<nsets> - number of sets in the cache
<bsize> - block size of the cache
-cache:dl1
dl1:256:32:1:l # l1 data cache config,
-cache:dl2
ul2:1024:64:4:l # l2 data cache config,
-cache:il1
il1:256:32:1:l # l1 inst cache config,
-cache:il2
dl2 # l2 instruction cache config,
<assoc> - associativity of the cache
<repl> - block replacement strategy, 'l'-LRU, 'f'-FIFO, 'r'-random
Examples:-cache:dl1 dl1:4096:32:1:l
-dtlb dtlb:128:4096:32:r
Simulador sim-cache
./sim-cache -max:inst 100000 gcc-200.eio
sim: ** simulation statistics **
sim_num_insn
100000 # total number of instructions executed
sim_num_refs
25861 # total number of loads and stores executed
dl1.accesses
dl1.hits
dl1.misses
dl1.replacements
dl1.writebacks
25931 # total number of accesses
24211 # total number of hits
1720 # total number of misses
1464 # total number of replacements
744 # total number of writebacks
dl1.miss_rate
0.0663 # miss rate (i.e., misses/ref)
ul2.accesses
3414 # total number of accesses
ul2.hits
ul2.misses
ul2.replacements
ul2.writebacks
ul2.miss_rate
2210 # total number of hits
1204 # total number of misses
0 # total number of replacements
0 # total number of writebacks
0.3527 # miss rate (i.e., misses/ref)
Simulador en código fuente
SimpleScalar: sim-cache
Ficheros: sim-cache.c, cache.c
Función: cache_access (en cache.c)
unsigned int
/* latency of access in cycles */
cache_access(struct cache_t *cp,
/* cache to access */
enum mem_cmd cmd,
/* access type, Read or Write */
md_addr_t addr,
/* address of access */
void *vp,
/* ptr to buffer for input/output */
int nbytes,
/* number of bytes to access */
tick_t now,
/* time of access */
byte_t **udata,
/* for return of user data ptr */
md_addr_t *repl_addr)
/* for address of replaced block */
{
Objetivo de la Práctica 3
Construir un simulador para la cache
exclusiva a partir de sim-cache
Implementación Cache Exclusiva
Se estudian los 6 casos posibles,
independientemente de que sea
lectura o escritura






Caso 1: Acceso al Bloque A
con la cache completamente vacía
Caso 2: Nuevo acceso al Bloque A
Caso 3: Acceso al Bloque B
Caso 4: Acceso al Bloque C
Caso 5: Nuevo acceso al Bloque B
Caso 6: Acceso al Bloque D
L1
L2
Mem A B C D
Caso 1
Acceso al Bloque A


L1
L2
Mem A B C D

Bloque A en L1 y L2 no son
válidos
Fallo en L1
Fallo en L2
Caso 1
Acciones


L1
A
L2
Mem A B C D

Se escribe la TAG en L1
Se marca el bloque como
válido
Equivalente a copiar A en L1
Caso 2
Nuevo Acceso al Bloque A

Acierto en L1
Acciones

L1
A
L2
Mem A B C D
Ninguna (devolver la latencia
de L1)
Caso 3
Acceso al Bloque B



L1
A
L2
Mem A B C D
Fallo en L1
Fallo en L2
Bloque en L2 no es válido
Caso 3
Acciones

L1
A
L2
A
Mem A B C D
Se copia A desde L1 a L2
Caso 3
Acciones


L1
B
L2
A
Mem A B C D
Se copia TAG de B en L1
Se marca el bloque B como
válido
Caso 4
Acceso al Bloque C



L1
B
L2
A
Mem A B C D
Fallo en L1
Fallo en L2
Bloque B en L2 no es válido
Caso 4
Acciones

L1
B
L2
A B
Mem A B C D
Se copia B desde L1 a L2
Caso 4
Acciones



L1
C
L2
A B
Mem A B C D
Se copia B desde L1 a L2
Se copia TAG de C a L1
Se marca el bloque C en L1
como válido
Caso 5: Intercambio
Acceso al Bloque B



L1
C
L2
A B
Mem A B C D
Fallo en L1
Acierto en L2
Bloque B en L2 es válido
Caso 5: Intercambio
Acciones

L1
C
L2
A B
C
Mem A B C D
Se intercambia C en L1 con B
en L2
Caso 5: Intercambio
Acciones

L1
B
L2
A B
C
Mem A B C D
Se intercambia C en L1 con B
en L2
Caso 5: Intercambio
Acciones

L1
B
L2
A C
C
Mem A B C D

Se intercambia C en L1 con B
en L2
No es necesario hacer
writeback de C
Caso 6
Acceso al Bloque D



L1
B
L2
A C
Mem A B C D
Fallo en L1
Fallo en L2
Bloque de B en L2 es válido:
suponer que es el que ocupa
A
Caso 6
Acciones

L1
B
L2
A C
Mem A B C D
Se hace writeback de A
Caso 6
Acciones


L1
B
L2
B C
Mem A B C D
Se hace writeback A
Se copia B en L2
Caso 6
Acciones



L1
D
L2
B C
Mem A B C D
Se hace writeback A
Se copia B en L2
Se actualiza D en L1
Descargar

serdis.dis.ulpgc.es