Parte 2 Processore - Istituto di Scienze e Tecnologie dell`Informazione

Informatica Applicata – Progettazione dei sistemi di elaborazione
3DUWH
3URFHVVRUH
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
© Alessandro Bogliolo
1
Informatica Applicata – Progettazione dei sistemi di elaborazione
© Alessandro Bogliolo
,OSURFHVVRUHFRPHFRPSRQHQWHGLXQVLVWHPD
'HILQL]LRQHGHOSUREOHPD
•
•
•
L’utilizzo di un microprocessore come componente di un sistema richiede la definizione di un modello
funzionale e parametrico e la specifica logica ed elettrica dell’interfaccia. Il modello è detto black-box se
nasconde i dettagli implementativi a livello microarchitetturale.
I modelli sono eseguibili se possono essere utilizzati per effettuare simulazioni funzionali e parametriche.
Il livello di accuratezza/astrazione di un modello di microprocessore può essere:
• ,QVWUXFWLRQOHYHO I risultati della simulazione del modello coincidono con i risultati prodotti dal
microprocessore reale istruzione per istruzione, ma vengono trascurati i dettagli dell’esecuzione di
ciascuna istruzione. All’esecuzione di ogni istruzione possono essere associati parametri temporali
(quali il numero di cicli di clock dedicati all’esecuzione, CPI), ma generalmente a questo livello di
astrazione non è possibile prevedere i cicli di stallo provocati da conflitti di dati e risorse legati alla
microarchitattura. Pertanto il tempo di esecuzione valutato dalla simulazione puo’ non coincidere con
quello effettivo. In linea di principio è possibile aumentare l’accuratezza dei modelli di timing, come
vedremo nel seguito, riducendo l’inaccuratezza delle simulazione.
• &\FOHDFFXUDWHI risultati della simulazione del modello coincidono con i risultati prodotti dal
microprocessore reale ciclo di clock per ciclo di clock. Questo richiede maggiore conoscenza
dell’architettura interna e minore astrazione. Le stime sui tempi di esecuzione sono più accurate
perchè tengono conto degli stalli della pipeline, ma il modello è più complesso e la simulazione più
lenta.
6SHFLILFDIXQ]LRQDOH
•
•
•
Instruction set
Interfaccia
Protocolli di comunicazione
•
CPI (clock per instruction): numero di cicli di clock dedicati all’esecuzione di un’istruzione
indipendentemente dai dati e dal contesto. Il CPI è una proprietà di ogni istruzione (o tipo di istruzione)
dell’instruction set
Latenza: numero di cicli di clock che intercorrono tra l’inizio dell’esecuzione di un’istruzione e la
disponibilità dei risultati per le istruzioni successive. La latenza è una proprietà di ogni istruzione, se
riferita al momento del write-back dei risultati nel register file, poichè il write back non dipende dall’uso
che dei dati verrà fatto in seguito. La latenza puo’ essere anche definita con riferimento a coppie di
istruzioni contigue di cui la seconda usa i risultati della prima. In tal caso la latenza puo’ essere definita
come numero di cicli di clock che intercorrono tra l’esecuzione della prima e l’esecuzione della seconda.
In questo caso la latenza dipende anche dall’istruzione che segue, poichè il forwarding dei risultati puo’
avere effetti diversi. A volte la latenza è definita come numero di ciclo di stallo introdotti tra le due
istruzioni per effetto del conflitto di dati. Questa definizione porta ad un valore di latenza diminuito di 1
rispetto alla precedente definizione. Se non diversamente specificato nel seguito intenderemo per
latenza la distanza tra le istruzioni: in assenza di cicli di stallo la latenza è 0.
In generale la latenza tiene conto dei conflitti di dati.
Repetition time: minimo numero di cicli di clock che intercorrono tra due esecuzioni successive della
stessa istruzione, in assenza di conflitti di dati. Il repetition time tiene conto dei conflitti di risorse. E’ una
proprietà delle singole istruzioni (da cui il nome repetition time), ma piu’ in generale è una proprietà di
coppie di istruzioni che condividono risorse di esecuzione.
Costruzione del modello
Il modello puo’ essere costituito da una matrice quadrata le cui righe e colonne sono associate alle
istruzione dell’instruction set. Ad ogni elemento della matrice (in posizione i,j) sono associati latenza e
repetition time relativi all’esecuzione in sequenza dell’istruzione i e dell’istruzione j. Agli elementi sulla
diagonale sono associati anche i CPI.
Caratterizzazione
La caratterizzazione del modello puo’ essere effettuata analizzando o simulando la microarchitattura.
Valutazione
La valutazione del modello non richiede la conoscenza della microarchitettura.
Osservando il codice assembler è possibile stimare accuratamente il numero di cicli di stallo introdotti
per conflitti di dati e risorse, stimando il tempo di esecuzione. Il numero di cicli di stallo da introdurre è il
minimo che garantisca il rispetto del CPI di ogni istruzione e di Latenza e Repetition time di ogni coppia
di istruzioni.
Legame tra parametri del modello e microarchitettura
6SHFLILFDSDUDPHWULFDSUHVWD]LRQL
•
•
•
•
•
•
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
2
Informatica Applicata – Progettazione dei sistemi di elaborazione
•
•
•
•
•
© Alessandro Bogliolo
Esempio: somma tra interi nel DLX
CPI = 1
Latenza = 1 (nei confronti di istruzioni aritmetico-logiche)
Latenza = 2 (nei confronti dei salti condizionati)
Repetition time = 1 (nei confronti di qualsiasi istruzione)
Esempio: somma FP nel DLX, assumendo che l’unità di esecuzione FP sia unica, impieghi 5 cicli di
clock e non sia pipelined
CPI = 5
Latenza = 5 (nei confronti di istruzioni aritmentico-logiche)
Latenza = 6 (nei confronti dei salti condizionati)
Repetition time = 5 (nei confronti di somme e sottrazioni FP)
Esempio: somma FP nel DLX, assumendo che l’unità di esecuzione FP sia unica, impieghi 5 cicli di
clock e sia pipelined
CPI = 1
Latenza = 5 (nei confronti di istruzioni aritmentico-logiche)
Latenza = 6 (nei confronti dei salti condizionati)
Repetition time = 1 (nei confronti di somme e sottrazioni FP)
Esempio: somma FP nel DLX, assumendo che le unità di esecuzione FP siano 2, impieghino 5 cicli
di clock e non siano pipelined
CPI = 1
Latenza = 5 (nei confronti di istruzioni aritmentico-logiche)
Latenza = 6 (nei confronti dei salti condizionati)
Repetition time = 1 (nei confronti della prima somma o sottrazione FP successiva)
Repetition time = 5 (nei confronti della seconda somma o sottrazione FP successiva)
Esempio: load nel DLX
CPI = 1 (assumendo che l’architettura di memoria sia Harvard)
Latenza = 2 (nei confronti di istruzioni aritmentico-logiche)
Latenza = 3 (nei confronti dei salti condizionati)
Repetition time = 1
6SHFLILFDSDUDPHWULFDFRQVXPRGLSRWHQ]DHQHUJLD
•
•
•
•
•
•
Potenza media
Energia per istruzione
Energia per ciclo di clock
Costruzione del modello
Il modello puo’ essere costituito da un vettore i cui elementi sono associati alle istruzioni dell’instruction
set. L’elemento in posizione i contiene l’energia spesa per processare l’i-esima istruzione dell’instruction
set e il numero di stadi della pipeline attraversati dall’istruzione. Il rapporto tra i due è l’energia media per
ciclo di clock consumata dall’istruzione.
Caratterizzazione
La caratterizzazione del modello puo’ essere effettuata a diversi livelli di accuratezza. Assumendo di
conoscere la microarchitattura e di aver associato un consumo medio per ciclo di clock ad ogni
componente, la stima dell’energia per istruzione si ottiene come somma dell’energia consumata da ogni
componente per eseguire quell’istruzione, a sua volta ottenuta moltiplicando l’energia media di quel
componente per il numero di cicli di clock in cui il componente è impegnato ad eseguire l’istruzione.
Valutazione
La valutazione del modello non richiede la conoscenza della microarchitettura. Il consumo totale relativo
ad un segmento di codice puo’ essere stimato come somma delle energie totali spese per ogni
istruzione. Il profilo di consumo istantaneo (per ciclo di clock) puo’ essere stimato ripartendo il consumo
totale di ogni istruzione su tanti cicli di clock quanti sono gli stadi attraversati dall’istruzione. In prima
approssimazione si puo’ trascurare il consumo associato agli stalli della pipeline.
&DUDWWHUL]]D]LRQHGHOOHSUHVWD]LRQLGLXQPLFURSURFHVVRUH
&38SHUIRUPDQFHHTXDWLRQ
&387 = [Seconds/Program] = ,&&3,&/. &38&&/.
,& = [Instructions/Program] (dipende dall’instruction set e dal compilatore)
&3, = [Clock cycles/Instruction] (dipende dall’instruction set e dalla microarchitattura)
&/. = [Seconds/Clock cycle] (dipende dalla microarchitettura e dalla tcnologia)
&38& = ,&&3,
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
3
Informatica Applicata – Progettazione dei sistemi di elaborazione
Il CPI medio è dato da:
∑
&3, =
=1
,& ⋅ &3,
,&
=∑
=1
© Alessandro Bogliolo
,&
&3,
,&
'HILQL]LRQHGHOSUREOHPD
Con riferimento alla CPU performance equation osserviamo che:
• CLK generalmente noto
• Difficoltà di misura di IC e di CPI
• Limitata risoluzione temporale nella determinazione di CPUT. Indichiamo con HUU l’errore di
approssimazione dovuto alla limitata risoluzione temporale.
$SSURFFLRJHQHUDOHPLFUREHQFKPDUNLQFUHPHQWDOL
•
•
•
•
Impiego di due benchmarks che differiscono solo per il segmento di codice da analizzare, detto
,QVWUXFWLRQ8QGHU7HVW, IUT, o &RGHVHJPHQW8QGHU7HVW, CUT.
Detto B0 il benchmark che non contiene il CUT e B1 quello che lo contiene, risulta:
CPUT(CUT)=CPUT(B1)-CPUT(B0)
Problemi:
• Condizioni al contorno: il CUT deve essere indipendente dai segmenti di codice che precededono e
seguono il punto di inserimento
• CPUT(CUT) puo’ essere inferiore alla risoluzione del clock di sistema (CPUT(CUT)<err)
Soluzione: inserire il CUT in un ciclo eseguito N volte. Il template del benchmark e’ il seguente:
code segment A;
for (i = 0; i < N; i++) {
code segment B;
CUT;
code segment C;
}
code segment D;
•
•
Il CUT deve essere indipendente dai segmenti B e C tra i quali è inserito
I segmenti B e C devono essere sufficientemente lunghi da rendere indipendenti le esecuzioni
successive del CUT
CPUT(CUT)=(CPUT(B1)-CPUT(B0))/N
•
La risoluzione temporale (errore) nella misura di CPUT(CUT) è HUU1, che puo’ essere reso
arbitrariamente piccolo aumentando 1
9DOXWD]LRQHGHO&3,GLXQ¶LVWUX]LRQH
•
•
Si impiegano due benchmark incrementali come descritto nel paragrafo precedente, utilizzando come
CUT solo l’istruzione di cui si vuol valutare il CPI
Avvertenze: l’istruzione che rappresenta il CUT deve essere indipendente dai segmenti di codice
precedente e seguente, sia in termini di dati che di risorse. Altrimenti la valutazione del CPI sarebbe
falsata da latenza e repetition time.
9DOXWD]LRQHGHOODODWHQ]DGLXQ¶LVWUX]LRQHQHLFRQIURQWLGLXQ¶DOWUD
•
•
•
Benchè la latenza di un’istruzione dipenda prevalentemente dal tempo di esecuzione dell’istruzione
stessa, più in generale è definita come proprietà di una coppia di istruzioni di cui la prima fornisce dei
risultati che vengono utilizzati come operandi dalla seconda. La generalizzazione è necessaria poichè in
alcuni casi il numero di stalli che è necessario introdurre per attendere la disponibilità dei risultati della
prima istruzione dipende anche dalla natura dell’istruzione che segue. Ad esempio, nel DLX un salto
condizionato ha bisogno del valore della condizione nella fase di ID, anzichè nella fase di EX,
determinando un ciclo di stallo in piu’ nel caso in cui i dati non siano già disponibili.
Si utilizza un CUT0 composto solo dalle due istruzioni e se ne valuta il CPUT utilizzando una coppia di
benchamrk incrementali come al paragrafo 2.3. Il valore che si ottiene è CPUT(CUT0).
Si crea un nuovo CUT, detto CUT1, in cui tra le due istruzioni è inserita una terza istruzione DUMMY
indipendente dalle altre due per dati e risorse. Si valuta CPUT(CUT1) con una coppia di benchmark
incrementali come al punto precedente.
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
4
Informatica Applicata – Progettazione dei sistemi di elaborazione
•
•
•
•
•
•
•
•
© Alessandro Bogliolo
Si creano nuovi CUT, detti CUT<n>, in cui tra le due istruzioni sono inserite <n> istruzioni DUMMY
uguali tra loro e indipendenti dalle due originali e tra loro. Per ogni CUT si valuta CPUT(CUT<n>) con
una coppia di benchmark incrementali come al punto precedente.
Si costruisce un grafico di CPUT(CUT<n>) in funzione di <n>. Il grafico presenta un primo tratto costante
e un secondo tratto crescente linearmente. Il tratto costante indica che le istruzioni DUMMY inserite tra
le due istruzioni oggetto di studio non aumentano il tempo di esecuzione complessivo poichè
sostituiscono cicli di stallo della pipeline dovuti alla latenza. Il tratto lineare indica invece che le nuove
istruzioni influenzano il tempo di CPU perchè non sono più coperte dalla latenza. Quindi il valore della
latenza puo’ essere ricavato dal valore di <n> in cui la curva cambia pendenza. Detto N il piu’ grande
valore di <n> per cui CPUT(CUT<n>)=CPUT(CUT0), N indica quante istruzioni DUMMY possono essere
eseguite rimpiazzando i cicli di stallo dovuti alla latenza in esame.
Nota: N rappresenta il numero di cicli di stallo misurati in termini di CPI dell’istruzione DUMMY.
Supponendo che il numero di cicli di stallo sia 10, se ogni istruzione DUMMY avesse CPI=1, N sarebbe
uguale a 10, se ogni istruzione DUMMY avesse CPI=2, N sarebbe uguale a 5, se ogni istruzione
DUMMY avesse CPI=3, N sarebbe uguale a 3. Per sapere il numero effettivo di cicli di stallo occorre
quindi conoscere il CPI di DUMMY.
Il CPI di DUMMY può essere ricavato dalla pendenza della curva nel tratto lineare crescente. Infatti vale
la seguente relazione:
CPI(DUMMY) = CPUT(CUT<n+1>)-CPUT(CUT<n>)
per n>N
L’effettivo numero di cicli di stallo può quindi essere calcolato moltiplicando CPI(DUMMY) per N.
Nota: nel caso in cui il numero di cicli di stallo non sia multiplo intero del CPI(DUMMY), la misura fornita
dal prodotto di cui al punto precedente è approssimata per difetto. Per eliminare tale approssimazione,
al posto di N si può usare il valore X che rappresenta l’ascissa del punto di intersezione tra la retta
orizzontale che interpola il tratto costante e la rette con pendenza positiva che interpola il tratto
crescente del grafico. Nel caso in cui il numero di cicli di stallo non sia multiplo del CPI(DUMMY), il
valore di X non sara’ intero.
Tenendo conto che la latenza è definita come numero di cicli di stallo + 1, la latenza in oggetto è data
da:
Lat(I1,I2) = X*CPI(DUMMY)+1
Nota: se I1 e I2 sono istruzioni dello stesso tipo si pone il problema di discriminare tra latenza e
repetition time. Per questo si veda il paragrafo 2.7.
9DOXWD]LRQHGHOUHSHWLWLRQWLPHGLXQDFRSSLDGLLVWUX]LRQL
•
•
•
Il repetition time dipende dai conflitti di risorse. In senso stretto il repetition time è tempo minimo che
deve intercorrere tra l’esecuzione di due istruzioni di uno stesso tipo, ma in generale può essere definito
come tempo minimo che deve intercorrere tra l’esecuzione di due istruzioni, assumendo che queste non
abbiano dipendenze di dati.
Si utilizza un CUT0 composto solo dalle due istruzioni e se ne valuta il CPUT utilizzando una coppia di
benchamrk incrementali come al paragrafo 2.3. Il valore che si ottiene è CPUT(CUT0).
Si procede come descritto nel paragrafo precedente, ottenendo:
Rep(I1,I2) = X*CPI(DUMMY)+1
&RPHGLVFULPLQDUHWUDODWHQ]DHUHSHWLWLRQWLPH
•
•
•
Per discriminare tra latenza e repetition time nel caso in cui le due istruzioni I1 e I2 in esame siano dello
stesso tipo è sufficiente ripetere l’esperimento descritto al paragrafo precedente utilizzando istruzioni
con e senza dipendenza di dati.
Se si ottengono gli stessi risultati, allora la latenza è mascherata dal repetition time, cioè il ripetition time
è maggiore o uguale alla latenza, e non c’è modo di isolare l’effetto della latenza, se non utilizzando
come seconda istruzione (che impiega i risultati della prima) un’istruzione di tipo diverso.
Se si ottengono risultati diversi allora la latenza è superiore al repetition time
&RPHGLVFULPLQDUHWUDSLSHOLQLQJHUHSOLFD
•
•
•
•
•
Se un’unità di esecuzione non è nè pipelined, nè replicata, latenza e repetition time delle istruzioni la cui
esecuzione è affidata a quell’unità coincidono
Il pipelining riduce il repetition time, ma non la latenza
La replica dell’unità di esecuzione ha un effetto analogo: riduce il repetition time, ma non la latenza
In condizioni ideali, sia pipelining sia replica riducono il repetition time a 1, indipendentemente dalla
latenza
La differenza tra pipelining e replica si osserva in caso di ripetizioni multiple di istruzioni dello stesso tipo.
In particolare, se il numero di repliche dell’unità di esecuzione è inferiore alla latenza di ciascuna di esse,
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
5
Informatica Applicata – Progettazione dei sistemi di elaborazione
•
•
•
•
© Alessandro Bogliolo
ripetendo istruzioni dello stesso tipo si creano conflitti di risorse nell’implementazione con replica, mentre
non se ne creano nell’implementazione pipelined.
Per evidenziare il fenomeno è possibile utilizzare dei benchmark incrementali in cui il CUT sia costituito
da un numero crescente <n> di istruzioni in sequenza del tipo in esame, e senza dipendenze di dati
Se il tempo di CPU del CUT (rispetto al benchamrk di riferimento senza CUT) aumenta linearmente
all’aumentare di <n>, l’unità è pipelined, o replicata un numero di volte almeno pari alla latenza.
Se l’unità non è pipelined e le repliche sono inferiori alla latenza, allora il grafico del tempo di CPU in
funzione di <n> è lineare a tratti, con salti posizionati in corrispondenza dei valori di <n> multipli del
numero di repliche, e di ampiezza pari alla differenza tra la latenza e il numero di repliche.
La figura seguente mostra l’andamento di CPUT(CUT<n>) in funzione di <n> in diverse implementazioni
di un’istruzione la cui unità di esecuzione richiede 4 cicli di clock.
40
35
Pipelined
Replica >= 4
Replica 3
Replica 2
Replica 1
&387&87Q!
30
25
20
15
10
5
0
1
2
3
4
5
Q!
6
7
8
9
10
&RPHFDUDWWHUL]]DUHLVDOWL
1. Anche i salti, condizionati e incondizionati, possono essere caratterizzati inserendoli nel CUT di
opportuni benchmarks. In particolare è possibile definire dei salti che bypassino una o più istruzioni del
CUT. Per caratterizzare il CPI di un salto condizionato la cui condizione non è verificata si può inserire
nel CUT un’unica istruzione di salto con condizione mai verificata e misurare il CPUT del benchmark per
confronto con quello di riferimento con CUT vuoto. Per caratterizzar il CPI di un salto condizionato a cui
condizione è verificata si può utilizzar un CUT in cui il salto (condizionato ad una condizione sempre
vera) è la prima istruzione del CUT e porta alla prima istruzione successiva al CUT.
/DERUDWRULRPLFUREHQFKPDUNLQFUHPHQWDOLSHU&38FKDUDFWHUL]DWLRQ
6FHOWHLPSOHPHQWDWLYH
*&&,QOLQHDVVHPEO\
(VHPSL
2WWLPL]]D]LRQLGLQDPLFKH
2XWRIRUGHUH[HFXWLRQ222[HP c3.7]
Il riordinamento dinamico delle istruzioni effettuato dal processore offre ulteriori opportunità di ottimizzazione,
ma pone numerose difficoltà implementative e complica notevolmente la logica di controllo. Il mantenimento
della coerenza sequenziale puo’ essere compromesso da tre tipi di conflitti di dati:
• 5HDGDIWHUZULWH (RAW): un’istruzione deve utilizzare come operando un risultato prodotto da
un’istruzione precedente. In tal caso è importante che la lettura dell’operando avvenga dopo la scrittura
del risultato. Questo è il conflitto di dati propriamente detto, legato alla dipendenza funzionale.
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
6
Informatica Applicata – Progettazione dei sistemi di elaborazione
© Alessandro Bogliolo
:ULWHDIWHUZULWH (WAW): due o più istruzioni aggiornano lo stesso registro interno. Se l’ordine di
esecuzione delle istruzioni viene modificato si rischia che il valore finale de registro non sia quello
logicamente corretto.
• :ULWHDIWHU5HDG(WAR): un’istruzione legge il contenuto di un registro ed un’istruzione successiva lo
sovrascrive. Cambiando l’ordine si rischia che la sovrascrittura preceda la lettura sporcando il dato. In
questo caso si parla di DQWLGLSHQGHQ]D, in quanto due istruzioni logicamente indipendenti finiscono per
essere dipendenti a causa della condivisione di un registro. I principali accorgimenti che rendono possibile l’esecuzione fuori ordine sono i seguenti:
• Decentramento del controllo dei conflitti (un controller per ogni unità di esecuzione)
• Distribuzione broadcast dei risultati attraverso un bus comune
• Rinomina dei registri per risolvere eventuali conflitti
I supporti architetturali sono i seguenti (fig. 3.29):
• Fasi di ,QVWUXFWLRQGHFRGH e 5HJLVWHUIHWFK separate
• ,QVWUXFWLRQTXHXH
• 5HVHUYDWLRQVWDWLRQ
• &RPPRQGDWDEXV
• 5HRUGHUEXIIHU
In un processore OOO si distinguono 4 fasi i esecuzione di ogni istruzione:
1. ,VVXH (indica il momento in cui un’istruzione è affidata ad una reservation station)
2. ([HFXWH (indica l’effettiva eseuzione da parte dell’unità di esecuzione)
3. :ULWH (indica la scrittura dei risultati, attraverso il common data bus, sul ROB)
4. &RPPLW (indica il write back dei risultati nel register file)
•
%UDQFKSUHGLFWLRQ[HP c3.5]
Maggiori sono il grado di parallelismo e il numero di istruzioni pre-processate contemporaneamente,
maggiore è la perdita relativa di performance dovuta alla non-predicibilità del flusso di istruzioni. Per questo
è utile fare previsioni attendibili sui salti condizionati, per poter continuare a fare fetch e decodifica delle
istruzioni seguenti prima di aver eseguito il salto. Tali previsioni si basano su informazioni statistiche molto
semplici aggiornate dinamicamente per ciascuna istruzione di salto. Il supporto hardware alla previsione dei
salti condizionati è di due tipi:
• %UDQFKSUHGLFWLRQEXIIHU
• %UDQFKWDUJHWEXIIHU
&DUDWWHUL]]D]LRQHGLSUHVWD]LRQLGLSURFHVVRULFRQ222
La caratterizzazione delle prestazioni dei processori OOO mediante microbenchmark incrementali è resa
complessa dallo scarso controllo che il programmatore ha sull’effettivo ordine di esecuzione delle istruzioni.
• Perchè venga preservato l’ordine di esecuzione delle istruzioni del CUT durante l’esecuzione occorre
che tali istruzioni siano nell’ordine più conveniente e che non sia conveniente mescolarle dinamicamente
a quelle esterne al CUT. Questo requisito di ottimalità rende più complessa la creazione di microbenchmarks ed inefficaci i microbenchmarks descritti ai capitoli 2 e 3.
• Caso 1: se il CUT contiene due istruzioni con conflitto di dati o di risorse seguite da una o più istruzioni
indipendenti, l’esecuzione avverrà OOO falsando il risultato. Per ovviare a questo inconveniente occorre
utilizzare CUT con istruzioni in ordine ottimo
• Caso 2: se il CUT contiene due istruzioni con conflitto di dati o di risorse, in fase di esecuzione alcune
delle istruzioni indipendenti esterne al CUT verranno eseguite tra le due istruzioni del CUT. Per ovviare
a questo inconveniente occorre utilizzare benchamrk di natura diversa, come descritto nel seguente
paragrafo.
0LFUREHQFKPDUNLQFUHPHQWDOLFRQ&87ULSHWXWR
•
•
•
Per verificare che i tempi di esecuzione del CUT non siano falsati dall’esecuzione fuori ordine di
istruzioni esterne al CUT, è possibile utilizzare benchmarks in cui la sequenza di istruzioni in esame
compaia ripetutamente nel CUT. Indicando con <m> il numero di repliche della sequenza di istruzioni in
esame, si costruiscono benchmark incrementali che contengano un numero crescete di repliche,
graficando il CPUT in funzione di <m>. Quando l’andamento diventa lineare è segno che le istruzioni
esterne al CUT non sono più utilizzabili per eliminare gli stalli interni al CUT, e il CPUT del CUT è
misurabile come differenza tra i CPUT di due benchmark con <m+1> ed <m> repliche.
Del resto occorre progettare il CUT in modo tale che non sorgano opportunità di esecuzione fuori ordine
di istruzioni prese da due repliche contigue del CUT. Inoltre va osservato che in questo caso le
condizioni al contorno in cui vengono valutate le prestazioni di ciascun CUT sono dati dalle repliche del
CUT stesso, e quindi non sono indipendenti dal CUT.
Esempio:
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
7
Informatica Applicata – Progettazione dei sistemi di elaborazione
© Alessandro Bogliolo
code segment A;
for (i = 0; i < N; i++) {
code segment B;
CUT;
CUT;
CUT;
CUT;
CUT;
code segment C;
}
code segment D;
dove ciascun CUT è composto da una somma floating point e da un nop, tutti i CUT utilizzano gli
stessi dati e il CUT evidenziato in grassetto è quello il cui CPUT non è mascherato da esecuzioni fuori
ordine
•
In questo tipo di benchmark i segmenti di codice B e C non sono necessari, poichè l’effetto
dell’eventuale accoppiamento tra iterazioni successive viene comunque eliminato incrementando il
numero di repliche del CUT interne ad ogni ciclo.
(VHPSLRO¶DUFKLWHWWXUD3GL,QWHO[HP c3.10]
•
•
•
•
•
•
µRSV (µFRGH) simili alle istruzioni di un processore RISC
3 istruzioni IA-32 caricate, decodificate e tradotte per ciclo di clock
6 µRSVgenerati per ciclo di clock
• se un’istruzione viene tradotta in più di 4 µRSVallora la traduzione è distribuita su più cicli di clock
lo scheduling delle µRSVè dinamico e OOO
supporta issuing e committment di un massimo di 3 µRSVper ciclo di clock
La pipeline intera è a 14 stadi
• la pipeline di esecuzione va da 1 a 32 cicli
• PDFURSLSHOLQH a 5 elementi [figura 3.49]
3URFHVVRULDEDVVRFRQVXPRGLSRWHQ]D
/¶HTXD]LRQHGHOFRQVXPRGLSRWHQ]D
•
L’energia minima necessaria a far commutare dal valore logico basso al valore logico alto l’uscita di un
gate CMOS è
(=
•
=∞
∫ 9 W , W GW = 94 =9
2
&
=0
dove V(t) e I(t) sono valori istantanei della tensione di alimentazione e della corrente assorbita dal gate,
V è il valore (assunto costante) della tensione di alimentazione, C è la capacità di carico del gate e Q è
la quantità di carica trasferita dall’alimentazione al condensatore per supportare la variazione di tensione
d’uscita da 0 a V (secondo la nota relazione Q=CV).
Se in un periodo di clock di durata T l’uscita del gate commuta dal basso verso l’alto, la potenza media
consumata durante il periodo è
3=
•
( 9 2&
=
7
7
Se indichiamo con α la probabilità che in determinate condizioni operative l’uscita del gate commuti dal
basso verso l’alto in un generico periodo di clock, la potenza media consumata dal gate in quelle
condizioni operative è:
3=
9 2&
α
7
ottenuta trascurando la potenza consumata dal gate quando non commuta e quando ha una transizione
dall’alto verso il basso. Il corrispondente consumo di energia è:
( = 9 2 &α1 dove Nclk è il numero totale di cicli di clock (nei microprocessori indicato con CPUC)
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
8
Informatica Applicata – Progettazione dei sistemi di elaborazione
•
© Alessandro Bogliolo
La potenza media consumata da un circuito composto da N gates può essere espressa in modo analogo
come somma dei contributi dei singoli
gates:
92
3=
7
92
&α =
& ∑
7
=1
∑& α
=1
& 92
=
& α = 9 2 )& α 7
2SSRUWXQLWjGLULGX]LRQHGHOFRQVXPRGLSRWHQ]D
•
•
•
•
•
•
•
Riduzione delle capacità di carico. La capacità di carico si riduce per effetto dello scaling tecnologico e di
scelte progettuali a livello elettrico e gate.
Riduzione del numero di componenti. Ottimizzazione logica.
Riduzione della probabilità di commutazione. Ottimizzazione a livello logico e a livello RT.
Tensione di alimentazione. La riduzione delle tensioni di alimentazione (che accompagna lo scaling
tecnologico) produce un beneficio quadratico sul consumo di potenza.
Frequenza operativa. La riduzione della frequenza operativa produce un risparmio lineare di potenza.
Vantaggi in termini di potenza e di energia
• Ridurre la tensione di alimentazione produce un risparmio quadratico di potenza e di energia
• Ridurre la frequenza operativa produce un risparmio lineare di potenza, ma non produce alcun
risparmio di energia, in quanto aumenta il tempo totale di esecuzione necessario a portare a termine
un certo task. Si noti infatti che la frequenza operativa (o il periodo di clock) non compaiono
nell’equazione dell’energia.
Legame tra Tensione e Frequenza
Tensione di alimentazione e frequenza operativa non sono scorrelati: abbassando la tensione di
alimentazione si riducono le prestazioni dei gate CMOS. In prima approssimazione, ed entro un range di
variabilità limitato, la performance di un gate CMOS è proporzionale alla tensione di alimentazione.
Quindi, riducendo la tensione occorre ridurre in ugual misura la frequenza. Indicando con Fil fattore di
riduzione della tensione di alimentazione e assumendo di ridurre in ugual misura la frequenza operativa,
3
2
il consumo di potenza si riduce di F , mentre l’energia si riduce di F .
'\QDPLFSRZHUPDQDJHPHQW
•
•
•
•
Cosiccome le prestazioni di un microprocessore possono essere incrementate con accorgimenti di
ottimizzazione dinamica, anche il consumo di potenza puo’ essere ulteriormente ridotto sfruttando
opportunità di ottimizzazione che si creano dinamicamente in quanto dipendono dalle condizioni
operative, incognite in sede di progetto.
L’ottimizzazione dinamica del consumo di potenza prende il nome di G\QDPLFSRZHUPDQDJHPHQW
'30.
Il DPM sfrutta il fatto che i sistemi a microprocessore sono progettati per garantire prestazioni di picco
quando richieste, ma l’effettivo carico di lavoro il più delle volte richiede prestazioni molto inferiori a
quelle di picco sostenibili dal sistema. In tali condizioni è quindi concettualmente possibile ridurre le
prestazioni al minimo indispensabile per risparmiare potenza.
Le tecniche DPM sono principalmente di quattro tipi:
1. spegnimento dei componenti non utilizzati (annullando la tensione di alimentazione di un
componente se ne annulla il consumo, ma il prezzo da pagare è la perdita dello stato interno e la
latenza nella riaccensione)
2. bloccaggio del clock dei componenti non utilizzati (bloccando il clock si riduce l’attività, cioè la
probabilità di commutazione, dei nodi del circuito, riducendo al minimo il consumo di potenza. In
questo caso lo stato interno del componente non viene perso e il risveglio ha latenza trascurabile)
3. riduzione della frequenza operativa (portandola al minimo indispensabile a garantire la prestazione
richiesta dal carico di lavoro corrente)
4. riduzione della tensione di alimentazione (portandola al minimo necessario a garantire prestazioni
compatibili con la frequenza operativa del circuito)
(VHPSLRGLSURFHVVRUHSRZHUPDQDJHDEOH,QWHO;6FDOH
>GDFRPSOHWDUH@
(VHPSLRGLSURFHVVRUHDEDVVRFRQVXPR7UDQVPHWD&UXVRH
>GDFRPSOHWDUH@
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
9
Informatica Applicata – Progettazione dei sistemi di elaborazione
© Alessandro Bogliolo
Fig 3.29
Fig. 3.49
Facoltà di Scienze MM FF NN – Università di Urbino – A.A. 2001/2002
10