Blocchi di più parole
Transcript
Blocchi di più parole
Blocchi di più parole Per trarre vantaggio dalla località spaziale non conviene avere blocchi di una sola parola ma blocchi di più parole che occupano nella memoria principale posizioni vicine. Esempio: blocchi di 4 parole (16 byte) ciascuno. = Mux hit dato La coppia di bit 3-2 dell’indirizzo permette di individuare la parola all’interno del blocco. Esercizio. Si consideri una cache con 64 blocchi di 16 byte ciascuno. A quale numero di blocco corrisponde il byte di indirizzo 1200? Poiché ogni blocco contiene 16 byte, il byte di indirizzo 1200 è nel blocco: 1200:16 = 75. Il blocco 75 viene mappato nel blocco della cache: 75 modulo 64 = 11 E il byte di indirizzo 16? 16:16 = 1. 1 modulo 64 = 1 E il byte di indirizzo 20? 20:16 = 1. 1 modulo 64 = 1 Blocco 0 Blocco 1 0.… … … … .. 16.… … … … 15 31 Blocco 2 32.… … … … 47 Blocco3 48… … … … . 63 Miss in scrittura con blocchi di più parole La gestione dei successi e dei fallimenti durante le operazioni di lettura vengono gestiti come per la corrispondenza blocco-singola parola. Per le operazioni di scrittura non è possibile scrivere nella cache una sola parola senza controllare la corrispondenza dell’intero blocco. Se questa corrispondenza non c’e’ il nuovo blocco deve essere letto prima che la parola al suo interno venga modificata. Z1 Z2 cache Z3 Z4 Blocco Z Y1 Y2 Y3 Y4 Blocco Y Se deve essere riscritta la seconda parola del blocco Z nella cache e questa corrisponde alla seconda parola nel blocco Y della RAM, prima di sostituire nella cache la seconda parola di Z deve essere controllata la corrispondenza delle altre parole e, se necessario, trasferito tutto il blocco Y. Trasferimento di blocchi di più parole: svantaggi L’aumento della dimensione di un blocco cerca di sfruttare il principio della località spaziale e quindi diminuire il numero di fallimenti, ma … - la gestione del singolo fallimento aumenta con l’aumentare della dimensione del blocco; - l’aumento della dimensione dei blocchi fa diminuire il numero di blocchi presenti nella cache e ciò, se la cache non è tanto grande, può far perdere il vantaggio della località temporale, e quindi crescere il numero dei fallimenti; - l’aumento della dimensione del blocco fa aumentare il numero di oggetti nello stesso blocco “non” spazialmente vicini, e quindi può anche far perdere il vantaggio della località spaziale. Misura della performance di una Cache Tempo CPU = ( Numero di cicli di clock spesi in esecuzione + Numero di cicli di clock spesi in stallo di memoria) × Durata del ciclo di clock dove assumiamo che gli stalli di memoria siano quelli causati da un fallimento (miss) della cache. Numero di cicli di clock spesi in stallo di memoria = Cicli di stallo per lettura + Cicli di stallo per scrittura Supponendo che - il tempo perso per il passaggio di informazione sia lo stesso sia in caso di miss in lettura che in caso di miss in scrittura ( miss penality per lettura = miss penality per scrittura) - e che gli stalli per scrittura del write-buffer siano trascurabili si può accettare l’approssimazione: Numero di cicli di clock spesi in stallo di memoria = Accessi alla memoria × Miss ratio (Frequenza miss rispetto agli accessi) × Miss penality Nel caso di memorie istruzioni e dati separate anche l’analisi deve essere separata. Esempio. Si consideri un programma (gcc) con le seguenti caratteristiche: - frequenza di accessi alla memoria (rispetto al numero di istruzioni) = 36% - miss rate per la cache delle istruzioni = 2% - miss rate per la cache dei dati = 4% Si supponga di eseguire il programma su di una macchina con miss penality di 40 cicli (ogni miss “costa” 40 cicli “in più”) ed un valore di CPI = 2 nel caso di assenza di stalli. 1. Quale è il numero di cicli di clock spesi in stallo di memoria? Per la cache delle istruzioni si ha: Numero accessi = Numero Istruzioni × Miss ratio × Miss penality I × 2% × 40 = ---------0.80 × I Per la cache dei dati si ha: Accessi alla memoria × Miss ratio × Miss penality I × 36% × 4% × 40 = -----------0.56 × I Numero totale di cicli di clock spesi in stallo di memoria = 0.80 × I + 0.56 × I = 1.36 × I 2. Quale è il valore di CPIstall cioè il numero medio di cicli per istruzione che tiene conto degli stalli? 2 + (1.36 × I) / I = 3.36 3. Di quanto sarebbe migliorabile la performance con una macchina con una cache ideale che non crea stalli? Tempo CPU con stalli --------------------------------- = Tempo CPU con cache ideale I × CPIstall × Durata ciclo di clock --------------------------------------------I × CPIideale × Durata ciclo di clock = 3.36 / 2 = 1.68 4. Si supponga di migliorare le prestazioni del processore riducendo la CPI (senza modificare la frequenza di clock) da 2 a 1. - Quale è in questo caso il rapporto tra le prestazioni di una macchina con una cache ideale e quella con stalli? Nella nuova versione CPIstall = 1 + (1.36 × I) / I = 2.36 CPIideale = 1 Quindi la realizzazione ideale sarebbe 2.36 volte più veloce di quella con stalli. Nota: La performance della macchina ideale è raddoppiata mentre per la macchina con stalli si passa da 3.36 a 2.36. Perché cosi’poca differenza? Perché aumentando le prestazioni i punti più critici vengono evidenziati (legge di Amdahl). Il tempo perso in stalli di memoria aumenta (in percentuale) quando l’esecuzione, senza stalli, diminuisce. Prima era: 1.36 ------- = 41% 3.36 cicli per stallo 1.36 ------- = 58% 2.36 cicli per stallo cicli totali Ora: cicli totali Si supponga infine di raddoppiare la frequenza di clock ma che il tempo totale dedicato alla gestione dei miss non cambi. - Tenendo conto degli stalli, quale è in questo caso il rapporto tra le prestazioni delle due macchine? Avendo supposto che il tempo totale dedicato alla gestione dei miss non cambi, la miss penality è ora 80. Ripetendo le operazioni precedenti si ottiene il nuovo valore di CPIstall-new : 2 + [(I × 2% × 80) + (I × 36% × 4% × 80)] / I = 2 + 2.75 = 4.75 tempo esecuzione con clock lento ---------------------------------------------- = tempo di esecuzione con clock veloce I × CPIstall × durata clock lento 3.36 ×2 ------------------------------------------- = ----------------- = 1.41 I × CPIstall-new × durata clock lento/2 4.75 Causa gli stalli di memoria, pur raddoppiando la frequenza del clock si ha un incremento delle prestazioni di 1.41 volte (anziché di 2 volte). Esercizio. Si considerino due implementazioni di una cache ad indirizzamento diretto: C1 con 16 blocchi da 1 parola e miss penality di 8 cicli di clock. C2 con 4 blocchi da 4 parole e miss penality di 11 cicli di clock. Supponendo che le cache siano inizialmente vuote, 1) trovare una sequenza di accessi in cui C2 ha miss rate più basso rispetto a C1 ma un maggior numero di cicli di clock spesi in stallo di memoria; Consideriamo i seguenti indirizzi di parola in una sequenza di letture: 0 4 8 12 5 0 1 2 3 1 C2 miss miss miss miss hit 4 ×11 = 44 C1 0 miss 4 miss 8 miss 12 miss 5 miss 5 ×8 = 40 2) trovare una sequenza di accessi in cui C2 ha miss rate più alto rispetto a C1. 1 16 1 16 0 0 0 0 C2 miss miss miss miss 1 0 1 0 C1 miss miss hit hit