Salta al contenuto
Note per Studenti Esercizio 20 · campi dell'indirizzo e capacità di una cache

Esercizio 20campi dell'indirizzo e capacità di una cache

Esame
In questa pagina 7

Testo (quattro quesiti a risposta multipla di esempi di compitino di Architettura degli Elaboratori, UniPD, a.a. 2008-09 e 2010-11; i temi sono per un corso con architettura MIPS ma i quesiti sulla cache sono indipendenti dall'architettura). Teoria: Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache →.

A. Una cache set-associativa a 4 vie da 16 MB è inserita in una gerarchia con una memoria centrale di 256 MB suddivisa in 524 288 blocchi. Il formato degli indirizzi della memoria centrale è:

  • a) etichetta 11 bit, set 10 bit, parola 7;
  • b) etichetta 7 bit, set 11 bit, parola 10;
  • c) etichetta 9 bit, set 10 bit, parola 9;
  • d) etichetta 6 bit, set 13 bit, parola 9;
  • e) nessuna delle precedenti.

B. Una cache da 256 KB ad associazione diretta lavora con una memoria centrale di 256 MB, indirizzabile al byte. Le locazioni di indirizzi (esadecimali) 533ACFD e 90FAF1F possono essere caricate nella stessa linea se la dimensione del blocco è di: a) 1 KB; b) 128 B; c) 512 B; d) 256 B; e) nessuna delle precedenti.

C. Una cache set-associativa a 4 vie da 8 MB, con linee da 2 KB, è inserita in una gerarchia con una memoria centrale suddivisa in 2202^{20} blocchi (indirizzamento al singolo byte). Il formato degli indirizzi è: a) etichetta 10, set 10, parola 11; b) etichetta 10, set 11, parola 10; c) etichetta 9, set 11, parola 10; d) etichetta 11, set 9, parola 11; e) nessuna delle precedenti.

D. Una cache da 256 MB con associazione a gruppi a 256 vie e linee da 8 KB ha il campo etichetta di 12 bit. Qual è la dimensione massima (in byte) di memoria principale che può gestire? a) 32 768 MB; b) 4096 MB; c) 524 288 KB; d) 256 MB; e) nessuna delle precedenti.


Metodo

Per una cache con capacità CC, linee da KK byte e nn vie, con memoria indirizzata al byte:

linee=CK,insiemi=lineen,parola=log⁡2K,set=log⁡2(insiemi),etichetta=bit dell’indirizzo−set−parola.\text{linee} = \frac{C}{K}, \qquad \text{insiemi} = \frac{\text{linee}}{n}, \qquad \text{parola} = \log_2 K, \quad \text{set} = \log_2(\text{insiemi}), \quad \text{etichetta} = \text{bit dell'indirizzo} - \text{set} - \text{parola}.

I bit dell'indirizzo sono log⁡2(dimensione della memoria)\log_2(\text{dimensione della memoria}). La dimensione del blocco è la dimensione della linea. Vedi Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache → e gli esempi in Esercizio 12 · campi dell'indirizzo per cache a due vie.

A. Memoria da 256 MB in 524 288 blocchi

  • Indirizzo: 256 MB=228256\ \text{MB} = 2^{28} → 28 bit.
  • Blocco: 228/524 288=228/219=29=5122^{28} / 524\,288 = 2^{28} / 2^{19} = 2^9 = 512 B → parola 9 bit.
  • Linee: 16 MB/512 B=224/29=215=32 76816\ \text{MB} / 512\ \text{B} = 2^{24} / 2^9 = 2^{15} = 32\,768.
  • Insiemi: 32 768/4=213=819232\,768 / 4 = 2^{13} = 8192 → set 13 bit.
  • Etichetta: 28−13−9=628 - 13 - 9 = 6 bit.

Risposta d: etichetta 6, set 13, parola 9.

B. Due indirizzi nella stessa linea (associazione diretta)

Con blocco da BB byte la linea è nei bit tra il campo parola e l'etichetta. La cache ha 2182^{18} byte: la linea è identificata dai bit [log⁡2B, 17][\log_2 B,\ 17] dell'indirizzo (gli altri bit alti sono l'etichetta). I due indirizzi, in binario su 28 bit:

533ACFD = 0101 0011 0011 1010 1100 1111 1101
90FAF1F = 1001 0000 1111 1010 1111 0001 1111

I bit 17…1017 \ldots 10 (otto bit) sono uguali nei due indirizzi: 11101011 (EB in esadecimale). Con blocchi da 1 KB (B=210B = 2^{10}) il campo linea è proprio quello (8 bit: 218/210=2562^{18}/2^{10} = 256 linee), perciò i due indirizzi vanno nella stessa linea 235, con etichette diverse (0x14C e 0x243): si scacciano a vicenda. Con blocchi più piccoli il campo linea comprende anche i bit 9…log⁡2B\log_2 B, che nei due indirizzi sono diversi: linee diverse (128 B: linee 1881 e 1886; 512 B: 470 e 471; 256 B: 940 e 943).

Risposta a (1 KB).

C. Cache da 8 MB a 4 vie con linee da 2 KB

  • Blocco = linea = 2 KB = 2112^{11} → parola 11 bit.
  • Memoria: 2202^{20} blocchi ×211\times 2^{11} B =231= 2^{31} B → 31 bit di indirizzo.
  • Linee: 8 MB/2 KB=223/211=212=40968\ \text{MB} / 2\ \text{KB} = 2^{23} / 2^{11} = 2^{12} = 4096; insiemi: 4096/4=10244096 / 4 = 1024 → set 10 bit.
  • Etichetta: 31−10−11=1031 - 10 - 11 = 10 bit.

Risposta a: etichetta 10, set 10, parola 11.

D. Memoria massima gestita da una cache a 256 vie

  • Linee: 256 MB/8 KB=228/213=215=32 768256\ \text{MB} / 8\ \text{KB} = 2^{28} / 2^{13} = 2^{15} = 32\,768.
  • Insiemi: 32 768/256=12832\,768 / 256 = 128 → set 7 bit; parola: 8 KB=2138\ \text{KB} = 2^{13} → 13 bit.
  • Con etichetta di 12 bit l'indirizzo ha 12+7+13=3212 + 7 + 13 = 32 bit: memoria massima 2322^{32} B =4096= 4096 MB.

Risposta b.

Verifica

python
from math import log2

def campi(cache, linea, vie, bit_indirizzo):
    linee = cache // linea
    insiemi = linee // vie
    parola = int(log2(linea))
    set_ = int(log2(insiemi))
    return bit_indirizzo - set_ - parola, set_, parola        # etichetta, set, parola

MB, KB = 2 ** 20, 2 ** 10
blocco = 256 * MB // 524288                                   # A
print(blocco, campi(16 * MB, blocco, 4, 28))                  # 512 (6, 13, 9)
print(campi(8 * MB, 2 * KB, 4, 31))                           # C: (10, 10, 11)

linee = 256 * MB // (8 * KB)                                  # D
insiemi = linee // 256
print(12 + int(log2(insiemi)) + 13, "bit ->", 2 ** (12 + int(log2(insiemi)) + 13) // MB, "MB")   # 32 bit -> 4096 MB

a, b = 0x533ACFD, 0x90FAF1F                                   # B
for B in (1024, 128, 512, 256):
    linee = 256 * KB // B
    w = int(log2(B))
    print(B, (a >> w) % linee, (b >> w) % linee)              # 1024: 235 235 (stessa linea); gli altri: linee diverse

Errori comuni

  • Dividere la capacità della cache per le vie prima di dividere per la dimensione della linea (o viceversa): si ottengono insiemi dividendo il numero di linee per le vie.
  • Usare 32 bit di indirizzo senza ricavarli dalla dimensione della memoria.
  • Confondere il blocco di memoria (la memoria è divisa in blocchi) con la linea di cache (che contiene un blocco): hanno la stessa dimensione.
  • Nell'associazione diretta cercare la stessa etichetta: due indirizzi nella stessa linea hanno etichette diverse (altrimenti sarebbero nello stesso blocco).

Versione ripasso

Quattro quesiti di esempi di compitino (UniPD, a.a. 2008-09 e 2010-11). Teoria: Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache →.

Metodo: linee =C/K= C/K; insiemi == linee/n/n; parola =log⁡2K= \log_2 K; set =log⁡2= \log_2 insiemi; etichetta == bit dell'indirizzo −- set −- parola; bit dell'indirizzo =log⁡2= \log_2(memoria).

  • A. 256 MB in 524 288 blocchi: indirizzo 28 bit, blocco 29=5122^9 = 512 B (parola 9); 16 MB/512 B =215= 2^{15} linee, a 4 vie 2132^{13} insiemi (set 13); etichetta 28−13−9=628 - 13 - 9 = 6 → d.
  • B. Mappatura diretta 256 KB (2182^{18}): due indirizzi stanno nella stessa linea se i bit [log⁡2B,17][\log_2 B, 17] coincidono; con B=1B = 1 KB i bit 17…10 sono uguali (linea 235, etichette 14C e 243); con 128/256/512 B le linee differiscono → a.
  • C. Linea 2 KB (parola 11), memoria 220⋅211=2312^{20} \cdot 2^{11} = 2^{31} (31 bit); 8 MB/2 KB=40968\,\text{MB}/2\,\text{KB} = 4096 linee, 1024 insiemi (set 10); etichetta 31−10−11=1031 - 10 - 11 = 10 → a.
  • D. 2152^{15} linee, 128 insiemi (set 7), parola 13: indirizzo 12+7+13=3212 + 7 + 13 = 32 bit → 4096 MB → b.

Errori comuni: insiemi = capacità/vie senza dividere per la linea; bit di indirizzo non ricavati dalla memoria; due indirizzi nella stessa linea hanno etichette diverse.

Teoria collegata