Post on 07-Mar-2015
Simulación de la Simulación de la Memoria CacheMemoria Cache
Práctica 3 Práctica 3 Arquitectura de ComputadoresArquitectura de Computadores
Simulador sim-cacheSimulador sim-cacheIntalaciónIntalación
Descargar: simplesim_3v0d.tar.gzDescargar: simplesim_3v0d.tar.gz
gzip –d & tar –xvfgzip –d & tar –xvf
make config-alphamake config-alpha
make sim-cachemake sim-cache
Se genera el ejecutable “sim-cache”Se genera el ejecutable “sim-cache”
Simulador Cache Inclusiva: sim-cacheSimulador Cache Inclusiva: sim-cache
./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>
<name> - name of the cache being defined
<nsets> - number of sets in the cache
<bsize> - block size of the cache
<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
Opciones por defecto
-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,
Simulador sim-cacheSimulador sim-cache./sim-cache -max:inst 100000 gcc-200.eio./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 25931 # total number of accesses
dl1.hits 24211 # total number of hits
dl1.misses 1720 # total number of misses
dl1.replacements 1464 # total number of replacements
dl1.writebacks 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 2210 # total number of hits
ul2.misses 1204 # total number of misses
ul2.replacements 0 # total number of replacements
ul2.writebacks 0 # total number of writebacks
ul2.miss_rate 0.3527 # miss rate (i.e., misses/ref)
Simulador en código fuenteSimulador en código fuente
SimpleScalar: sim-cacheSimpleScalar: sim-cache
Ficheros: sim-cache.c, cache.cFicheros: sim-cache.c, cache.c
Función: cache_access (en 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 3Objetivo de la Práctica 3
Construir un simulador para la cache Construir un simulador para la cache exclusiva a partir de sim-cacheexclusiva a partir de sim-cache
Implementación Cache ExclusivaImplementación Cache Exclusiva
Se estudian los 6 casos posibles, Se estudian los 6 casos posibles, independientemente de que sea independientemente de que sea lectura o escrituralectura o escritura
Caso 1: Acceso al Bloque A Caso 1: Acceso al Bloque A
con la cache completamente vacíacon la cache completamente vacía Caso 2: Nuevo acceso al Bloque ACaso 2: Nuevo acceso al Bloque A Caso 3: Acceso al Bloque BCaso 3: Acceso al Bloque B Caso 4: Acceso al Bloque CCaso 4: Acceso al Bloque C Caso 5: Nuevo acceso al Bloque BCaso 5: Nuevo acceso al Bloque B Caso 6: Acceso al Bloque DCaso 6: Acceso al Bloque D
L1
L2
Mem DCBA
Caso 1Caso 1
Acceso al Bloque AAcceso al Bloque A Bloque A en L1 y L2 no son Bloque A en L1 y L2 no son
válidos válidos Fallo en L1 Fallo en L1 Fallo en L2Fallo en L2L1
L2
Mem DCBA
A
Caso 1Caso 1
AccionesAcciones Se escribe la TAG en L1Se escribe la TAG en L1 Se marca el bloque como Se marca el bloque como
válidoválido Equivalente a copiar A en L1Equivalente a copiar A en L1L1
L2
Mem DCBA
A
Caso 2Caso 2
Nuevo Acceso al Bloque ANuevo Acceso al Bloque A Acierto en L1Acierto en L1
AccionesAcciones Ninguna (devolver la latencia Ninguna (devolver la latencia
de L1)de L1)L1
L2
Mem DCBA
A
Caso 3Caso 3
Acceso al Bloque BAcceso al Bloque B Fallo en L1Fallo en L1 Fallo en L2Fallo en L2 Bloque en L2 no es válidoBloque en L2 no es válido
L1
L2
Mem DCA B
A
Caso 3Caso 3
AccionesAcciones Se copia A desde L1 a L2Se copia A desde L1 a L2
L1
L2
Mem DCA
A
B
B
Caso 3Caso 3
AccionesAcciones Se copia TAG de B en L1Se copia TAG de B en L1 Se marca el bloque B como Se marca el bloque B como
válidoválido
L1
L2
Mem DCA
A
B
B
Caso 4Caso 4
Acceso al Bloque CAcceso al Bloque C Fallo en L1Fallo en L1 Fallo en L2Fallo en L2 Bloque B en L2 no es válidoBloque B en L2 no es válido
L1
L2
Mem DBA
A
C
B
Caso 4Caso 4
AccionesAcciones Se copia B desde L1 a L2Se copia B desde L1 a L2
L1
L2
Mem DBA
A B
C
C
Caso 4Caso 4
AccionesAcciones Se copia B desde L1 a L2Se copia B desde L1 a L2 Se copia TAG de C a L1Se copia TAG de C a L1 Se marca el bloque C en L1 Se marca el bloque C en L1
como válidocomo válidoL1
L2
Mem DBA
A B
C
C
Caso 5: IntercambioCaso 5: Intercambio
Acceso al Bloque BAcceso al Bloque B Fallo en L1Fallo en L1 Acierto en L2Acierto en L2 Bloque B en L2 es válidoBloque B en L2 es válido
L1
L2
Mem DCA
A B
B
B
C
Caso 5: IntercambioCaso 5: Intercambio
AccionesAcciones Se intercambia C en L1 con B Se intercambia C en L1 con B
en L2en L2
CL1
L2
Mem DCA
A
B
B
B
Caso 5: IntercambioCaso 5: Intercambio
CL1
L2
Mem DCA
A
B
AccionesAcciones Se intercambia C en L1 con B Se intercambia C en L1 con B
en L2en L2
C
B
Caso 5: IntercambioCaso 5: Intercambio
AccionesAcciones Se intercambia C en L1 con B Se intercambia C en L1 con B
en L2en L2 No es necesario hacer No es necesario hacer
writeback writeback de Cde CCL1
L2
Mem DCA
A
B
C
B
Caso 6Caso 6
Acceso al Bloque DAcceso al Bloque D Fallo en L1Fallo en L1 Fallo en L2Fallo en L2 Bloque de B en L2 es válido: Bloque de B en L2 es válido:
suponer que es el que ocupa suponer que es el que ocupa AA
L1
L2
Mem CBA
A
D
C
B
Caso 6Caso 6
AccionesAcciones Se hace Se hace writeback writeback de Ade A
L1
L2
Mem CBA
A
D
C
B
Caso 6Caso 6
AccionesAcciones Se hace Se hace writeback writeback AA Se copia B en L2Se copia B en L2
L1
L2
Mem CBA
B
D
C
D
Caso 6Caso 6
AccionesAcciones Se hace Se hace writeback writeback AA Se copia B en L2Se copia B en L2 Se actualiza D en L1Se actualiza D en L1
L1
L2
Mem CBA
B
D