Tema 7: Memòria cau
25.1 Disseny bàsic
Enunciat: Problema 16.1.
Memòria principal de 64 bytes (adreces de 6 bits), memòria cau de 16 bytes, correspondència directa, blocs de 4 bytes (\(b = 2\)). L’MC té \(16/4 = 4\) línies (\(n_l = 2\)). L’adreça es descompon en:
\[A = \underbrace{\cdot\cdot}_{2\text{ bits etiqueta}} \; \underbrace{\cdot\cdot}_{2\text{ bits índex}} \; \underbrace{\cdot\cdot}_{2\text{ bits desplaçament}}\]
a) Adreça 0x39 \(= 57 = 111001_2\):
\[\underbrace{11}_{\text{etiqueta}=3}\;\underbrace{10}_{\text{índex}=2}\;\underbrace{01}_{\text{desplaçament}=1}\]
La dada correspon a la línia 2, amb etiqueta 3 i byte 1 dins el bloc.
b) Mapatge de blocs a línies (\(\text{índex} = \text{bloc} \bmod 4\)):
| Bloc | 0 | 1 | 3 | 7 | 10 | 12 | 15 |
|---|---|---|---|---|---|---|---|
| Línia | 0 | 1 | 3 | 3 | 2 | 0 | 3 |
Evolució de la seqüència (MC inicialment buida):
| # | Bloc | Línia | Contingut línia | En/F |
|---|---|---|---|---|
| 1 | 0 | 0 | buida | F |
| 2 | 1 | 1 | buida | F |
| 3 | 0 | 0 | bloc 0 | En |
| 4 | 3 | 3 | buida | F |
| 5 | 12 | 0 | bloc 0 \(\neq\) 12 | F |
| 6 | 10 | 2 | buida | F |
| 7 | 3 | 3 | bloc 3 | En |
| 8 | 7 | 3 | bloc 3 \(\neq\) 7 | F |
| 9 | 12 | 0 | bloc 12 | En |
| 10 | 15 | 3 | bloc 7 \(\neq\) 15 | F |
| 11 | 3 | 3 | bloc 15 \(\neq\) 3 | F |
Encerts: 3. Fallades: 8. Taxa d’encerts: \(h = 3/11 \approx 27{,}3\ \%\).
De les 8 fallades, 7 són d’arrencada en fred (cold-start: el primer accés a cadascun dels blocs 0, 1, 3, 12, 10, 7 i 15) i la de l’accés 11 és de conflicte: el bloc 3, carregat a l’accés 4, ha estat expulsat pels blocs 7 i 15, que competeixen amb ell per la línia 3 (en una memòria cau completament associativa de la mateixa capacitat, aquest accés seria un encert). El conflicte a la línia 3 és especialment greu: els tres blocs s’hi expulsen l’un a l’altre, i el bloc 3 només hi encerta un cop (a l’accés 7).
Enunciat: Problema 16.2.
Processador de 16 bits. MC de correspondència directa, 256 bytes, blocs de 16 bytes. L’MC té \(256/16 = 16\) línies. Descomposició de l’adreça (16 bits):
\[A = \underbrace{\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot}_{8\text{ bits etiqueta}} \; \underbrace{\cdot\cdot\cdot\cdot}_{4\text{ bits índex}} \; \underbrace{\cdot\cdot\cdot\cdot}_{4\text{ bits desplaçament}}\]
Exemples de descomposició:
0x4534: etiqueta =0x45, índex =0x3, desplaçament =0x4.0x13A4: etiqueta =0x13, índex =0xA, desplaçament =0x4.0x60A0: etiqueta =0x60, índex =0xA, desplaçament =0x0.
Cada accés L o E transfereix una paraula de 2 bytes (processador de 16 bits).
a) Escriptura immediata sense assignació.
Comportament per tipus d’accés:
- L encert: es llegeix de l’MC. Cap tràfic amb MP.
- L fallada: es llegeix el bloc sencer d’MP (16 B), es carrega a l’MC i se’n llegeix la dada.
- E encert: s’escriu a l’MC i a l’MP (2 B, a través de la memòria intermèdia d’escriptura).
- E fallada: s’escriu directament a MP (2 B). L’MC no s’altera.
Les columnes Lect. MC i Escr. MC indiquen si l’accés llegeix o escriu la matriu de dades de l’MC (la dada lliurada a la CPU, la càrrega d’un bloc, l’escriptura d’una dada o la còpia d’un bloc modificat cap a MP).
| # | Tipus | Adr. | Etiq. | Índ. | En/F | Llegits MP | Escrits MP | Lect. MC | Escr. MC |
|---|---|---|---|---|---|---|---|---|---|
| 1 | L | 4534 |
45 |
3 |
F | 16 | 0 | S | S |
| 2 | L | 4568 |
45 |
6 |
F | 16 | 0 | S | S |
| 3 | E | 13A4 |
13 |
A |
F | 0 | 2 | N | N |
| 4 | E | 13A8 |
13 |
A |
F | 0 | 2 | N | N |
| 5 | L | 3560 |
35 |
6 |
F | 16 | 0 | S | S |
| 6 | E | 453C |
45 |
3 |
En | 0 | 2 | N | S |
| 7 | E | 60A0 |
60 |
A |
F | 0 | 2 | N | N |
| 8 | L | 453C |
45 |
3 |
En | 0 | 0 | S | N |
| 9 | E | 3900 |
39 |
0 |
F | 0 | 2 | N | N |
| 10 | L | A238 |
A2 |
3 |
F | 16 | 0 | S | S |
Justificació dels casos clau:
- #3 i #4 (
E 13A4,E 13A8): ambdues escriptures fallen a la líniaA(buida). Sense assignació, cap de les dues carrega el bloc → la línia resta buida i la segona escriptura també falla. - #6 (
E 453C): la línia 3 conté el bloc carregat al pas 1 (etiqueta45) → encert. S’escriu a MC i a MP (2 B). - #8 (
L 453C): la línia 3 encara conté l’etiqueta45→ encert. - #10 (
L A238): etiquetaA2\(\neq\)45a la línia 3 → fallada, reemplaça.
b) Escriptura retardada amb assignació.
Comportament per tipus d’accés:
- L/E encert: accés a MC. Cap tràfic amb MP. En cas d’escriptura, \(D \leftarrow 1\).
- L/E fallada, \(D=0\): es llegeix el bloc d’MP (16 B) i es carrega a l’MC.
- L/E fallada, \(D=1\): es llegeix el bloc antic de l’MC i es copia a MP (16 B), i després es llegeix el nou bloc d’MP (16 B) i es carrega a l’MC.
A les columnes Lect. MC i Escr. MC, tota fallada escriu l’MC (càrrega del bloc i, si és E, la dada); l’MC es llegeix quan la dada es lliura a la CPU (L) o quan cal copiar un bloc modificat cap a MP. La columna D dona el bit de modificació de la línia abans de l’accés i, si canvia, també el de després (abans→després).
| # | Tipus | Adr. | Etiq. | Índ. | En/F | D | Llegits MP | Escrits MP | Lect. MC | Escr. MC |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | L | 4534 |
45 |
3 |
F | 0 | 16 | 0 | S | S |
| 2 | L | 4568 |
45 |
6 |
F | 0 | 16 | 0 | S | S |
| 3 | E | 13A4 |
13 |
A |
F | 0→1 | 16 | 0 | N | S |
| 4 | E | 13A8 |
13 |
A |
En | 1 | 0 | 0 | N | S |
| 5 | L | 3560 |
35 |
6 |
F | 0 | 16 | 0 | S | S |
| 6 | E | 453C |
45 |
3 |
En | 0→1 | 0 | 0 | N | S |
| 7 | E | 60A0 |
60 |
A |
F | 1 | 16 | 16 | S | S |
| 8 | L | 453C |
45 |
3 |
En | 1 | 0 | 0 | S | N |
| 9 | E | 3900 |
39 |
0 |
F | 0→1 | 16 | 0 | N | S |
| 10 | L | A238 |
A2 |
3 |
F | 1→0 | 16 | 16 | S | S |
Justificació dels casos clau:
- #3 (
E 13A4): amb assignació, es carrega el bloc d’MP (16 B) a la líniaAi s’escriu la dada a l’MC (\(D \leftarrow 1\)). - #4 (
E 13A8): encert (el bloc és a la líniaAdes del pas 3). S’escriu a MC, \(D\) ja és 1. - #7 (
E 60A0): la líniaAconté l’etiqueta13amb \(D=1\). Fallada: cal copiar primer el bloc antic a MP (16 B escrits), després carregar el nou bloc d’MP (16 B llegits), i finalment escriure la dada (\(D \leftarrow 1\)). - #10 (
L A238): la línia 3 conté l’etiqueta45amb \(D=1\) (des del pas 6). Fallada amb còpia del bloc modificat a MP: 16 B escrits + 16 B llegits.
c) Resum comparatiu:
| Escr. immediata s/a | Escr. retardada a/a | |
|---|---|---|
| Taxa de fallades | 80 % (8/10) | 70 % (7/10) |
| Bytes llegits d’MP | 64 | 112 |
| Bytes escrits a MP | 10 | 32 |
| Bytes totals MP | 74 | 144 |
L’escriptura retardada amb assignació té una taxa de fallades inferior (l’accés #4 passa de fallada a encert perquè el bloc es va assignar al pas 3), però genera més tràfic total amb MP: cada assignació per escriptura carrega un bloc de 16 B, i cada escriptura a MP d’un bloc modificat n’escriu 16 B més. L’escriptura immediata sense assignació genera menys tràfic perquè les escriptures que fallen només transfereixen la paraula escrita (2 B), sense carregar blocs sencers.
25.2 Rendiment
Enunciat: Problema 16.6.
Dades: \(p_e = 20\ \%\), \(p_m = 1/3\), \(t_h = 10\) ns, \(t_{bloc} = 100\) ns, \(h_1 = 0{,}9\) (immediata s/a), \(h_2 = 0{,}85\) (retardada a/a).
a) Aplicant Equació 7.1, amb el temps de penalització mitjà per fallada de cada política (Essencial 7.2; per a l’escriptura retardada, Essencial 7.3). Se suposa que la taxa de fallades és independent del tipus d’accés: així, la fracció de fallades que corresponen a escriptures coincideix amb el percentatge d’escriptures \(p_e\).
Escriptura immediata sense assignació (\(m_1 = 0{,}10\)): les fallades de lectura paguen \(t_{bloc} + t_h\) i les d’escriptura paguen 0 (la memòria intermèdia absorbeix l’escriptura):
\[t_{p_1} = (1 - p_e)(t_{bloc} + t_h) = 0{,}80 \cdot 110 = 88 \text{ ns}\]
\[\text{TAM}_1 = t_h + m_1 \cdot t_{p_1} = 10 + 0{,}10 \cdot 88 = \mathbf{18{,}8} \text{ ns}\]
Escriptura retardada amb assignació (\(m_2 = 0{,}15\)): la penalització depèn de si el bloc expulsat està modificat:
\[t_{p_2} = (1 + p_m) \cdot t_{bloc} + t_h = \frac{4}{3} \cdot 100 + 10 = 133{,}3 + 10 \approx 143{,}3 \text{ ns}\]
\[\text{TAM}_2 = t_h + m_2 \cdot t_{p_2} = 10 + 0{,}15 \cdot 143{,}3 \approx 10 + 21{,}5 = \mathbf{31{,}5} \text{ ns}\]
L’escriptura immediata sense assignació és més ràpida (\(18{,}8\) vs. \(31{,}5\) ns). Té una taxa de fallades inferior (\(10\ \%\) vs. \(15\ \%\)) i, sobretot, una penalització mitjana per fallada molt menor: les fallades d’escriptura no paguen penalització i les de lectura no generen escriptures de blocs modificats a MP. La penalització mitjana de l’escriptura retardada és un 63 % més gran (\(143{,}3\) vs. \(88\) ns).
b) Per a un programa de només lectures (\(p_e = 0\)), ambdues polítiques es comporten de manera idèntica: en absència d’escriptures, no hi ha diferència entre escriptura immediata i retardada (\(p_m = 0\), cap bloc es modifica), i ambdues polítiques carreguen blocs a l’MC exactament igual en les fallades de lectura. La taxa de fallades seria la mateixa per a ambdues i la penalització també (\(t_{bloc} + t_h = 110\) ns), de manera que cap de les dues alternatives seria més ràpida que l’altra.
Enunciat: Problema 16.7.
Dades: \(\text{CPI}_{ideal} = 1{,}5\), \(t_c = 10\) ns, \(n_r = 1{,}6\) referències/instrucció. MC de dades amb escriptura retardada amb assignació.
| MC Instruccions | MC Dades | |
|---|---|---|
| Accessos per instrucció | 1 | 0,6 |
| \(m\) | 4 % | 10 % |
| \(t_p\) (bloc no modif.) | 10 cicles | 15 cicles |
| \(t_p\) (bloc modif.) | — | 20 cicles |
| \(p_m\) | — | 20 % |
a) Penalització per fallada a l’MC de dades (escriptura retardada):
\[t_{pd} = (1 - p_m) \cdot 15 + p_m \cdot 20 = 0{,}80 \cdot 15 + 0{,}20 \cdot 20 = 12 + 4 = 16 \text{ cicles}\]
El percentatge d’escriptures (\(p_e = 40\ \%\)) no és necessari per resoldre el problema: la penalització de l’MC de dades ja es dona directament en funció de si el bloc reemplaçat és modificat o no.
TAM ponderat per la fracció d’accessos de cada MC:
\[\text{TAM} = t_h + \frac{1}{n_r} \cdot m_i \cdot t_{pi} + \frac{0{,}6}{n_r} \cdot m_d \cdot t_{pd}\]
\[= 1 + \frac{1}{1{,}6} \cdot 0{,}04 \cdot 10 + \frac{0{,}6}{1{,}6} \cdot 0{,}10 \cdot 16\]
\[= 1 + 0{,}625 \cdot 0{,}4 + 0{,}375 \cdot 1{,}6 = 1 + 0{,}25 + 0{,}6 = \mathbf{1{,}85} \text{ cicles}\]
b) Cicles de penalització per instrucció:
\[\text{CPI}_{penal,i} = m_i \cdot 1 \cdot t_{pi} = 0{,}04 \cdot 10 = 0{,}4 \text{ cicles/instr.}\]
\[\text{CPI}_{penal,d} = m_d \cdot 0{,}6 \cdot t_{pd} = 0{,}10 \cdot 0{,}6 \cdot 16 = 0{,}96 \text{ cicles/instr.}\]
\[\text{CPI} = \text{CPI}_{ideal} + \text{CPI}_{penal,i} + \text{CPI}_{penal,d} = 1{,}5 + 0{,}4 + 0{,}96 = 2{,}86\]
\[t_{exe} = \text{CPI} \cdot t_c = 2{,}86 \cdot 10 = \mathbf{28{,}6} \text{ ns/instrucció}\]
Observació: les fallades de memòria cau incrementen el CPI un \(90{,}7\ \%\) respecte del valor ideal (d’\(1{,}5\) a \(2{,}86\)). L’MC de dades, amb només el \(37{,}5\ \%\) dels accessos, contribueix el \(70{,}6\ \%\) de la penalització (\(0{,}96 / 1{,}36\)), a causa de la seva taxa de fallades més alta i la penalització per les escriptures de blocs modificats a MP.
25.3 Associativitat i multinivell
Enunciat: Problema 16.10.
Processador de 16 bits. MC associativa de 2 vies, 1 KiB, blocs de 16 bytes, escriptura immediata sense assignació, LRU. L’MC té \(1024/16 = 64\) línies organitzades en \(64/2 = 32\) conjunts de 2 vies.
Descomposició de l’adreça (16 bits):
\[A = \underbrace{\cdot\cdot\cdot\cdot\cdot\cdot\cdot}_{7\text{ bits etiqueta}} \; \underbrace{\cdot\cdot\cdot\cdot\cdot}_{5\text{ bits conjunt}} \; \underbrace{\cdot\cdot\cdot\cdot}_{4\text{ bits desplaçament}}\]
El conjunt es determina pels bits [8:4] i l’etiqueta pels bits [15:9]. Descomposició de les adreces:
| Adreça | Bloc MP | Conjunt | Etiqueta |
|---|---|---|---|
A930 |
A93 |
19 (0x13) |
0x54 |
B930 |
B93 |
19 | 0x5C |
A972 |
A97 |
23 (0x17) |
0x54 |
A932 |
A93 |
19 | 0x54 |
C935 |
C93 |
19 | 0x64 |
C934 |
C93 |
19 | 0x64 |
B976 |
B97 |
23 | 0x5C |
B936 |
B93 |
19 | 0x5C |
B938 |
B93 |
19 | 0x5C |
A978 |
A97 |
23 | 0x54 |
Exemple de descomposició per a 0xA972:
\[\texttt{A972}_{16} = \underbrace{1010100}_{0\texttt{x54}}\;\underbrace{10111}_{23}\;\underbrace{0010}_{2}\]
Els bits [8:4] són \(10111_2 = 23\), no \(00111_2 = 7\). El bit 8 (que forma part del dígit hex 9 = \(1001_2\)) és 1.
La seqüència accedeix a dos conjunts: 19 (7 accessos) i 23 (3 accessos). Amb escriptura immediata sense assignació, les escriptures que fallen no modifiquen l’MC.
Evolució del conjunt 19 (2 vies):
| # | Accés | En/F | Via 0 | Via 1 | LRU |
|---|---|---|---|---|---|
| 1 | L A930 (0x54) |
F | 0x54 | — | v1 |
| 2 | L B930 (0x5C) |
F | 0x54 | 0x5C | v0 |
| 4 | E A932 (0x54) |
En | 0x54 | 0x5C | v1 |
| 5 | E C935 (0x64) |
F | 0x54 | 0x5C | (s/a) |
| 6 | L C934 (0x64) |
F | 0x54 | 0x64 | v0 |
| 8 | E B936 (0x5C) |
F | 0x54 | 0x64 | (s/a) |
| 9 | L B938 (0x5C) |
F | 0x5C | 0x64 | v1 |
- #4: encert a via 0 (etiqueta
0x54). S’escriu a MC i a MP (2 B). LRU passa a v1. - #5: fallada, però és E sense assignació → MC inalterada, LRU inalterat.
- #6: fallada de lectura. LRU = v1 (des de #4; #5 no altera res) → s’expulsa v1 (
0x5C) i es carrega0x64. - #8: E fallada sense assignació → MC inalterada.
- #9: L fallada. LRU = v0 (des de #6) → s’expulsa v0 (
0x54) i es carrega0x5C.
Evolució del conjunt 23 (2 vies):
| # | Accés | En/F | Via 0 | Via 1 | LRU |
|---|---|---|---|---|---|
| 3 | E A972 (0x54) |
F | — | — | (s/a) |
| 7 | E B976 (0x5C) |
F | — | — | (s/a) |
| 10 | L A978 (0x54) |
F | 0x54 | — | v1 |
Les escriptures #3 i #7 fallen, però sense assignació no carreguen cap bloc. El conjunt 23 resta buit fins a la lectura #10.
Taula resum:
| # | Tipus | Adr. | Bloc | Conj. | En/F | Lectura MP | Escriptura MP |
|---|---|---|---|---|---|---|---|
| 1 | L byte | A930 |
A93 |
19 | F | S, A930, 16 B |
N |
| 2 | L paraula | B930 |
B93 |
19 | F | S, B930, 16 B |
N |
| 3 | E byte | A972 |
A97 |
23 | F | N | S, A972, 1 B |
| 4 | E paraula | A932 |
A93 |
19 | En | N | S, A932, 2 B |
| 5 | E byte | C935 |
C93 |
19 | F | N | S, C935, 1 B |
| 6 | L paraula | C934 |
C93 |
19 | F | S, C930, 16 B |
N |
| 7 | E byte | B976 |
B97 |
23 | F | N | S, B976, 1 B |
| 8 | E paraula | B936 |
B93 |
19 | F | N | S, B936, 2 B |
| 9 | L byte | B938 |
B93 |
19 | F | S, B930, 16 B |
N |
| 10 | L paraula | A978 |
A97 |
23 | F | S, A970, 16 B |
N |
Encerts: 1 (pas 4). Fallades: 9. Taxa de fallades: 90 %.
La taxa de fallades és molt alta perquè la seqüència barreja accessos a tres blocs diferents dins el conjunt 19 (etiquetes 0x54, 0x5C i 0x64), i les escriptures sense assignació impedeixen que els blocs escrits s’instal·lin a l’MC per a futurs accessos.
Enunciat: Problema 16.13.
Un accés a memòria segueix la cadena L1 → L2 → MP:
- S’accedeix a L1 amb temps \(t_{h_{L1}}\).
- En cas de fallada a L1 (probabilitat \(m_{L1}\)), s’accedeix a L2 amb temps \(t_{h_{L2}}\).
- En cas de fallada a L2 (probabilitat \(m_{L2}\), local), s’accedeix a MP amb penalització \(t_p\).
El temps mitjà d’accés és la suma del temps de L1 més les penalitzacions ponderades:
\[\boxed{\text{TAM} = t_{h_{L1}} + m_{L1} \cdot \bigl(t_{h_{L2}} + m_{L2} \cdot t_p\bigr)}\]
La fórmula coincideix amb Equació 7.5. Desenvolupant:
\[\text{TAM} = t_{h_{L1}} + m_{L1} \cdot t_{h_{L2}} + m_{L1} \cdot m_{L2} \cdot t_p\]
El terme \(m_{L1} \cdot m_{L2}\) és la taxa de fallades global de L2 (proporció de tots els accessos que fallen tant a L1 com a L2 i arriben a MP).
Observació: en un sistema ben dissenyat, \(t_{h_{L1}}\) domina el TAM perquè afecta tots els accessos. Per això L1 s’optimitza per minimitzar \(t_{h_{L1}}\), mentre que L2 s’optimitza per minimitzar \(m_{L2}\).
25.4 Tipologia de les fallades
Enunciat: Problema 16.15.
MC de correspondència directa, 8 línies, blocs de 4 bytes (\(b = 2\)). Capacitat total: \(8 \times 4 = 32\) bytes. El mapatge és \(\text{línia} = \text{bloc} \bmod 8\), on \(\text{bloc} = \text{adreça} \div 4\). La classificació de les fallades segueix les tres C (Secció 7.8, Essencial 7.4).
a) Seqüència A: 0, 4, 8, 12, 16, 20, 24, 28, 0, 4, 8, 12
Blocs accedits: 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3. Cadascun ocupa una línia diferent (\(k \bmod 8 = k\) per a \(k = 0\ldots7\)). El working set (8 blocs) cap exactament a l’MC.
| Accés | Bloc | Línia | Resultat | Tipus |
|---|---|---|---|---|
| 0 | 0 | 0 | Fallada | Obligatòria |
| 4 | 1 | 1 | Fallada | Obligatòria |
| 8 | 2 | 2 | Fallada | Obligatòria |
| 12 | 3 | 3 | Fallada | Obligatòria |
| 16 | 4 | 4 | Fallada | Obligatòria |
| 20 | 5 | 5 | Fallada | Obligatòria |
| 24 | 6 | 6 | Fallada | Obligatòria |
| 28 | 7 | 7 | Fallada | Obligatòria |
| 0 | 0 | 0 | Encert | — |
| 4 | 1 | 1 | Encert | — |
| 8 | 2 | 2 | Encert | — |
| 12 | 3 | 3 | Encert | — |
Total: 8 fallades (totes obligatòries), 4 encerts. Cap fallada de conflicte (cada bloc té línia pròpia) ni de capacitat (el working set cap a l’MC).
Seqüència B: 0, 4, 8, 12, 0, 4, 8, 12, 0, 4, 8, 12
Blocs: 0, 1, 2, 3 (repetits 3 vegades). Quatre blocs, cadascun amb línia diferent: el working set (4 blocs) és la meitat de la capacitat.
- Primer recorregut (0, 4, 8, 12): 4 fallades d’arrencada en fred.
- Segon i tercer recorreguts: tot encerts (els 4 blocs continuen a l’MC).
Total: 4 fallades (totes obligatòries), 8 encerts.
Seqüència C: 0, 32, 0, 32, 0, 32, 0, 32
Blocs: 0, 8, 0, 8, … El bloc 0 i el bloc 8 es mapen tots dos a la línia 0 (\(0 \bmod 8 = 0\), \(8 \bmod 8 = 0\)).
| Accés | Bloc | Línia | Resultat | Tipus |
|---|---|---|---|---|
| 0 | 0 | 0 | Fallada | Obligatòria |
| 32 | 8 | 0 | Fallada | Obligatòria (expulsa bloc 0) |
| 0 | 0 | 0 | Fallada | Conflicte |
| 32 | 8 | 0 | Fallada | Conflicte |
| 0 | 0 | 0 | Fallada | Conflicte |
| 32 | 8 | 0 | Fallada | Conflicte |
| 0 | 0 | 0 | Fallada | Conflicte |
| 32 | 8 | 0 | Fallada | Conflicte |
Total: 8 fallades (2 obligatòries, 6 de conflicte), 0 encerts. El working set és de només 2 blocs (molt inferior a la capacitat de 8 línies), però tots dos competeixen per la mateixa línia. L’MC té 7 línies buides que no s’aprofiten.
b) Per eliminar les fallades de conflicte de la seqüència C, cal que els blocs 0 i 8 puguin coexistir a l’MC. La solució és augmentar l’associativitat a 2 o més vies: amb 2 vies, el conjunt 0 tindria dues posicions i ambdós blocs hi cabrien simultàniament.
c) Amb una MC associativa de 2 vies de la mateixa capacitat total (8 línies → 4 conjunts de 2 vies):
Seqüència C: blocs 0 i 8 es mapen al conjunt \(0 \bmod 4 = 0\) i \(8 \bmod 4 = 0\). Amb 2 vies, ambdós hi caben. Després de les 2 fallades d’arrencada en fred, els 6 accessos restants serien encerts. Sí, millora (de 8 a 2 fallades).
Seqüència B: blocs 0, 1, 2, 3 es mapen als conjunts 0, 1, 2, 3. Cada bloc ocupa un conjunt diferent: no hi ha conflictes ni amb correspondència directa. No millora (les 4 fallades d’arrencada en fred són igualment inevitables).
Enunciat: Problema 16.16.
A[256] d’enters de 4 bytes, des de l’adreça 0x000 (1 KiB, fins a 0x3FF). B[256] des de 0x400 (fins a 0x7FF). MC de correspondència directa, 16 línies, blocs de 32 bytes. Variables i i suma en registres.
Paràmetres: bloc = 32 bytes = 8 enters per bloc. A i B ocupen cadascun \(256/8 = 32\) blocs.
a) En el primer recorregut, cada bloc s’accedeix per primera vegada: 32 fallades d’arrencada en fred per a A i 32 per a B (una per bloc, quan s’accedeix a \(A[0], A[8], A[16], \ldots, A[248]\) i anàlogament per a \(B\)).
b) Mapatge de cada vector:
- Bloc \(k\) d’A (\(k = 0\ldots31\)): adreça base \(= 32k\). Número de bloc \(= k\). Línia \(= k \bmod 16\).
- Bloc \(k\) de B (\(k = 0\ldots31\)): adreça base \(= \texttt{0x400} + 32k\). Número de bloc \(= 1024/32 + k = 32 + k\). Línia \(= (32 + k) \bmod 16 = k \bmod 16\).
El bloc \(k\) d’A i el bloc \(k\) de B es mapen a la mateixa línia (\(k \bmod 16\)). Això és perquè la distància entre A i B (\(\texttt{0x400} - \texttt{0x000} = 1024\) bytes, 1 KiB, que són 32 blocs) és un múltiple exacte del nombre de línies de l’MC (16).
En el bucle, els accessos s’intercalen: \(A[i], B[i], A[i+1], B[i+1], \ldots\) Dins de cada grup de 8 iteracions (que correspon a un bloc), l’accés a \(A[i]\) carrega el bloc d’A a la línia \(k\), i l’accés a \(B[i]\) el reemplaça pel bloc de B; i viceversa.
- \(A[0]\) (bloc 0, línia 0): fallada (obligatòria), carrega bloc 0.
- \(B[0]\) (bloc 32, línia 0): fallada (obligatòria), expulsa bloc 0.
- \(A[1]\) (bloc 0, línia 0): fallada (conflicte), expulsa bloc 32.
- \(B[1]\) (bloc 32, línia 0): fallada (conflicte), expulsa bloc 0.
- \(\ldots\) i així fins a \(A[7], B[7]\).
Dins de cada grup de 8 iteracions: 2 fallades d’arrencada en fred (primer accés a cada bloc) + 14 fallades de conflicte. El patró es repeteix per a cada bloc, amb 32 grups. En total: tots els 512 accessos a dades fallen, cosa que anul·la completament l’efecte de l’MC.
Sí, es produeixen fallades de conflicte massives, causades per l’alineament dels dos vectors respecte a l’MC.
c) Si B comença a 0x600:
- Bloc \(k\) de B: adreça base \(= \texttt{0x600} + 32k = 1536 + 32k\). Número de bloc \(= 1536/32 + k = 48 + k\). Línia \(= (48 + k) \bmod 16 = k \bmod 16\).
El mapatge és idèntic: la distància entre A i B (\(\texttt{0x600} = 1536\) bytes \(= 48\) blocs) torna a ser un múltiple exacte del nombre de línies (16). El patró de conflictes no canvia.
Observació: perquè els conflictes desapareguin, la distància entre A i B (en nombre de blocs) no ha de ser múltiple de 16. Per exemple, si B comencés a 0x420 (bloc 33), el bloc \(k\) d’A aniria a la línia \(k \bmod 16\) i el bloc \(k\) de B a la línia \((33 + k) \bmod 16 = (k + 1) \bmod 16\): línies diferents, sense conflictes. Això il·lustra que les fallades de conflicte depenen de l’adreça base relativa dels vectors, un efecte que el programador no controla directament, però que el compilador o l’assignador de memòria poden mitigar mitjançant farciment (padding) o alineament estratègic.