1 INCREMENTO DELLE PRESTAZIONI DI UN PROCESSORE TIPI DI PARALLELISMO E CLASSIFICAZIONE DI FLYNN PIPELINING DELLE ISTRUZIONI I PROCESSORI SUPERSCALARI I PROCESSORI VLIW MULTITHREADING, CHIP MULTI PROCESSOR (CMP) E MASSIVELY PARALLEL PROCESSOR (MPP) Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo 2 TIPI DI PARALLELISMO E CLASSIFICAZIONE DI FLYNN Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MOTIVAZIONI 3 E’ opinione diffusa che il trend che negli ultimi anni ha portato alla crescita delle frequenze di funzionamento per le tecnologie CMOS prima o poi dovrà arrestarsi al raggiungimento dei limiti fisici di tale tecnologia, di conseguenza al fine di continuare la minimizzazione dei tempi di esecuzione di un codice su un processore si dovranno cercare di percorrere altre strade. Una paradigma progettuale volto a questo scopo è quello che cerca di adattare l’architettura del processore alle esigenze di parallelismo che l’applicazione presenta, al fine di poter minimizzare il tempo di esecuzione totale svolgendo più task contemporaneamente. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo TIPI DI PARALLELISMO 4 PARALLELISMO A LIVELLO DI ISTRUZIONE: throughput elevato, bassa scalabilità A LIVELLO DI DATI: application specific Architetture di Sistemi Embedded, AA 2007/2008 A LIVELLO DI THREAD: sincronizzazione, risoluzione delle interdipendenze Ing. Francesca Palumbo TIPI DI PARALLELISMO: ILP 5 Il più comune tipo di parallelismo è il PARALLELISMO A LIVELLO DI ISTRUZIONE (ILP: Instruction Level Parallelism). L’ILP prevede l’esecuzione parallela di due o più istruzioni “vicine” nel codice sequenziale da eseguire. Tali istruzioni vengono eseguite in unità funzionali separate, omogenee (se eseguono istruzioni dello stesso tipo) o eterogenee (se eseguono istruzioni di tipo differente). E’ sfruttabile sia da microprocessori general purpose che application specific. Sfruttare il parallelismo a livello di istruzione garantisce al sistema un throughput più elevato ma non è molto scalabile: • limitazioni dovute a problemi strutturali (e.g. accesso in memoria e relativi hazard strutturali); • limitazioni dovute alla limitata parallelizzazione intrinseca del codice (e.g. hazard sui dati e di controllo). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo TIPI DI PARALLELISMO: DLP 6 Il PARALLELISMO A LIVELLO DI DATI (DLP: Data Level Parallelism) prevede l’esecuzione parallela di una medesima istruzione in contemporanea su più di un dato. E’ immediata la considerazione che un codice capace di sfruttare un tale tipo di parallelismo è ben lungi dall’essere un codice di tipo generico. Applicazioni che si prestano intrinsecamente allo sfruttamento del DLP sono quelle che hanno a che fare col calcolo vettoriale (e.g. prodotti scalare per vettore) o col processing di segnali audio-video (dove la medesima operazione viene eseguita su uno stream di dati) Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo TIPI DI PARALLELISMO: TLP (1) 7 Il PARALLELISMO A LIVELLO DI THREAD (TLP: Thread Level Parallelism) prevede l’esecuzione contemporanea di diversi blocchi di istruzioni, definiti appunto thread. Da non confondersi con il concetto di sistema multi-threaded tipico dei sistemi operativi, che prevede la gestione ed esecuzione di un codice su una unica CPU, sulla quale però i thread non vengono eseguiti contemporaneamente ma alternativamente attraverso strategie di scheduling a divisione di tempo. In questo contesto il TLP è inteso invece come esecuzione dei thread contemporanea su unità di esecuzione differenti. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo TIPI DI PARALLELISMO: TLP (2) 8 Problemi tipici legati allo sfruttamento del TLP sono la sincronizzazione fra thread e la risoluzione delle interdipendenze tra di essi. Il thread A potrebbe necessitare di un dato non ancora disponibile perché risultato dell’esecuzione del thread B non ancora iniziato (problema di interdipendenza) oppure il thread A potrebbe dover modificare dato con una frequenza più elevata rispetto a quella dei thread B C e D che condividono tale dato con A (problema di sincronizzazione). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo LA CLASSIFICAZIONE DI FLYNN 9 Nel 1966 Michael J. Flynn propose una classificazione dei sistemi di calcolo basata sulla possibilità di gestire contemporaneamente diversi flussi di istruzioni e sulla possibilità di far lavorare contemporaneamente ciascuna istruzione su dati differenti. CLASSIFICAZIONE SINGLE INSTRUCTION SINGLE DATA (SISD) SINGLE INSTRUCTION MULTIPLE DATA (SIMD) MULTIPLE INSTRUCTION SINGLE DATA (MISD) Architetture di Sistemi Embedded, AA 2007/2008 MULTIPLE INSTRUCTION MULTIPLE DATA (MIMD) Ing. Francesca Palumbo SISD 10 Le macchine di questo tipo non sfruttano alcuna forma di parallelismo e rientrano nel paradigma classico di esecuzione sequenziale delle istruzioni, ove ogni istruzione è caricata dalla memoria, decodificata, ed eseguita sui soli dati componenti il proprio set di operandi. Il processore MIPS nella versione sequenziale nonpipelined è un esempio di calcolatore SISD. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo SIMD 11 Calcolatori di questo tipo sono in grado di eseguire la medesima istruzione su un intero set o vettore di dati. Ovviamente il tipo di parallelismo che viene supportato è il DLP. L’unità di controllo è tipicamente centralizzata al fine di avere N unità sincronizzate operanti in parallelo su N dati ma rispondenti ad una unica istruzione memorizzata nel PC. L’approccio funzionale, relativamente al singolo flusso, è simile all’approccio usato nelle macchine SISD in quanto ogni unità funzionale ha i propri registri di indirizzamento dedicati per poter accedere a dati diversi ed essere in grado di gestirli. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MIMD (1) 12 I calcolatori annoverabili in questa categoria sono composti da diverse unità computazionali, le quali possono eseguire flussi di elaborazione diversi su set di dati diversi. Le varie unità computazionali possono essere dello stesso tipo (MIMD omogenei) o di tipo diverso (MIMD eterogenei). La caratteristica principale di questo tipo di calcolatori è che sono pensati per essere scalabili: l’hardware è progettato per essere venduto con un numero di processori variabile e la scalabilità del software è tale da permettere ad un calcolatore MIMD di funzionare anche se il processore i-esimo di N disponibili smette di farlo. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MIMD (2) 13 Calcolatori di questo tipo ben si prestano a sfruttare al meglio il TLP avendo a disposizione più unità computazionali sulle quali eseguire in parallelo del codice, ma ogni unità computazionale poi può a sua volta sfruttare gli altri tipi di parallelismo per cercare di migliorare ulteriormente le sue prestazioni intrinseche. I problemi tipici di questo tipo di architetture sono legati alla condivisione dei dati (scelta fra memoria condivisa o memoria distribuita) e al coordinamento fra i diversi processori. E’ chiaro che sfruttare il TLP implica anche un overhead di comunicazione e il dover scegliere opportunamente fra le infrastrutture di comunicazione esistenti in letteratura (bus o network on chip). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo RIASSUMENDO… Architetture di Sistemi Embedded, AA 2007/2008 14 Ing. Francesca Palumbo 15 PIPELINING DELLE ISTRUZIONI Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo TEMPO MEDIO PER ISTRUZIONE (TMI) 16 Il tempo medio per istruzione (TMI) rappresenta l’intervallo di tempo medio necessario per l’esecuzione di una singola istruzione, ed è calcolabile come: TMI = CPI × CC dove: CPI è il Clock Per Instruction: ovvero il numero medio di cicli di clock necessari per eseguire un’istruzione CC è il Clock Cycle: ovvero la durata di un colpo di clock Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo TMI E VALUTAZIONE DELLE PRESTAZIONI 17 Nella seguente tabella è riportata una stima dei fattori che condizionano il TMI per diverse architetture CPI=1 CC elevato CPI è ottimo ma CC è condizionato dall’esecuzione della istruzione più lenta (LOAD) Microarchitettura CPI=5 Multiciclo (5 cicli per CC migliore istruzione) CPI è condizionato dal numero di fasi in cui viene scomposta l’esecuzione dell’istruzione ma il CC è migliore perché condizionato dall’esecuzione della fase più lenta (nel caso migliore 1/5 del precedente) Microarchitettura a singolo ciclo Micoarchitettura Pipelined CPI≈1 CC ≈ precedente Architetture di Sistemi Embedded, AA 2007/2008 CPI ≈1 perché si tende ad avere un throughput di quasi una istruzione per colpo di clock e il CC come nel caso precedente è condizionato dall’esecuzione della fase più lenta Ing. Francesca Palumbo PIPELINING DELLE ISTRUZIONI 18 In una microarchitettura di tipo pipelined le unità funzionali di base, necessarie all’esecuzione di una istruzione macchina, vengono organizzate in “stadi” i quali sono utilizzati in sequenza al fine di completare una singola esecuzione. Ogni istruzione ha una latenza di completamento pari al numero di stadi che deve attraversare per essere terminata ma un throughput nel caso migliore tendente all’unità. Le architetture pipelined si pongono l’obiettivo di migliorare le prestazioni del processore sfruttando l’intrinseco parallelismo presente in un flusso di istruzioni sequenziale, favorendo l’overlapping dell’esecuzione di istruzioni differenti a patto che non siano interdipendenti e/o vogliano sfruttare le stesse unità funzionali. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo IL CICLO DI ESECUZIONE DELLE ISTRUZIONI NELLE ARCHITETTURE SEQUENZIALI 19 Nella microarchitettura sequenziale del MIPS in generale l’esecuzione delle istruzioni è divisibile in 5 fasi: FETCH-DECODE-EXECUTE-MEMORY-WRITE BACK Le istruzioni di salto condizionato sono quelle a latenza inferiore (3 colpi di clock) infatti terminano nella fase di EXECUTE, quelle di store necessitano di 4 colpi di clock mentre quelle di load e le istruzioni di tipo logico-aritmetico necessitano di attraversare tutte le 5 fasi. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MICROARCHITETTURA NON-PIPELINED - LATENZA 20 Supponiamo di avere una microarchitettura con le seguenti caratteristiche: ISTRUZ. FE. DEC. EXE. MEM. W.B. Load 20 ps 5 ps 10 ps 20 ps 5 ps Store 20 ps 5 ps 10 ps 20 ps -- Salto 20 ps 5 ps 10 ps -- -- Aritmetico Logica 20 ps 5 ps 10 ps -- 5 ps E il seguente codice assembly: lw $1,100($0) lw $2,104($0) Latenza Effettiva: (2*60+40+55) ps = 215 ps add $3,$2,$1 sw $3,200($0) Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MICROARCHITETTURA PIPELINED – LATENZA (1) 21 In una microarchitettura di tipo pipelined, dove gli stadi di pipe corrispondono esattamente alle fasi di esecuzione di una istruzione, il flusso di esecuzione del precedente codice assembly sarebbe il seguente: Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MICROARCHITETTURA PIPELINED – LATENZA (2) 22 La durata del colpo di clock in una microarchitettura pipelined corrisponde più o meno alla latenza più lunga fra le fasi di esecuzione di una istruzione, in quanto è condizionato dalla sezione di datapath più critica. Il codice assembly visto in precedenza viene processato in 8*20ps=160ps; contro i 215ps calcolati nel caso non-pipelined. E’ importante sottolineare che il miglioramento delle prestazioni di un processore ottenibile tramite il pipelining delle istruzioni comporta semplicemente modifiche architetturali, ma è totalmente trasparente al programmatore. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI OTTENIBILI (1) 23 La pipeline non aiuta a migliorare la latency intrinseca della singola istruzione, che rimane di 5 colpi di clock come nelle microarchitetture sequenziali, ma il throughput. Quest’ultimo risulta essere limitato dal tempo di esecuzione della fase più lenta (il clock non è sceso sotto i 20 ps). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI OTTENIBILI (2) 24 Sebbene l’incremento potenziale delle prestazioni della microarchitettura corrisponda al numero di stadi di pipelining introdotti, il valore di latenza ottenuto non è pari a 215ps/5=43 ps. Per capirne la ragione bisogna considerare il tempo necessario a riempire e svuotare la pipe (in questo esempio solo per 2 colpi di clock su 8 la pipe risulta essere a regime) ed inoltre il fatto che solo nel caso in cui gli stadi di pipeline fossero identici l’incremento sarebbe esattamente: SpeedUp = TimePerInstructionNonPipelined NumberOfStages Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI OTTENIBILI (3) 25 In aggiunta a questi limiti c’è da considerare anche che le prestazioni delle architetture pipelined possono essere drasticamente ridotte a causa del manifestarsi di hazards ed eccezioni. L’effetto degli hazards è quello di interdire l’esecuzione della prossima istruzione prevista dalla sequenza nello slot assegnatogli. Conseguenza è che la pipeline viene stallata, per un numero di colpi di clock tale da risolvere la condizione critica che ha ingenerato l’hazard e questo ovviamente peggiora le prestazioni teoriche ottenibili. 1 SpeedUp = × PipeDepth 1 + PipeStallCyclesPerInstructions Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI OTTENIBILI (4) 26 Tipi di hazards: Hazard Strutturali: si verificano a causa di conflitti per l’accesso alla medesima unità funzionale, se l’unità funzionale in questione non è in grado di soddisfare la combinazione di istruzioni corrente; Hazard legati ai Dati: l’istruzione corrente dipende dal risultato della precedente non ancora conclusa; Hazard legati al Controllo: generati dalla parallelizzazione di codice contenente salti, condizionati o meno. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo HAZARD STRUTTURALI 27 Supponiamo che due differenti istruzioni richiedano nello stesso momento l’accesso ad una stessa risorsa, le possibili soluzioni sono due: Il compilatore potrebbe preventivamente occuparsi di spostare le due istruzioni ad una distanza tale l’una dall’altra che non si crei conflitto (non sempre percorribile perché si potrebbe dover modificare l’intero flusso); Resource Splitting e/o Resource Replication (eg. Un processore potrebbe disporre di un register file a una sola porta di scrittura, ma ci sono situazioni che richiedono due scritture simultanee e se la porta di scrittura non viene duplicata si creerebbe un hazard strutturale). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo HAZARD LEGATI AI DATI Esempio: add sub and or xor 28 $1,$2,$3; $4,$1,$5; $6,$1,$7; $8,$1,$9; $10,$1,$11; Tutte le istruzioni dopo la add utilizzano come operando il suo risultato, che verrà memorizzato in $1 nello stadio di pipeline equivalente alla fase di WRITE BACK. Gli operandi però vengono caricati nel register file nella fase di DECODE e quindi a meno di precauzioni in tal senso la sub e la and avranno accesso ad un valore non ancora aggiornato. La soluzione delle dipendenze a livello di dato è diversa a seconda che si abbia a che fare con “false dipendenze” (e.g. WaW il compilatore si occupa semplicemente di fare il Renaming dei registri) o “vere dipendenze” (e.g. RaW, la soluzione va trovata sia a livello hw, per esempio si usa il data forwarding, che a livello di compilazione tramite il re-ordering delle istruzioni). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo HAZARD LEGATI AL CONTROLLO 29 Gli hazard relativi al controllo possono dipendere sia dai salti condizionati che da quelli incondizionati. Nel caso incondizionato a parte soluzioni hw basate sull’anticipo del calcolo dell’indirizzo di destinazione non si può far molto. Per quelli condizionati anticipando via hw il calcolo dell’indirizzo e il test di salto si possono ridurre da 3 a 1 le bubble da inserire e in più si possono anche utilizzare tecniche di Branch Prediction. Sempre a livello di compilazione esiste anche un’altra tecnica, denominata Branch Hoisting, secondo la quale il compilatore sposta ove possibile l’istruzione di salto tre istruzioni più in alto. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA PIPELINED – L’ESEMPIO DEL MIPS (1) 30 Nel caso del MIPS le 5 fasi di esecuzione delle istruzioni rispecchiano a pieno la struttura interna del datapath. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA PIPELINED – L’ESEMPIO DEL MIPS (2) 31 Di conseguenza il passaggio alla microarchitettura pipelined è immediato Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA PIPELINED – L’ESEMPIO DEL MIPS (3) 32 Il datapath delle due precedenti microarchitetture è praticamente lo stesso e questo rende chiaro il motivo per cui il percorso critico, e di conseguenza la durata del ciclo di clock, nel caso multiciclo sequenziale e in quello pipelined sia pressoché lo stesso. Evidentemente se CC non è cambiato la velocità di accesso alla memoria nel caso pipelined deve essere proporzionalmente incrementata. Il register file viene utilizzato sia nello stadio di DECODE che nello stadio di WRITE BACK, nel caso peggiore nello stesso colpo di clock potrebbero essere effettuate due letture e una scrittura. Per evitare conflitti a livello di dati, il register file è progettato in modo da gestire la scrittura nella prima metà del ciclo di clock e la lettura nella seconda metà. I valori passati da uno stadio di pipe al successivo vengono memorizzati in registri temporanei, noti come pipeline registers, posti fra uno stadio e l’altro. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA PIPELINED – L’ESEMPIO DEL MIPS (4) 33 Dal punto di vista del controllo le modifiche da fare sono diverse, infatti nel caso pipelined non si ha a che fare con una semplice macchina a stati classica. I bit di controllo vengono generati una volta per tutte in funzione dell’opcode durante la fase di DECODE e poi vengono propagati, colpo di clock per colpo di clock, da uno stadio di pipe al successivo attraverso i pipeline registers. Ogni stadio di pipe per controllare le proprie unità funzionali sfrutta parte dei bit di controllo e propaga gli altri senza alterarli. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo 34 I PROCESSORI SUPERSCALARI Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo VERSO LE ARCHITETTURE SUPERSCALARI 35 Nelle architetture scalari e pipelined date diverse classi di istruzioni (e.g. accesso alla memoria, operazioni aritmetico/logiche in virgola fissa, operazioni aritmetiche in virgola mobile) è possibile distinguere diversi flussi di operazioni. Da qui l’evoluzione di queste architetture verso CPU in cui a ogni flusso corrisponde una diversa pipeline, a valle della lettura e decodifica delle istruzioni. In tali architetture è possibile l’implementazione del ILP, a patto di: • potere leggere e decodificare più istruzioni simultaneamente; • disporre di un di controllo in grado di verificare che non esistano dipendenze sia fra le istruzioni lette che fra loro e quelle in esecuzione sulle varie pipeline • disporre di un eventuale logica di riordino delle istruzioni nel caso di flussi a latenza differente (e quindi pipeline di lunghezza diversa) per preservare la semantica originale del codice. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo ARCHITETTURE SUPERSCALARI (1) 36 La caratteristica fondamentale delle architetture superscalari è che l’identificazione del potenziale parallelismo e la conseguente gestione dell’esecuzione delle istruzioni in parallelo non viene compiuta a tempo di compilazione (come invece avviene per i processori VLIW) ma dinamicamente a tempo di esecuzione dall’unità di controllo. Esattamente come nel caso delle architetture pipelined l’implementazione dell’ILP in queste architetture è completamente trasparente al programmatore. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo ARCHITETTURE SUPERSCALARI (2) 37 ISSUE WINDOW • load/store => 5 stadi; • aritmetico/logiche in virgola fissa => 3 stadi; • aritmetiche in virgola mobile => 8 stadi Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo ARCHITETTURE SUPERSCALARI (3) 38 Le prestazioni delle architetture superscalari sono fortemente dipendenti dal compilatore: nonostante la gestione dinamica del parallelismo il compilatore ha il compito di ristrutturare il codice (riordino delle istruzioni e register renaming) per sfruttare al meglio il parallelismo intrinseco del programma, in quanto più unità funzionali debbono essere in grado di operare in parallelo. In aggiunta è necessario disporre di una banda di memoria adeguata per istruzioni e dati per poter consentire l’esecuzione del programma alla velocità richiesta. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo FLUSSO DI ESECUZIONE DELLE ISTRUZIONI (1) 39 Vediamo come funziona a grandi linee una architettura di questo tipo: • Un numero di istruzioni pari, nel caso migliore, a quelle eseguibili in parallelo vengono lette contemporaneamente. Alcune architetture superscalari hanno a disposizione anche dell’hardware dedicato per il branch prediction per consentire la predizione dell’esito dei salti condizionali ed effettuare letture oltre l’istruzione di salto. Durante la decodifica vengono identificate le “vere” dipendenze (RAW) e risolte le “false” (WAW e WAR). In assenza di reservation station ad ogni ciclo, le istruzioni nella “issue window” (che contiene le istruzioni lette e decodificate ma non ancora lanciate in esecuzione) vengono controllate riguardo alle dipendenze rispetto a tutte le istruzioni nella finestra di esecuzione nonché entro la finestra di issue stessa. Se sono presenti le reservation station invece nessun controllo viene effettuato e le istruzioni decodificate vengono inviate alle reservation station. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo FLUSSO DI ESECUZIONE DELLE ISTRUZIONI (2) 40 • La fase di invio delle istruzioni decodificate alle unità funzionali di competenza viene denominata “dispatching” • Le reservation station, ove presenti, hanno il compito di conservare operandi e operazione fino a che l’unità funzionale non è in grado di eseguirla. In pratica sono dei buffer che servono a disaccoppiare la fase di issue e il controllo delle vere dipendenze. Il controllo delle vere dipendenze viene compiuto sulle istruzioni nelle reservation stations in una successiva fase di dispatching e quelle libere da dipendenze vengono inoltrate alle unità funzionali. • Quando una unità funzionale è pronta a ricevere una nuova istruzione la reservation station associata viene controllata al fine di trovare una istruzione eleggibile per l’esecuzione. Se ce ne fossero più di una disponibile si ricorre a politiche di dispatching per selezionarne una e inviarla in esecuzione. • L’esecuzione delle istruzioni ha inizio in parallelo in base alla disponibilità dei dati e non dell’ordine delle istruzioni (out of order execution). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo FLUSSO DI ESECUZIONE DELLE ISTRUZIONI (3) 41 • Una volta completate le istruzioni, i risultati vengono scritti nella “commit unit”, in modo tale che le istruzioni vengano logicamente riordinate cosicché lo stato della CPU sia aggiornato (committment phase) in base all’ordine corretto delle istruzioni e dall’esterno si abbia sempre la sensazione di un esecuzione “in ordine”. Il fatto che le istruzioni possono terminare in ordine diverso rispetto a come sarebbero terminate su un processore scalare o pipelined a causa del reordering iniziale delle istruzioni operato dal compilatore e/o a causa della diversa latenza delle varie pipeline poste in parallelo. Detto ciò non è possibile l’aggiornamento immediato del register file e della memoria: necessità di una memoria temporanea per i risultati dell’istruzione corrente (accessibile da eventuali istruzioni dipendenti) fino alla fase di commitment. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo LIMITAZIONI 42 Più le pipeline dedicate sono profonde e sbilanciate in termini di latenza le une rispetto alle altre più critico è il compito del compilatore e maggiori sono le esigenze di memorizzazione pre-committment dei risultati delle istruzioni, relativamente alle pipeline a latenza inferiore. Le prestazioni delle architetture superscalari sono comunque limitate da dipendenze a livello di dati e salti condizionati esattamente come nel caso delle architetture scalari, vista la necessità per il processore di dovere attendere per dipendenze non risolte o un salto non previsto correttamente. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo 43 I PROCESSORI VLIW Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo VLIW 44 VLIW sta per Very Long Instruction Word. Anche i processori VLIW sfruttano il parallelismo a livello di istruzione ma, a differenza dei processori superscalari, sono dotati di CPU a scheduling statico: le istruzioni eseguibili simultaneamente (in parallelo) sono identificate dal compilatore e assemblate in pacchetti che poi sono letti, decodificati ed eseguiti dalla CPU. Il vantaggio che questo tipo di approccio introduce risiede nella considerazione che nei processori superscalari l’unità controllo occupa il 30-35% dello spazio della CPU; quindi affidare al compilatore il compito di ottimizzare lo scheduling delle istruzioni, aiuta a ridurre la complessità dell’unità di controllo e libera conseguentemente area sul chip. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo LE ISTRUZIONI 45 L’istruzione “lunga” viene indicata come “bundle” ed è proporzionale, in lunghezza, al numero di unità funzionali in grado di eseguire le operazioni in parallelo. In una bundle vengono impacchettate insieme più “sillabe” distinte, che rappresentano le istruzioni macchina elementari, ognuna con i propri operandi. Le sillabe sono eseguibili in parallelo, mentre l’ordine di esecuzione delle bundle è rigorosamente sequenziale. La selezione delle sillabe che andranno a comporre un bundle e l’ordine di esecuzione dei bundle vengono generati in fase di compilazione a partire dal programma statico, al più basandosi su informazioni ottenute da profiling del codice precedentemente ottenute. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo SCHEMA A BLOCCHI GENERALE – VLIW A 4 “VIE” (1) Architetture di Sistemi Embedded, AA 2007/2008 46 Ing. Francesca Palumbo SCHEMA A BLOCCHI GENERALE – VLIW A 4 “VIE” (2) 47 • 4 “lane” o “vie”, cioè 4 unità funzionali aritmetico/logiche sono collegate ad un unico register file dotato di 4 porte di scrittura e 8 di lettura. • Una sola lane ha la possibilità di accedere alla cache dati, il che significa che in un bundle di 4 sillabe una sola sillaba potrà essere una operazione di accesso alla memoria. • Non è detto che se ho una bundle di 4 sillabe si abbiano esattamente 4 lane, potrebbero essercene di più ma per qualche ragione non essere sfruttate. • La BYPASS LOGIC serve a ridurre la latenza visibile di alcune operazioni, ed è in pratica equivalente alla logica di forwarding che viene utilizzata dal MIPS pipelined per ridurre il numero di stalli dovuti alle dipendenze fra dati. • L’area di interconnessione è elevata. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo SCHEMA DI FUNZIONAMENTO 48 Il compilatore: • identifica 4 operazioni mutuamente indipendenti, per comporre le sillabe di un bundle; • si occupa, ove possibile, di risolvere i conflitti relativi alle risorse; • associa ad ogni sillaba una lane, lungo la quale verrà eseguita (il codice oggetto specifica, non solo quali operazioni vengono eseguite in un’istruzione lunga, ma anche su quali unità funzionali sono eseguite). Conflitti di controllo: in un bundle può essere presente al più una operazione che modifica il flusso del controllo dell’esecuzione del programma (e.g. salto condizionato o no, chiamata a funzione o ritorno da sottoprogramma). Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo I CLUSTER 49 Per poter essere in grado si supportare efficientemente applicazioni che presentino intrinsecamente gradi di parallelismo superiore, la CPU viene organizzata in “cluster”. Ogni cluster sfrutta un parallelismo limitato (e.g. 4 lane per cluster), ma nel complesso si possono ottenere prestazioni migliori. Esiterà un banco di registri dedicato per ogni cluster, ma è necessario dell’hardware aggiuntivo per gestire la coerenza della memoria. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo PRO E CONTRO (1) 50 A LIVELLO ARCHITETTURALE: La microarchitettura di un processore VLIW è più semplice di una CPU superscalare con uguale parallelismo, e tendenzialmente si possono raggiungere frequenze di funzionamento superiori (considerato che il ciclo di clock ora è determinato dai percorsi critici del datapath e non dall’unità di controllo che è notevolmente più semplice) . A LIVELLO DI COMPILAZIONE: Il compilatore deve avere una conoscenza dei dettagli della microarchitettura unitamente ad alcuni parametri tecnologici (e.g. la latenza e throughput delle unità funzionali) al fine di poter efficientemente comporre i bundle. Questo fatto riduce la portabilità del codice oggetto anche fra successive generazioni della stessa famiglia di processori VLIW, in quanto potrebbe venire a mancare la compatibilità binaria. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo PRO E CONTRO (2) 51 Per risolvere i problemi di compatibilità binaria una soluzione diffusa è quella che utilizza i “software binary translation”: software dedicati per la conversione dinamica, al momento dell’esecuzione, delle istruzioni appartenenti ad un instruction set in equivalenti istruzioni dell’instruction set nativo. Nonostante le sofisticate tecniche di analisi, generazione di codice e scheduling utilizzate dai compilatori VLIW, è possibile che non sempre il compilatore sia in grado di garantire ad ogni colpo di clock l’utilizzo di ogni unità funzionale. In tali casi verrebbero inserite delle NOP. Se l’applicazione non presenta un grado di parallelismo adeguato a quello messo a disposizione, il numero di NOP potrebbe risultare elevato, causando un utilizzo poco efficiente della memoria. Per questo motivo i processori VLIW utilizzano tecniche di compressione dell’immagine dell’applicazione in memoria, permettendo di evitare, in fase di compilazione, l’introduzione di NOP, per poi generarli via hardware durante la fase di issue delle istruzioni. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo 52 MULTITHREADING, CHIP MULTI PROCESSOR (CMP) E MASSIVELY PARALLEL PROCESSOR (MPP) Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MULTITHREADING A GRANA FINE E GRANA GROSSA 53 GRANA FINE: La CPU commuta da un thread all’altro ad ogni istruzione. L’esecuzione di diversi thread risulta essere interallacciata (nel caso di stallo, il thread che dovrebbe essere eseguito salta il suo turno di esecuzione). La CPU deve essere in grado di cambiare thread a ogni ciclo di clock, quindi per evitare inefficienze sono richieste duplicazioni pesanti dell’hardware disponibile. GRANA GREZZA: La CPU commuta da un thread a un altro solo in corrispondenza di stalli lunghi (e.g. cache miss). I thread in questione condividono molte risorse del sistema (e.g. registri architetturali) per questo la commutazione da un thread all’altro richiede diversi cicli di clock per poter effettuare il salvataggio del contesto. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo SIMULTANEOUS MULTITHREADING (SMT) 54 L’obiettivo di questa classe di architetture è quello di utilizzare le risorse messe a disposizione da un processore superscalare, per sfruttare simultaneamente ILP e TLP. Il motivo fondamentale risiede nella considerazione che molto spesso una CPU ha a disposizione più risorse funzionali di quante un singolo thread possa effettivamente sfruttare. Unitamente a ciò, grazie alle tecniche di register renaming e allo scheduling dinamico, è possibile pensare di eseguire più istruzioni indipendenti sulla stessa CPU. Se le istruzioni che vengono lanciate in parallelo appartengono a thread diversi allora si possono anche limitare le problematiche relative alle dipendenze fra dati. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo RIASSUMENDO … Architetture di Sistemi Embedded, AA 2007/2008 55 Ing. Francesca Palumbo CHIP MULTI PROCESSOR (CMP) (1) 56 I Chip MultiProcessor (CMP) rappresentano un approccio alternativo a quello dei processori SMT per la gestione del TLP. In questo caso l’architettura del processore è composta dalla replicazione di diverse celle di calcolo identiche connesse poi le une con le altre (tipicamente a formare una griglia). La caratteristica fondamentale di queste architetture, da cui prendono anche il nome, è il fatto che la potenza computazionale e la conseguente complessità di ogni elemento della griglia di processori è paragonabile a quella di una classica architettura superscalare. Ogni cella è in grado di eseguire uno o più thread ed interagirà con le altre mediante un layer di comunicazione adeguato alle esigenze di banda che una architettura di questo tipo richiede. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo CHIP MULTI PROCESSOR (CMP) (2) 57 La differenza fondamentale fra un architettura SMT e un architettura CMP risiede nel fatto che nei CMP le diverse unità funzionali sono indipendenti le une dalle altre e non condividono alcun tipo di logica di esecuzione delle istruzioni. Risultato di questa diversità è una maggiore scalabilità intrinseca di architetture di questo tipo. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo MASSIVELY PARALLEL PROCESSOR (MPP) 58 Nel caso di architetture che prevedano l’integrazione all’interno dello stesso chip di un numero elevato di celle elementari di calcolo (in letteratura si parla di almeno 64 unità), il modello architetturale prende il nome di Massively Parallel Processor (MPP). Tipico esempio di MPP sono le architetture di tipo “tyled-based”. Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo 59 MATERIALE DI RIFERIMENTO Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo 60 TIPI DI PARALLELISMO E CLASSIFICAZIONE DI FLYNN: Patterson, Hennessy; “Struttura e Progettazione dei Calcolatori: l’interfaccia hardware e software”: capitolo 9 – I processori paralleli PIPELINING DELLE ISTRUZIONI: Patterson, Hennessy; “Computer Architecture, A Quantitative Approach”: appendice A - Pipelining: Basic and Intermediate Concepts I PROCESSORI SUPERSCALARI E I PROCESSORI VLIW: Patterson, Hennessy; “Computer Architecture, A Quantitative Approach”: capitolo 3 – Instruction-Level Parallelism and Its dynamic Exploitation CMP E MPP: Patterson, Hennessy; “Struttura e Progettazione dei Calcolatori: l’interfaccia hardware e software”: capitolo 9 – I processori paralleli Architetture di Sistemi Embedded, AA 2007/2008 Ing. Francesca Palumbo