Politecnico di Milano Come aumentare le prestazioni Cenni alle architetture avanzate Mariagiovanna Sami Richiamo: CPI CPI = (cicli di clock della CPU richiesti dall’esecuzione di un programma)/ numero di istruzioni nel programma dinamico tempo di CPU = numero istruzioni * CPI * durata del ciclo di clock = (numero istruzioni * CPI) /fck Introducendo nella prima formula le unità di misura, si può notare in che relazione stiano le varie componenti istruzioni cicli clock sec ondi sec ondi ∗ ∗ = = tempo di CPU programma istruzione ciclo di clock programma 20072007-08 -2- Fattori che influenzano il tempo di CPU ciclo di clock (o frequenza) tecnologia hardware e organizzazione cicli di clock per istruzione organizzazione e architettura set istruzioni numero istruzioni architettura set istruzioni e tecnologia dei compilatori Non è possibile modificare separatamente i vari termini poiché le tecnologie di base da cui dipendono le singole caratteristiche sono interdipendenti 20072007-08 -3- Prospettiva storica Fino agli anni ’70: si è lavorato principalmente migliorando le tecnologie elettroniche; Dopo gli anni ‘70-80 si è “rivisitato” il progetto dell’insieme di istruzioni (passando in molti casi alla soluzione load/store) abbinato all’uso esteso del pipelining; Anni ’90: si è introdotto massicciamente il Parallelismo a livello istruzione (architetture “superscalari” e “VLIW”); Dopo il 2005: architetture multi-core e many-core, altre forme di parallelismo. 20072007-08 -4- Il parallelismo a livello di istruzione: concetti fondamentali Si possono distinguere flussi di operazioni differenti per diverse classi di istruzioni: Un flusso per l’accesso alla memoria (Load/Store) Uno per le operazioni aritmetiche in virgola fissa Uno per le operazioni aritmetiche in virgola mobile… È ragionevole pensare a una CPU in cui a ogni flusso corrisponde una diversa pipeline, a valle della lettura e decodifica delle istruzioni; 20072007-08 -5- Il parallelismo a livello di istruzione: concetti fondamentali Si supponga di potere leggere e decodificare più istruzioni simultaneamente: si supponga inoltre che l’unità di controllo sia in grado di verificare se fra tali istruzioni non esistono dipendenze (né esistono dipendenze con le istruzioni già avviate attraverso le pipeline: Ö diventa possibile avviare in esecuzione simultaneamente – in parallelo - più istruzioni; 20072007-08 -6- Il parallelismo a livello di istruzione: concetti fondamentali Le architetture in cui identificazione del potenziale parallelismo e conseguente gestione delle istruzioni vengono compiute dall’unità di controllo durante l’esecuzione (in modo dinamico) sono dette superscalari. Una CPU superscalare è dotata di parallelismo a livello di istruzione (ILP) – più istruzioni appartenenti allo stesso flusso di programma vengono eseguite in parallelo. Il parallelismo in una macchina superscalare è trasparente al programmatore – si può eseguire codice binario (compatibile!) compilato per un’architettura più semplice. 20072007-08 -7- Architetture superscalari Esempio: architettura con 3 pipeline: Floating-point pipeline Integer pipeline Load/store pipeline capace di leggere, decodificare e avviare all’esecuizione fino a tre istruzioni per ciclo Register File Fetch/decode Hazards Unit Floating-point pipeline - 8 phases Load/store pipeline - 5 phases Integer pipeline - 3 phases 20072007-08 -8- Architetture superscalari Le prestazioni dipendono fortemente dalle risorse disponibili durante l’esecuzione, dal progetto del sistema di memoria… e dal compilatore! più unità funzionali debbono essere in grado di operare in parallelo; l’unità di controllo deve garantire che alla fine i risultati siano sempre “corretti”, cioè identici a quelli che si avrebbero sulla macchina di Von Neumann; la banda della memoria per istruzioni e dati deve consentire di mantenere il throughput richiesto … e un compilatore ottimizzante deve ristrutturare il codice per sfruttare meglio il parallelismo intrinseco del programma (non è in contraddizione con la “compatibilità binaria”, riguarda l’ottimalità delle prestazioni!) 20072007-08 -9- Processori superscalari Macchine con scheduling dinamico (superscalari) la scelta delle istruzioni da avviare all’esecuzione è fatta dallo hardware; È possibile la compatibilità a livello di codice binario con CPU a singola pipeline o anche non pipelined; Molto diffuse Pentium (da Pro a IV), Centrino, AMD Opteron, IBM Power… L’esecuzione delle istruzioni ha inizio in base alla disponibilità dei dati e non dell’ordine delle istruzioni Ö esecuzione fuori ordine Completate le istruzioni, i risultati sono riordinati in modo da aggiornare lo stato della CPU in base all’ordine corretto delle istruzioni (committment). 20072007-08 - 10 - Le dipendenze di controllo Per ottenere buon parallelismo si devono superare le dipendenze di controllo; Quando si incontra un salto condizionato: si effettua una predizione sul risultato del salto si leggono in modo speculativo le istruzioni che si prevede saranno eseguite dopo queste nuove istruzioni vengono avviate in esecuzione in modo speculativo (“etichettate” come tali) 20072007-08 - 11 - Speculazione Se la predizione era corretta Si toglie l’etichetta di “speculazione” alle istruzioni lette e si permette che aggiornino lo stato della macchina Se la predizione era sbagliata Si deve “tornare indietro” garantendo che lo stato non sia modificato erroneamente Si riprende l’esecuzione dal flusso corretto; Se la probabilità che la predizione sia corretta è elevata, si migliorano le prestazioni; Nelle macchine superscalari, la predizione è dinamica, basata sulla “storia precedente” dell’esecuzione del programma. 20072007-08 - 12 - Dipendenze da risolvere Aspetto essenziale: l’unità di controllo è molto complessa (deve gestire dipendenze, esecuzione fuori ordine, esecuzione speculativa…) Occupa molta area di silicio; Determina la durata del ciclo di clock; Porta a consumo di potenza elevato. 20072007-08 - 13 - L’alternativa di ILP: le architetture VLIW Consideriamo ancora CPU con molte pipeline di esecuzione: Alternativa alla soluzione superscalare: CPU “Very Long Instruction Word” (VLIW): l’istruzione è molto lunga e costituita in realtà da n istruzioni elementari (“sillabe”) mutuamente indipendenti e composte dal compilatore in un’unica istruzione lunga Ö scheduling statico – il parallelismo è estratto in fase di compilazione, a priori. Se non si trovano istruzioni indipendenti in numero sufficiente, si completa l’istruzione lunga inserendo delle nop. 20072007-08 - 14 - L’alternativa di ILP: le architetture VLIW Lo stadio di lettura legge l’istruzione lunga, la decodifica e invia le diverse istruzioni elementari ai diversi data path specializzati (spesso detti lanes); Vincoli sulle dipendenze: verificati dal compilatore. Esempi di architettura VLIW: Intel Itanium (64 bit), ST200, alcuni DSP di ultima generazione; In una VLIW l’unità di controllo poco più complessa di quella di una singola pipeline; occorre risolvere problemi quali l’eccessiva occupazione della memoria, la gestione efficiente dei salti, etc. 20072007-08 - 15 - La necessità di architetture con prestazioni più elevate Per particolari applicazioni (alcune di grande rilevanza pratica – es., multimedia) il parallelismo offerto da pipelining e Instruction-Level Parallelism non è sufficiente a garantire le prestazioni necessarie; Per tentare un ulteriore miglioramento dell’ILP, la complessità dell’unità di controllo di un’architettura superscalare e il consumo di potenza crescono troppo in rapporto al miglioramento delle prestazioni ottenibile; Soluzione: cercare ulteriori forme di parallelismo nell’applicazione e proporre architetture che lo sfruttino. 20072007-08 - 16 - Un primo esempio: Vector processors Sviluppati inizialmente per il supercalcolo: i principi sono oggi adottati per elaborazione multimediale. L’insieme delle istruzioni ne include alcune che lavorano su vettori di dati. SCALARE (1 operazione) v1 v2 r2 r1 20072007-08 VETTORIALE (N operazioni) + + r3 v3 add r3, r1, r2 vector length vadd.vv v3, v1, v2 - 17 - Vector processors Un’unica istruzione vettoriale implica molte operazioni (un intero loop) Si leggono meno istruzioni Ogni risultato è indipendente da quello precedente Si possono eseguire in parallelo più operazioni Il progetto è più semplice Ö alta frequenza di clock Il compilatore (o il programmatore) deve garantire che non ci siano dipendenze Si riducono le alee dovute a dipendenze di controllo Le istruzioni vettoriali accedono alla memoria secondo uno schema noto Si può effettuare “prefetching” dei dati – un gran numero di dati viene preventivamente letto in un insieme di “registri vettoriali” Si possono sfruttare memorie a banda larga Non occorre cache dati! 20072007-08 - 18 - Uso esteso di operazioni vettoriali Istruzioni di tipo vettoriale sono state introdotte in alcuni DSP di fascia alta; Opportune tecniche di programmazione/compilazione permettono di sfruttare al meglio le opportunità offerte; In alternativa: adozione di particolari istruzioni di tipo parallelo per operazioni di tipo multimediale (estensione MMX delle architetture Intel); Parallelismo noto come SIMD (Single InstructionMultiple Data): una stessa istruzione (letta quindi una volta sola) viene eseguita simultaneamente su più dati indipendenti fra loro. 20072007-08 - 19 - Più in generale: architetture parallele Single instruction, single data stream – SISD – la solita CPU! Single instruction, multiple data stream - SIMD Multiple instruction, single data stream – MISD – in pratica, non esiste… Multiple instruction, multiple data stream- MIMD 20072007-08 - 20 - Single Instruction, Single Data Stream SISD Un singolo processore Un solo flusso di istruzioni I dati sono registrati in una sola memoria Un solo processore 20072007-08 - 21 - Single Instruction, Multiple Data Stream - SIMD Una sola istruzione di macchina controlla l’esecuzione simultanea da parte di molti elementi di elaborazione che operano in modo sincronizzato (lockstep) Ogni elemento di elaborazione ha una memoria dati associata Ogni istruzione viene eseguita su un differente insieme di dati da elementi di elaborazione 20072007-08 - 22 - Single Instruction, Multiple Data Stream - SIMD 20072007-08 - 23 - Multiple Instruction, Multiple Data Stream- MIMD Più processori eseguono simultaneamente differenti sequenze di istruzioni su differenti insiemi di dati Sistemi di varie classi, da “SMP” (symmetric multiProcessor) a cluster e al grid! Comunque: I processori sono di tipo generale Ognuno ha un insieme di istruzioni di tipo generale (di norma) Un’ulteriore classificazione del sistema fa riferimento al modo di comunicazione fra i processori. 20072007-08 - 24 - Multiple Instruction, Multiple Data Stream- MIMD Fondamentalmente, due classi di architetture MIMD: Sistemi a memoria condivisa (shared memory): le diverse CPU condividono un unico spazio di indirizzamento della memoria, eseguono processi diversi in modo concorrente, si scambiano informazione attraverso I dati scritti/letti in memoria. Sistemi a scambio di messaggio (message-passing): le varie unità sono dotate ognuna di un proprio spazio di indirizzamento (e di una propria memoria locale), comunicano attraverso una rete di interconnessione scambiandosi messaggi (che consentono scambio di dati, sincronizzazione fra i processi etc.) 20072007-08 - 25 - MIMD – shared memory: schema di principio CPU 1 Cache 1 CPU 2 Cache 2 interconnessione Memoria 20072007-08 - 26 - CPU k Cache k SMP: organizzazione reale Problemi: Il bus diventa un collo di bottiglia Ö al crescere del numero delle CPU si passa a reti di interconnessione più complesse; Ogni CPU ha la/le sua/e cache per rendere il sistema più veloce Ö occorre garantire la coerenza non solo fra cache e RAM, ma anche fra le diverse “immagini” contenute nelle varie cache; Una memoria monolitica con una sola porta di accesso diventa un collo di bottiglia Ö uso di memorie a più porte (soluzione poco scalabile) oppure organizzazione della memoria in “moduli” Ö memoria logicamente condivisa ma fisicamente distribuita. 20072007-08 - 27 - SMP: organizzazione reale Oggi, le architetture ad alte prestazioni su chip appartengono a questa classe (“Chip Multi Processors” – CMP): v. architetture dual-core, quad-core… Sun Niagara (8 core – CPU – e relative cache su un unico chip); Il parallelismo di esecuzione fra le diverse CPU e quello fra flussi di programma (thread) diversi – estratti da uno stesso programma o anche appartenenti a programmi diversi; Tendenza attuale: ridurre la complessità della singola CPU (quindi ridurre l’ILP estratto da un singolo flusso di istruzioni) a favore del numero di CPU sul chip (quindi a favore del parallelismo fra thread - TLP) 20072007-08 - 28 - SMP: organizzazione reale Vantaggi: si ottengono prestazioni più elevate e si bilancia meglio il consumo di potenza (eventuali CPU non attive possono essere messe “in sonno”); Problema: per ottenere prestazioni elevate in modo “sostenuto” occorre bilanciare bene il carico sulle diverse CPU – occorre che il programma sia progettato in modo da essere eseguito su un sistema parallelo! Parallel programming: un settore aperto… 20072007-08 - 29 -