Professional Documents
Culture Documents
n
t
i
e
m
p
o
d
e
a
c
i
e
r
t
o
t
i
e
m
p
o
d
e
i
d
e
n
t
i
f
i
c
a
c
i
n
8uscar en el
dlrecLorlo
LsL en cache
el bloque?
Acceder a bloque cache
Selecclonar
palabra
SI
(ac|erto)
t
i
e
m
p
o
d
e
a
c
c
e
s
o
lln
on penalizaci acierto total
T H T T ) 1 ( ! + =
(frecuencia de hits)
ec
! Cmo sabemos que un daLo esL en la
cache?
! ? sl esL, cmo lo enconLramos?
CLI1ICAS DL LMLA2AMILN1C
ec
! olluca de emplazamlenLo:
necesarla ya que exlsLen menos bloques en MC que
bloques en M
ueLermlna en que bloque, o bloques, de MC, puede
cargarse cada bloque de M
! LxlsLen dlferenLes pollucas:
LmplazamlenLo dlrecLo
LmplazamlenLo asoclauvo
LmplazamlenLo asoclauvo por con[unLos
ec
! ara Lodos los e[emplos:
1amano de bloque 128 palabras => k=7
Memorla cache con 8 bloques
Memorla prlnclpal 4k palabras => n = 12
B P
5 7
DF:
00000000.0
.
00000111.1
00001000.0
.
00001111.1
11111000.0
.
11111111.1
.
8loque 0
8loque 1
8loque 31
ec
00001 00101 01001 01101 10001 10101
Memoria
Cache
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
! Cada bloque 8 uene aslgnado un
n|co bloque cache M en donde
ublcarse.
! LsLe bloque cache vlene dado por la
expresln: M = 8 mod nM. Sl nM =
2
m
enLonces M = (m blLs menos
slgnlcauvos de 8)
N Bloque
....
N Bloque
Cache
ec
L1IUL1A
=
8
M
L1IUL1A
DA1CS
V
L1IUL1A V
L1IUL1A
DA1CS
V
acierto
k
m n-m-k
Direccin ofrecida
por la CPU
Posible direccin cache
! Ll acceso al bloque cache
y al dlrecLorlo es dlrecLo.
! ara conocer sl un
bloque de mem. ppal esL
cargado en MC, basLa
comparar las euqueLas
CunLo vale m para los daLos del e[emplo?
ec
! Cada bloque 8 puede ublcarse en
cualqulera de los nM bloques de
cache
00001 00101 01001 01101 10001 10101
Memoria
Cache
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
N Bloque
....
N Bloque
Cache
ec
L1IUL1A
=
8
L1IUL1A V
DA1CS
L1IUL1A V
DA1CS
L1IUL1A V
aclerLo
k
n-k
! ara conocer sl un
bloque de mem. ppal
esL cargado en MC, hay
que comparar Lodas las
euqueLas
ec
! Cada bloque 8 uene aslgnado un
con[unLo [o C y puede ublcarse en
cualqulera de los bloques de cache
que componen dlcho con[unLo
! LsLe con[unLo vlene dado por la
expresln: C = 8 mod nC
00001 00101 01001 01101 10001 10101
Memoria
Cache
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
N Bloque
....
N Bloque
Cache
ec
L1IUL1A
=
8
C
L1IUL1A V
L1IUL1A V
L1IUL1A V
DA1CS
DA1CS
DA1CS
L1IUL1A V
L1IUL1A V
L1IUL1A V
DA1CS
DA1CS
DA1CS
L1IUL1A V
L1IUL1A V
L1IUL1A V
DA1CS
DA1CS
aclerLo
k
m n-m-k
C
0
C
1
C
nC-1
! Ll dlrecLorlo almacena para cada bloque de cache una euqueLa con los n-k-m
blLs que compleLan la dlreccln del bloque de prlnclpal almacenado
! Ll acceso al con[unLo es dlrecLo y al bloque de cache denLro del con[unLo
asoclauvo
>:1/%=! ?$7+ - 6$"$ 7!) ($=!) (+7 +.+-67!@
ec
! Ll valor nM/nC se denomlna grado de
asoclauvldad o numero de vlas de la MC
Crado de asoclauvldad = 1, equlvale a
emplazamlenLo dlrecLo
Crado de asoclauvldad = nM, equlvale a
emplazamlenLo asoclauvo
ec
Lmp|azam|neto Venta[as Inconven|entes
D|recto
Acceso slmple y rpldo AlLa Lasa de fallos cuando
varlos bloques complLen
por el mlsmo marco
Asoc|anvo
Mxlmo aprovechamlenLo de la MC una alLa asoclauvldad
lmpacLa dlrecLamenLe en
el acceso a la MC
Asoc|anvo por
con[untos
Ls un enfoque lnLermedlo enLre
emplazamlenLo dlrecLo y asoclauvo
Ll grado de asoclauvldad afecLa al
rendlmlenLo, al aumenLar el grado de
asoclauvldad dlsmlnuyen los fallos por
compeLencla por un marco
Crado pumo: enLre 2 y 16
Crado ms comun: 2
Al aumenLar el grado de
asoclauvldad aumenLa el
uempo de acceso y el
cosLe hardware
ec
! ju ocurre s| |a MC est ||ena? ju b|oque de cache se debe
desa|o[ar?
! Lspaclo de reemplazamlenLo: con[unLo de poslbles bloques que pueden
ser reemplazados por el nuevo bloque
D|recto: el bloque que reslde en marco que el nuevo bloque uene aslgnado. Al
no exlsur alLernauvas no se requleren algorlLmos de re-emplazamlenLo
Asoc|anvo: cualquler bloque que reslda en de la cache
Asoc|anvo por con[untos: cualquler bloque que reslda en el con[unLo que el
nuevo bloque uene aslgnado
! AlgorlLmos (lmplemenLados en hardware):
A|eator|o: se escoge un bloque del espaclo de re-emplazamlenLo al azar
IIIC: se susuLuye el bloque del espaclo de re-emplazamlenLo que lleve ms
uempo cargado
LkU (leasL recenLly used): se susuLuye el bloque del espaclo de re-
emplazamlenLo que lleve ms uempo sln haber sldo referenclado
LIU (leasL frequenLly used): se susuLuye el bloque del espaclo de re-
emplazamlenLo que haya sldo referenclado en menos ocaslones
ec
! ju ocurre cuando se produce una escr|tura en memor|a?
Se escrlbe slo en la cache? Slo en la memorla prlnclpal? Ln las dos?
! Wr|te-through: 1odas las escrlLuras acLuallzan la cache y la memorla
Al remplazar, se puede ellmlnar la copla de cache: Los daLos esLn en la memorla
8lL de conLrol en la cache: Slo un blL de valldez
! Wr|te-back: 1odas las escrlLuras acLuallzan slo la cache
Al reemplazar, no se pueden ellmlnar los daLos de la cache: ueben ser escrlLos prlmero
en la memorla
8lL de conLrol: 8lL de valldez y blL de suclo
! ju ocurre cuando se produce un fa||o de escr|tura?
! Wr|te a||ocate (con aslgnacln en escrlLura): en un fallo de escrlLura se
lleva el bloque escrlLo a la cache
! No-wr|te a||ocate (sln aslgnacln en escrlLura): en un fallo de escrlLura el
daLo slo se modlca en la M (o nlvel de memorla slgulenLe)
ec
! Comparacln:
WrlLe-Lhrough:
Memorla ( y oLros lecLores ) slempre uenen el ulumo
valor
ConLrol slmple
WrlLe-back:
Mucho menor ancho de banda, escrlLuras muluples en
bloque
Me[or Lolerancla a la alLa laLencla de la memorla
ec
! rocesador con memorla perfecLa (ldeal)
1cpu = n x Cl x 1c
Como n x Cl = n clclos Cu --> 1cpu = n clclos Cu x 1c
! rocesador con memorla real
1cpu = (n clclos Cu + n clclos espera memorla) x 1c
CunLos clclos de espera por la memorla?
n clclos espera memorla = n fallos x Mlss enalLy
n fallos = n ref a memorla x Mlss 8aLe
n ref a memorla = n x AMl(Medla de accesos a memorla por lnsLruccln)
Luego:
n clclos espera memorla = n x AMl x Mlss 8aLe x Mlss enalLy
? nalmenLe
1cpu = [ (n x Cl) + (n x AMl x Mlss 8aLe x Mlss enalLy ) ] x 1c
1cpu = n x [ Cl + (AMl x Mlss 8aLe x Mlss enalLy ) ] x 1c
A2 B C+-6! (+ 2&27!D E B %F (+ &%)="122&!%+)
uene el espaclo de dlseno para la opumlzacln de Mc
ec
! enallzacln medla por lnsLruccln
Comparando
1cpu = n x Cl x Lc
1cpu = n x [ Cl + (AMl x Mlss 8aLe x Mlss enalLy ) ] x Lc
se pueden denlr los clclos de penallzacln medla por lnsLruccln
deblda al comporLamlenLo de la memorla:
enallzacln medla por lnsLruccln =
= AMl x Mlss 8aLe x Mlss enalLy
! 1lempo medlo de acceso a memorla (1MAM)
1MAM = 1lempo lnverudo en accesos a memorla / n accesos =
= (1 de accesos a Mc + 1 de penallzacln por fallos) / n accesos =
= PlL ume + (n de fallos x Mlss enalLy / n accesos)
1MAM = PlL ume + Mlss 8aLe x Mlss enalLy
32
ec
1cpu = n x [ Cl + (AMl x M|ss kate x M|ss ena|ty ) ] x 1c
! LsLudlo de Lecnlcas para:
8educlr la Lasa de fallos
8educlr la penallzacln del fallo
8educlr el uempo de aclerLo (hlL ume)
AumenLar el ancho banda
ec
34
! Las 3 C's
lnlclales (compulsory)
Causados por la 1 referencla a un bloque que no esL en la cache " Pay
que llevar prlmero el bloque a la cache
lnevlLables, lncluso con cache lnnlLa
no depende del Lamano de la Mc. Sl del Lamano de bloque.
Capacldad
Sl la cache no puede conLener Lodos los bloques necesarlos duranLe la
e[ecucln de un programa, habr fallos que se producen al recuperar de
nuevo un bloque prevlamenLe descarLado
ConlcLo
un bloque puede ser descarLado y recuperado de nuevo porque hay oLro
boque que complLe por la mlsma llnea de cache (aunque haya oLras llneas
llbres en la cache)
no se pueden produclr en caches puramenLe asoclauvas.
ec
keduc|r tasa de
fa||os
keduc|r pena||zac|n
por fa||o
keduc|r nempo
de ac|erto
Aumentar ancho de
banda
1amano de bloque
uar prlorldad a las lecLuras
sobre las escrlLuras
Cache pequena y
sencllla
Cache no bloqueanLe
Asoclauvldad
uar prlorldad a la palabra
crluca
CculLar laLencla de
Lraduccln uv =>
ul
Cache mulubanco
1amano de Mc
lusln de buers de
escrlLura
redlccln de vla Cache segmenLada
AlgorlLmo de
reemplazamlenLo
Caches mulunlvel Cache de Lrazas
ec
! AumenLar el Lamano del bloque dlsmlnuye la Lasa de fallos
lnlclales y captura me[or |a |oca||dad espac|a|
! ero se aumenLa la Lasa de fallos de capacldad (menor n
8loques => captura peor |oca||dad tempora|)
Al Lener bloques ms grandes aumenLa el m|ss-rate
Reduce fallos
iniciales
Aumenta fallos
De capacidad
0
5
10
15
20
25
16 bytes 32 bytes 64 bytes 128 bytes 256 bytes
1 KB 4 KB 16 KB 64 KB 256 KB
1amao cache
1amao b|oque
ec
keduc|r tasa de
fa||os
keduc|r pena||zac|n
por fa||o
keduc|r nempo
de ac|erto
Aumentar ancho de
banda
1amano de bloque
uar prlorldad a las lecLuras
sobre las escrlLuras
Cache pequena y
sencllla
Cache no bloqueanLe
Asoclauvldad
uar prlorldad a la palabra
crluca
CculLar laLencla de
Lraduccln uv =>
ul
Cache mulubanco
1amano de MC
lusln de buers de
escrlLura
redlccln de vla Cache segmenLada
AlgorlLmo de
reemplazamlenLo
Caches mulunlvel Cache de Lrazas
ec
Cache Size (KB)
M
i
s
s
R
a
t
e
p
e
r
T
y
p
e
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
1248
1
6
3
2
6
4
1
2
8
1-way
2-way
4-way
8-way
Capacity
Compulsory
Ejemplo: Valores promedio de Miss
Rate para programas de SPEC92
Reemplazamiento: LRU
Tamao bloque: 32 bytes (cte)
Variando: tamao cache, asociatividad
M|ss rate
ec
Cache Size (KB)
M
i
s
s
R
a
t
e
p
e
r
T
y
p
e
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
1248
1
6
3
2
6
4
1
2
8
1-way
2-way
4-way
8-way
Capacity
Compulsory
ec
! Ll aumenLo de la asoclauvldad dlsmlnuye la Lasa
de fallos
! Ll aumenLo de la asoclauvldad aumenLa el
hardware y el uempo de acceso
! uel esLudlo de la grca
Ll paso de emplazamlenLo dlrecLo a asoclauva con 2
con[unLos permlLe dlsmlnulr el Lamano de la cache a
la mlLad
ManLenlendo el Lamano de la cache, no se conslguen
grandes me[oras con ms de 8 vlas
ec
keduc|r tasa de
fa||os
keduc|r pena||zac|n
por fa||o
keduc|r nempo
de ac|erto
Aumentar ancho de
banda
1amano de bloque
uar prlorldad a las lecLuras
sobre las escrlLuras
Cache pequena y
sencllla
Cache no bloqueanLe
Asoclauvldad
uar prlorldad a la palabra
crluca
CculLar laLencla de
Lraduccln uv =>
ul
Cache mulubanco
1amano de MC
lusln de buers de
escrlLura
redlccln de vla Cache segmenLada
AlgorlLmo de
reemplazamlenLo
Caches mulunlvel Cache de Lrazas
ec
! La polluca de reemplazamlenLo aleaLorla neceslLa
menos PW y es ms rplda que el L8u, pero produce
una mayor Lasa de fallos
N V|as
2 4 8
1amao Mc LkU A|eator|o LkU A|eator|o LkU A|eator|o
16k 114.1 117.3 111.7 113.1 10.0 111.8
64k 103.4 104.3 102.4 102.3 .7 100.3
2S6k 2.2 2.1 2.1 2.1 2.1 2.1
G$77!) (+ ($=!) 6!" HIII &%)="122&!%+)
ec
keduc|r tasa de
fa||os
keduc|r pena||zac|n
por fa||o
keduc|r nempo
de ac|erto
Aumentar ancho de
banda
1amano de bloque
uar prlorldad a las lecLuras
sobre las escrlLuras
Cache pequena y
sencllla
Cache no bloqueanLe
Asoclauvldad
uar prlorldad a la palabra
crluca
CculLar laLencla de
Lraduccln uv =>
ul
Cache mulubanco
1amano de Mc
lusln de buers de
escrlLura
redlccln de vla Cache segmenLada
AlgorlLmo de
reemplazamlenLo
Caches mulunlvel Cache de Lrazas
ec
! Ll aumenLo del Lamano de MC reduce la Lasa de fallos
! Ll aumenLo del Lamano de la MC aumenLa la penallzacln por
fallo
! Ll aumenLo del Lamano de MC aumenLa el cosLe del
procesador
! Sl se qulere una MC rplda y baraLa, esLa uene que ser
pequena
! 1enlendo dlferenLes nlveles de MC se puede consegulr
reduclr la penallzacln por fallo
no es lo mlsmo Lransferlr de M a
MC que de L1 a L2
1ener L2 permlLe apllcar pollucas de
pre-busqueda con menos lnconvenlenLes
Cache Size (KB)
M
i
s
s
R
a
t
e
p
e
r
T
y
p
e
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
1248
1
6
3
2
6
4
1
2
8
1-way
2-way
4-way
8-way
Capacity
Compulsory
ec
! Cache mu|nn|ve| (L2, L3, .)
1lempo medlo de acceso a memorla (1MAM): un nlvel
1MAM = PlL ume + Mlss 8aLe x Mlss enalLy
1lempo medlo de acceso a memorla: uos nlveles
1MAM = PlL 1lme L1 + Mlss 8aLe L1 x Mlss enalLy L1
Mlss enalLy L1 = PlL 1lme L2 + Mlss 8aLe L2 x Mlss enalLy L2
=> 1MAM = PlL 1lme L1 + Mlss 8aLe L1 x [PlL 1lme L2 + (Mlss 8aLe L2 x Mlss enalLy L2)]
uenlclones:
1asa de fallos local en una cache (Lx): fallos en cache Lx dlvldldo por el numero
LoLal de accesos a la cache Lx
1asa de fallos global en una cache (Lx): fallos en cache Lx dlvldldo por el numero
LoLal de accesos a memorla generados por el procesador
Consecuencla: 1asa de fallos local en L1 = 1asa de fallos global en L1
La Lasa de fallos global es lo lmporLanLe
L1: AfecLa dlrecLamenLe al procesador => Acceder a un daLo en el clclo del
procesador
L2: AfecLa a la penallzacln de L1 => 8educcln del uempo medlo de acceso
ec
0
10
20
30
40
50
60
70
80
4 8 16 32 64 128 256 512 1024 2048 4096
Tasa fallos local L2 Tasa fallos nivel 1 Tasa fallos global L2
Local L2
global
ec
! 1amblen se puede reduc|r |a tasa de fa||os:
Cache vlcuma
Cpumlzando el cdlgo
re-busqueda PW
re-busqueda SW
ec
! Se propuso por prlmera vez en 10, la
ldea es uullzar una cache pequena
compleLamenLe asoclauva (Cv)
con[unLamenLe con una cache grande
con una asoclauvldad ms llmlLada
(MC)
! Se lnLenLa consegulr que MC Lenga la
mlsma Lasa de fallos que sl fuera
compleLamenLe asoclauva
L[: MC de acceso dlrecLo + Cv asoclauva
uene la mlsma Lasa de fallos que MC con
2 vlas
CPU
registros
M
MC
Cv
ec
! un bloque puede esLar en MC o en
Cv pero nunca en las dos
! Ln la cache vlcuma esLarn aquellos
bloques que han sldo re-emplazados
de la memorla cache
un bloque pasa de MC a Cv cuando se
produce un re-emplazo
un bloque pasa de Cv a MC cuando es
referenclado
CPU
registros
M
MC
Cv
ec
! ara Lodos los e[emplos:
MC de 4 kbyLes
Acceso dlrecLo
236 bloques
1 bloque = 16 byLes
uaLos:
lnL A[1024]
lnL 8[1024]
CunLas poslclones del array por bloque?
CunLas poslclones del array por MC?
ec
! A esL alo[ado en la dlreccln: 0x01000
! 8 esL alo[ado en la dlreccln: 0x04000
! Cdlgo orlglnal:
for (l = 0 l < 1024 l = l + 1)
C = C + (A[l] + 8[l])
numero de fallos sl acceso dlrecLo?
Me[ora sl es asoclauva de 2 vlas?
A[0:3]
A[1020:1023]
A[1016:1019]
A[4:7]
A[8:11]
A[12:1S]
8[0:3]
8[1020:1023]
8[1016:1019]
8[4:7]
8[8:11]
8[12:1S]
A[0]
A[1]
A[2]
A[3]
0x01000
0x01004
0x01008
0x0100C
ec
! Cdlgo orlglnal:
for (l = 0 l < 1024 l = l + 1)
C = C + (A[l] + 8[l])
! Ius|n de arrays: Me[ora la localldad espaclal para dlsmlnulr los
fallos
Colocar las mlsmas poslclones de dlferenLes arrays
en poslclones conuguas de memorla
sLrucL fuslon
lnL A
lnL 8
array[1024]
for (l = 0 l < 1024 l = l + 1)
C = C + (array[l].A + array[l].8)
A[0:3]
A[1020:1023]
A[1016:1019]
A[4:7]
A[8:11]
A[12:1S]
8[0:3]
8[1020:1023]
8[1016:1019]
8[4:7]
8[8:11]
8[12:1S]
2x1024 accesos
2x1024 fallos
A,8[0:1]
A,8[S12:S13]
A,8[S10:S11]
A,8[2:3]
A,8[4:S]
A,8[1022:1023]
1024/2 fallos
2x256 de inicio
Ganancia: 4
A,8[S14:S1S]
Sl MC Luvlera 2 vlas,
se reduclrlan los fallos?
ec
! A|argam|ento de arrays (paddlng): ayuda a reduclr conlcLos
por las dlrecclones aslgnadas
lmpedlr que en cada lLeracln del bucle se complLa por el mlsmo
marco de bloque
lnL A[1028]
lnL 8[1024]
for (l=0 l < 1024 l=l+1)
C = C + (A[l] + 8[l])
A[0:3]
A[1020:1023]
A[1016:1019]
A[4:7]
A[8:11]
A[12:1S]
A[1024:1027]
8[1016:1019]
8[1012:101S]
8[0:3]
8[4:7]
8[8:11]
8[1020:1023]
1024/2 fallos
2x256 de inicio
Ganancia: 4
Sl MC Luvlera 2 vlas,
se reduclrlan los fallos?
ec
- Consldera esLe cdlgo:
for ([=0 [ < 128 [=[+1)
for (l=0 l < 128l=l+1)
C = C A[|][[],
Sl MC Luvlera 2 vlas,
se reduclrlan los fallos?
128x128 accesos
128x128 fallos
16x256 de inicio
Resto (12288)
Lengua[e C: almacena por
las
ec
! Intercamb|o de buc|es: Me[ora la localldad espaclal para
dlsmlnulr los fallos
Ln lengua[e C las maLrlces se almacenan por las, luego se debe varlar
en el bucle lnLerno la columna (lnL A[128][128])
A[0][0:3]
A[7]124:127]
A[7][120:123]
A[0][4:7]
A[0][8:11]
A[0][12:1S]
A[8][0:3]
A[8][4:7]
A[8][8:11]
A[8][12:1S]
A[1S][120:123]
A[1S][124:127]
A[120][0:3]
A[120][4:7]
A[120][8:11]
A[120][12:1S]
A[127][120:123]
A[127][124:127]
A uene 2
14
palabras = 16 kpalabras =>
es 16 veces mayor que MC
1 kpalabras
ec
! Intercamb|o de buc|es:
Acceso por las
for ([=0 [ < 128 [=[+1)
for (l=0 l < 128l=l+1)
C = C A[l][[]
Acceso por columnas
for (l=0 l < 128l=l+1)
for ([=0 [ < 128 [=[+1)
C = C A[l][[]
Sl MC Luvlera 2 vlas,
se reduclrlan los fallos?
128x128 accesos
128x128 fallos
16x256 de inicio
Resto (12288)
128x128/4 fallos
16x256 de inicio
Ganancia: 4
ec
! lusln de bucles:
Me[ora la localldad Lemporal para dlsmlnulr los fallos
luslonar los bucles que usen los mlsmos arrays para usar
los daLos que se encuenLran en cache anLes de
desecharlos
for (l=0 l < 128 l=l+1))
for ([=0 [ < 128[=[+1))
C = C A[l][[]
for (l=0 l < 128l=l+1)
for ([=0 [ < 128[=[+1)
u = u + A[l][[]
for (l=0 l < 128 l=l+1))
for ([=0 [ < 128[=[+1))
C = C A[l][[]
u = u + A[l][[]
128x128x2 accesos
(128x128/4)x2 fallos
(128x128/4)x2 fallos
Ganancia: 4
? sl apllcamos fusln de bucles e lnLercamblo de bucles?
ec
! Anuclpa los fallos de Cache anuclpando las
busquedas anLes de que el procesador demande
el daLo o la lnsLruccln que provocarlan un fallo
LsLa Lecnlca reduce la Lasa de fallos, pero
prlnclpalmenLe la penallzacln por fallo
LsLe upo de cache slo es efecuva con un adecuado
ancho de banda ya que se van a produclr ms
Lransferenclas de bloques de las necesarlas
LsLa Lecnlca es ms efecuva sl se dlspone de una
memorla cache y de un buer, en caso conLrarlo los
bloques pre-buscados (que puede que no es usen)
esLn desalo[ando de MC bloques acuvos
ec
! re-busqueda Pardware:
1lplcamenLe: la Cu busca dos
bloques en un fallo (el referenclado y
el slgulenLe)
Ll bloque buscado se lleva a Mc
Ll prebuscado se lleva a un buer
(prefeLch buer" o sLream buer").
Al ser referenclado pasa a MC
ec
! re-busqueda Soware:
lnsLrucclones especlales de pre-busqueda lnLroducldas por el
compllador
La eclencla depende del compllador y del upo de programa
re-busqueda con desuno en cache (MlS lv, owerC, SA8C
v. ), o en reglsLro (P-A)
lnsLrucclones de pre-busqueda no producen excepclones. Ls
una forma de especulacln.
lunclona blen con bucles y paLrones slmples de acceso a arrays.
Apllcaclones de clculo
lunclona mal con apllcaclones enLeras que presenLan un ampllo
reuso de Cache
Cverhead por las nuevas lnsLrucclones. Ms busquedas. Ms
ocupacln de memorla
ec
keduc|r tasa de
fa||os
keduc|r pena||zac|n
por fa||o
keduc|r nempo
de ac|erto
Aumentar ancho de
banda
1amano de bloque
uar prlorldad a las lecLuras
sobre las escrlLuras
Cache pequena y
sencllla
Cache no bloqueanLe
Asoclauvldad
uar prlorldad a la palabra
crluca
CculLar laLencla de
Lraduccln uv =>
ul
Cache mulubanco
1amano de Mc
lusln de buers de
escrlLura
redlccln de vla Cache segmenLada
AlgorlLmo de
reemplazamlenLo
Caches mulunlvel Cache de Lrazas
ec
! uar prlorldad a las lecLuras sobre las escrlLuras
un fallo de lecLura puede lmpedlr la conunuacln de la
e[ecucln del programa un fallo de escrlLura puede oculLarse
8uer de escrlLuras (rpldo). ueposlLar en buer las palabras
que uenen que ser acLuallzadas en M y conunuar e[ecucln.
La Lransferencla del buer a M se reallza en paralelo con la
e[ecucln del programa
8C8LLMA: podemos esLar lnLenLando leer una palabra que
Lodavla esL en el buer
! uar prlorldad a palabras crlucas
Cuando la palabra sollclLada se carga en memorla cache se
envla al procesador, sln esperar a la carga del bloque compleLo
roblema. Localldad espaclal: alLa probabllldad de acceder a
conunuacln a la slgulenLe palabra en secuencla.
ec
keduc|r tasa de
fa||os
keduc|r pena||zac|n
por fa||o
keduc|r nempo
de ac|erto
Aumentar ancho de
banda
1amano de bloque
uar prlorldad a las lecLuras
sobre las escrlLuras
Cache pequena y
sencllla
Cache no bloqueanLe
Asoclauvldad
uar prlorldad a la palabra
crluca
CculLar laLencla de
Lraduccln uv =>
ul
Cache mulubanco
1amano de Mc
lusln de buers de
escrlLura
redlccln de vla Cache segmenLada
AlgorlLmo de
reemplazamlenLo
Caches mulunlvel Cache de Lrazas
ec
! Ll acceso al dlrecLorlo y la comparacln de Lags consume
uempo
! L[emplo: Comparacln de acceso a un daLo en cache dlrecLa y
en cache asoclauva por con[unLos con 2 vlas
L1IUL1A
AL M8
!"#$%&'
0
1
2
3
)* +,-./ $0123-, 4
+!&'
MUL1ILL
CCMAkA
AL
8
5
2 2
9
L1IUL1A
AL NC
0
1
5" +,-./ $0123-, 4
+!&'
MUL1ILL
AL
8
6
1 2
9
{
!"#$%&'
CCMAkA
Directo Asociativo por conjuntos 2 vas
ec
keduc|r tasa de
fa||os
keduc|r pena||zac|n
por fa||o
keduc|r nempo
de ac|erto
Aumentar ancho de
banda
1amano de bloque
uar prlorldad a las lecLuras
sobre las escrlLuras
Cache pequena y
sencllla
Cache no bloqueanLe
Asoclauvldad
uar prlorldad a la palabra
crluca
CculLar laLencla de
Lraduccln uv =>
ul
Cache mulubanco
1amano de Mc
lusln de buers de
escrlLura
redlccln de vla Cache segmenLada
AlgorlLmo de
reemplazamlenLo
Caches mulunlvel Cache de Lrazas
ec
66
! Cache segmenLada
SegmenLar los accesos a la cache permlLe aumenLar el
ancho de banda.
roblema: lncremenLo de los clclos de laLencla (ver
evolucln caches). Ms clclos de relo[ enLre el lanzamlenLo
de un Lu y el uso de los daLos que el Lu proporclona
Ms problemas: Mayor penallzacln en los salLos mal
predlchos
L[emplos: n de eLapas del acceso a la cache en dlferenLes
procesadores
enuum 1 eLapa
ue enuum ro a enuum lll 2 eLapas
enuum 4 4 eLapas
ec
1cn|ca
1asa
fa||os
ena|
fa||o
1|empo
ac|erto
Ancho
banda
Coste nW ]
Comp|e[|dad
ComenLarlo
Aumento tamao de
b|oque
+ -
0
1rlvlal. L2 de enuum 4 usa
128 byLes
Aumento
asoc|anv|dad
+ -
1 AmpllamenLe usado
Aumento tamao de
MC
+ -
1
AmpllamenLe usado,
especlalmenLe en L2
Cache V|cnma
+ -
1 8asLanLe senclllo
Cpnm|zac|n de|
comp||ador
+
0
Ll soware presenLa
oporLunldades de me[ora.
Algunos compuLadores uenen
opclones de opumlzacln
rebsqueda nW
+ +
2 lnsLr.,
3 daLa
Muchos procesadores
prebuscan lnsLrucclones. AMu
CpLeron y enuum 4
prebuscan daLos.
rebsqueda SW
+ +
3
neceslLa cache no bloqueanLe.
Ln muchas Cus.
ec
68
1cn|ca
1asa
fa||os
ena|
fa||o
1|empo
ac|erto
Ancho
banda
Coste nW ]
Comp|e[|dad
Comentar|o
r|or|dad a |as |ecturas
+
1 AmpllamenLe usado
r|or|dad a |a pa|abra
cr|nca
+
2 AmpllamenLe usado
Cache mu|nn|ve|
+
2
AmpllamenLe usado. Ms
comple[o sl Lamano de bloque
en L1 y L2 dlsunLos.
Cache pequea y
senc|||a
+
0 1rlvlal ampllamenLe usado.
Cache mu|nbanco
+
1 Ln L2 de CpLeron y nlagara
Cache segmentada
+
1 AmpllamenLe usado
ec
6
# Compilador: Optimizacin de cdigo
5) Calculo por bloques( Blocking): Mejora la localidad temporal para
disminuir los fallos de capacidad
/* Antes */
for (i=0; i < N; i=i+1)
for (j=0; j < N; j=j+1)
{r = 0;
for (k=0; k < N; k=k+1)
r = r + y[i][k]*z[k][j];
x[i][j] = r;
};
$ Dos bucles internos. Para cada valor de i:
% Lee todos los NxN elementos de z
% Lee N elementos de 1 fila de y
% Escribe N elementos de 1 fila de x
$ Fallos de capacidad dependen de N y Tamao de la
cache:
$ Idea: calcular por submatrices BxB que permita el
tamao de la cache
antes
Despus
ec
70
# Compilador: Optimizacin de cdigo
5) Calculo por bloques( Blocking): Mejora la localidad temporal para
disminuir los fallos de capacidad
/* Despues */
for (jj=0;jj < N; jj=jj+B)
for (kk=0;kk < N; kk=kk+B)
for (i=0; i < N; i=i+1)
for (j=jj; j < min(jj+B-1,N); j=j+1)
{r = 0;
for (k=kk; k < min(kk+B-1,N); k=k+1)
r = r + y[i][k]*z[k][j];
x[i][j] = x[i][j]+r;
};
$ B Factor de bloque (Blocking Factor)
1,00 1,50 2,00 2,50 3,00
vpenta
gmty
tomcatv
btrix
mxm
spice
cholesky
Fusin de array Intercambio de bucles Fusin de bucles Blocking
Mejora de rendimiento
ec
71
! L[emplo: roducLo de maLrlces 6x6 (sln
blocklng)
k 2
l
[
!
l
[ k
k
l = 0, [ = 0, k = 0..3
l = 0, [ = 1..3 , k = 0..3
Al procesar la 2 fila de Y (i=1) se necesita de nuevo 1 col de Z:
Est todava en la cache? Cache insuficiente provoca mltiples fallos
sobre los mismos datos
l[ =
?
lk
k[
k
ec
72
! L[emplo blocklng": Con 8locklng (8=3)
k 2
l
[
!
l
[ k
k
l = 0, [ = 0, k = 0..2
l = 0, [ = 1..2 , k = 0..2
Evidentemente, los elementos
de X no estn completamente
calculados
ec
73
! L[emplo blocklng": Con 8locklng (8=3)
k 2
l
[
!
l
[ k
k
l = 1, [ = 0, k = 0..2
l = 1, [ = 1..2 , k = 0..2
Idea: Procesar el bloque
3x3 de Z antes de quitarlo
de la cache
ec
74
! Con 8locklng (8=3). Algunos pasos despues...
k 2
l
[
!
l
[ k
k
l = 0, [ = 0, k = 3..3
l = 0, [ = 1..2 , k = 3..3
Y ya empezamos a tener
elementos de X
completamente calculados!
ec
! Cache con prebusqueda sofware (e[emplo)
Cache 8 k8 dlrecLa, bloque:16 byLes, wrlLe-back (con aslgnacln en escrlLura)
uaLos: a(3,100), b(101,3). LlemenLo arrays = 8 byLes. Cache lnlclalmenLe vacla.
Crdenacln en memorla: por las
1 bloque cache = 2 palabras (elemenLos)
! rograma (sln prebusqueda):
for (l:=0 l<3 l:=l+1)
for ([:=0 [<100 [:=[+1)
a[l][[] := b[[][0] b[[+1][0]
! lallos
Acceso a elemenLos de a": Se escrlben y acceden en cache Lal como esLn almacenados en
memorla. Cada acceso a memorla proporclona dos palabras (beneclo de localldad espaclal).
lallos a" = (3x100)/2 = 130
Acceso a elemenLos de b" (sl lgnoramos fallos de conlcLo): un fallo por cada valor de [
cuando l=0 => 101 fallos. ara los resLanLes valores de l, los elemenLos de b ya esLn en la
cache.
1oLal fallos: 130+101 = 231
ec
! Cache con prebsqueda sofware (e[emp|o)
Suposlcln: La penallzacln por fallo es de Lal duracln que se neceslLa lnlclar la prebusqueda
7 lLeraclones anLes.
ldea: parur bucle
/* para i=0 (prebusca a y b) */
for (j:=0; j<100; j:=j+1) {
prefetch (b[j+7][0]); /* b[j][0] para 7 iteraciones ms tarde */
prefetch (a[0][j+7]); /* a[0][j] para 7 iteraciones ms tarde */
a[0][j] := b[j][0] * b[j+1][0] ; }
/* para i=1,2 (prebusca slo a, ya que b ya est en cache) */
for (i:=1; i<3; i:=i+1)
for (j:=0; j<100; j:=j+1) {
prefetch (a[i][j+7]); /* a[i][j] para 7 iteraciones ms tarde */
a[i][j] := b[j][0] * b[j+1][0] ; }
1oLal fallos 3 !7/2! + 7 = 1 fallos
lnsLrucclones exLra (los prefeLch): 1002 + 2001 = 400
lallos evlLados = 231 -1 = 232
76
lallos:
!7]2!
lallos: 7
lallos: 2 * !7/2! (para l=1,2)
ec
77
! Ius|n de buers de escr|tura
ldea: lnclulr en un mlsmo buer muluples palabras consecuuvas para:
Cpumlzar las Lransferenclas buer memorla prlnclpal
8educlr los campos de dlreccln de las enLradas del buer
Sl el buer conuene bloques modlcados, chequear la dlreccln del nuevo daLo
para ver sl colnclde con la dlreccln de alguna enLrada del buer. Sl hay
colncldencla, no aslgnar una nueva enLrada del buer, comblnar los nuevos daLos
en la mlsma enLrada
uullzado en Sun 11 (nlagara)
! L[emplo: buer de escrlLura sln y con fusln
Cada escrlLura con su
dlreccln
una sola dlreccln
para 4 escrlLuras
consecuuvas
- 8uer de escr|tura con
4 entradas
- Cada entrada: 4
pa|abras de 8 bytes
ec
! Caches s|mp|es y pequeas
una cache pequena se pueda lnLegrar [unLo al procesador
evlLando la penallzacln en uempo del acceso al exLerlor
1lempo de propagacln versus uempo de clclo del procesador
L[emplo: Lres generaclones del procesadores AMu (k6, ALhlon y CpLeron) han manLenldo
el mlsmo Lamano para las caches L1
Slmple (cache dlrecLa o grado de asoclauvldad pequeno)
Ln cache dlrecLa se puede solapar chequeo de Lags y acceso al daLo, puesLo que el daLo slo
puede esLar en un lugar
Ll aumenLo del numero de vlas puede aumenLar los uempos de comparacln de Lags
L[emplo: lmpacLo del Lamano de la cache y la asoclauvldad sobre el uempo de acceso
(Lecnologla 0 nm)
-
0,50
1,00
1,50
2,00
2,50
16 KB 32 KB 64 KB 128 KB 256 KB 512 KB 1 MB
Cache size
A
c
c
e
s
s
t
i
m
e
(
n
s
)
1-way 2-way 4-way 8-way
ec
7
o Idea
Ocultar la latencia de un fallo de cache solapndolo con otras
instrucciones independientes
- Auu 83,86,86
- .........
- .........
- Lu 81, dlr
- .........
- .........
- Auu 84,84,81
PREBUSCAR: Caches con prebsqueda
NO BLOQUEAR: Cache que no bloquean
(Se siguen ejecutando instrucciones despus del
LD. El ADD no se ejecuta hasta que R1 est
disponible)
# Cache sin bloqueo ( non-blocking, lockup-free )
ec
80
o Permite que la ejecucin siga aunque se produzca un fallo mientras no se
necesite el dato. (Se aplica a la cache de datos).
o Un fallo sin servir (hit under 1 miss). Sigue ejecutando y proporcionando
datos que estn en cache
! HP7100, Alpha 21064
o Mltiples fallos sin servir (hit under multiple misses)
! R12000 (4) , Alpha21264 (8), HP8500 (10), PentiumIII y 4 ( 4),
Sandy-Bridge (10)
o Los beneficios dependen de la planificacin de instrucciones
o Requiere interfase de memoria ms complejo ( mltiples bancos )
Memorla
Cu
Cu
Memorla
Cu
Cu
Memorla
Cu
Memorla
Memorla
lallo: La Cu para hasLa Lener el daLo
lallo AclerLo
lallos
La Cu para cuando neceslLa daLo
# Cache sin bloqueo ( non-blocking, lockup-free )
Cache con b|oqueo
Cache s|n b|oqueo: un fa||o s|n serv|r
Cache s|n b|oqueo: var|os fa||os s|n serv|r
ec
81
o Hay que asociar un registro a la peticin cuando se inicia un load
sin bloqueo
LD R1,dir
o Informacin necesaria en el control de la funcin
Direccin del bloque que produce el fallo
Registro destino donde se almacena el dato
Formato del dato (Byte, half-word, word)
tem en el bloque que produce el fallo
o Implementacin (MSHR, Miss Status Holding Register):
ulreccln
bloque
8lL
valldo
8lL
valldo
uesuno lormaLo
8lL
valldo
uesuno lormaLo
8lL
valldo
uesuno lormaLo
8lL
valldo
uesuno lormaLo
alabra 0
alabra 1
alabra 2
alabra 3
Tipos de fallos
Fallo primario (1 de
bloque)
Fallo secundario
(restantes mismo bloque)
Estructura del MSHR para
bloque de 4 palabras
(Solo un fallo por palabra)
# Cache sin bloqueo ( non-blocking, lockup-free )
ec
82
Optimizaciones para aumentar el ancho de banda
# Cache sin bloqueo ( non-blocking, lockup-free )
o Porcentaje de tiempo de parada del procesador por fallos en la cache
(Caso base: cache con bloqueo = 100%)
o Datos experimento: Cache directa 8 KB, Bloque 32 B, Miss Penalty 16
ciclos
I IN1
(SLC 92)
ec
83
! Cache mu|nbanco
ulvldlr la cache en bancos lndependlenLes que
puedan soporLar accesos slmulLneos.
L[emplo: L2 de Sun 11 (nlgara) uene 4 bancos, L2 de
AMu CpLeron uene 2 bancos
La organlzacln en bancos funclona blen cuando
los accesos se dlspersan de forma naLural enLre los
dlferenLes bancos
Ll enLrelazamlenLo de orden ba[o suele funclonar
blen
8loques consecuuvas esLn en bancos consecuuvos
L[emplo: ublcacln de bloques en una cache con 4
bancos con enLrelazamlenLo de orden ba[o