Architett Configurazione della memoria secondaria per aumentare PRESTAZIONI e AFFIDABILITA' degli HDD Aumentare le prestazioni Distribuire informazione memorizzata su più dischi Aumentare l'affidabilità Duplicare l'informazione memorizzata su più dischi L'informazione viene divisa in strips (di k blocchi) e ogni strip viene memorizzata su un un disco diverso op Maggiori prestazioni Block striping reg1 RAID 0 Minore affidabilità reg2 Struttura istruzione reg dst Ogni strip viene memorizzata su un disco diverso e replicata su un disco di mirror shift Prestazioni e affidabilità Block striping + Mirroring funct MIPS Register RAID 1 Costo tipi di istruzione Immediate Informazione replicata con ECC(p.e:Hamming) memorizzata bit a bit in dischi diversi Jump Definita a livello teorico ALU Bit level striping + ECC Prestazioni elevate per letture sequenziali di dati Architettura RAID 2 CU PC Irrealizzabile la sincronizzazione perfetta tra i dischi IF: Instruction Fetch Il byte di parità(p.e:EX-OR) viene calcolato per i byte memorizzati nella stessa posizione Lettura sequenziale efficiente Idee di fondo Byte level striping + parity ID: Instruction Decode RAID: Redundant Array of Independent Disks Fasi RAID 3 Disco di parità molto sollecitato e parità da ricalcolare ad ogni modifica di dati EX: Execution MEM: Memory Access Macchina multiciclo Introduzione WB: Write Back Striping a livello di blocchi CPI = 3,98 Prestazioni Affidabilità elevata per rottura di 1 disco CU più complessa Block level striping + parity Registri intermedi RAID 4 Il ricalcolo della parità per ogni modifica di dati è inefficiente, il disco di parità è bottleneck Per semplificare il ruolo del programmatore l'Instruction Set viene ampliato fornendo istruzioni molto potenti Funziona come il 4 ma riduce il carico del disco di parità CISC Migliore combinazione tra prestazioni, affidabilità e capacità di memorizzazione PIU' USATO in applicazioni generiche CU molto complicate per intepretare l'istruzione Intel: incrocio tra RISC e CISC per retrocompatibilità Block level striping + distributed parity No microcodice sofisticato Efficiente e parità non bottleneck RAID 5 Dimensioni fisse Istruzioni facili da decodificare In caso di guasto è più complessa la ricostruzione del contenuto perché contiene sia dati che parità Sfrutta principi di buona progettazipne Come il 5 ma con due livelli di parità Supporta doppio guasto contemporaneo, maggiore affidabilità Block level striping + dual distributed parity Tanti registri multi purpose RISC RAID 6 Campi fissi Accesso alla memoria limitato a LOAD e STORE Sfruttamento del pipelining Maggiore overhead, superfluo perché una rottura doppia è molto improbabile Meno overhead per la decodifica dell'istruzione e CU più semplici Compito del programmatore più arduo e poca retrocompatibilità Sovrappone l'esecuzione delle istruzioni sfruttando tutte le unità funzionali contemporaneamente Cache istruzioni != cache dati Caratteristiche strutturali Le istruzioni vengono eseguite una alla volta su un unico flusso di dati Classica architettura monoprocessore SISD: Single Instruction (stream) Single Data (stream) Multiple issue e pipeline rientrano forzatamente in questa classe Non ha senso anche se qualcuno sostiene che i moderni processori ne facciano parte Soluzione PIPELINING SIMD: Single Instruction (stream) Multiple Data (stream) Architetture multiprocessore e multicomputer Dati (istruzioni dipendenti sovrapposte PROBLEMI MISD: Multiple Instruction (stream) Single Data (stream) Processori vettoriali Registri di pipelining Strutturali (UF usate contemporaneamente) Predizione Controllo (calcolo dei branch) RISOLTO RISOLTO NON RISOLTO Delayed branch Soluzione MIMD: Multiple Instruction (stream) Multiple Data (stream) Duplicazione UF Forwarding NON RISOLTO Statico Scheduling Dinamico Più pipeline Architetture superscalari Più fasi EX Tassonomia di Flynn Legge che calcola lo speed up dato da un'architettura a più processori Clock per fase più breve Dati Legge di Amdahl Poco parallelismo nei programmi Dipendenze Problemi Costo (di T) comunicazione processore-memoria Introduzione Incremento prestazioni Affidabilità del sistema Alee Suddivisione del carico anche su ampia scala Antidipendenza Nomi RAW Vantaggi Una istruzione necessita di un risultato scritto sopra Se j scrive su un registro che i deve ancora leggere Dipendenza in output Possibile lettura del registro prima che sia stato scritto il dato WAW Possibile scrittura in ordine scorretto, il registo può non contenere il risultato più recente WAR Possibile riscrittura del registro prima che il dato sia stato letto Nato per CPU monocore Stazione di prenotazione Se fatti girare su CPU che lo supportano ne sfruttano le caratteristiche Il concetto non va bene tra thread diversi perché si cambia spazio di indirizzamento Common Data Bus Se un thread va in stall la CPU passa ad un altro thread senza problemi di CONTEXT SWITCH Nel coarse-grained si può svuotare la pipeline ad ogni context switch per sapere a che thread appartiene l'istruzione Introduzione Accesso distribuito agli operatori Pregi essenziali I thread vengono identificati con un ID Schema di tomasulo Le istruzioni devono essere nella cache per non rallentare il context switch Alee WAW e WAR risolte con ridenominazione Issue Il thread-switch avviene ad ogni istruzione, politica ROUND ROBIN Fasi Execute Pipeline k stage Write Result Almeno k peer-thread da eseguire Efficiente se la branch prediction è accurata Pipeline potenzialmente sempre piena (a meno di CACHE MISS) CPU esegue thread switch ad ogni ciclo di clock Fine-grained Esecuzione OUT of ORDER risolve anche stall da CACHE MISS Salto eseguito SEMPRE Statica Salto eseguito MAI IMPOSSIBILE implementare CONTEXT SWITCH efficiente 1 bit Un thread viene rallentato anche quando potrebbe proseguire la sua esecuzione Rischi di dipendenze PROBLEMI 2 bit Caso meno thread che stage Branch Prediction Buffer 3 o più bit Switch quando c'è stall Predittori correlati Sfruttamento della pipeline anche quando ci sono pochi thread Spreco di tempo Load Switch avviene DOPO che c'è stato lo stall Coarse-grained Torneo PROBLEMI Branch Target Buffer Medium Grained Non si spreca il ciclo di stall del coarse-grained Istruzioni memorizzate insieme a risultato Esecuzione Out of Order ma COMMIT in Order tramite CODA CIRCOLARE Multithreading Branch Prediction Supporto per la ridenominazione dei registri ILP + TLP Si occupano più unità funzionali Tramite l'ILP si lanciano "contemporaneamente" istruzioni di thread diversi Per TRADUZIONE INDIRIZZI : servono k mem associative per k programmi paralleli Dinamica Tipo di ISTRUZIONE Simultaneous Servono registri rinominabili in abbondanza Si tiene conto dei salti circostanti Si tengono più BPB e si usa quello che si è comportato meglio l'ultima volta Si tiene in memoria l'indirizzo di destinazione del salto ILP DINAMICO Thread switch quando si esegue una istruzione con potenziale stall Jump Ridenominazione dei registri Se i e j scrivono nello stesso registro DESTINAZIONE 4 entry Esecuzione contemporanea di istruzioni appartenenti a programmi diversi Speculazione Hardware VALORE ROB READY Incrementa le prestazioni del 25-30% con aumento dimensioni processore 5% Con condivisione CACHE e RAM 2 PC 4 macropassi Partizionamento reale delle risorse Un thread non può usare la parte di risorsa inutilizzata da un altro thread ILP Intel (Hyperthreading) Condivisione vera e propria delle risorse Condivisione controllata delle risorse Accesso ai registri simultaneo Manipolazione del codice in fase di compilazione Se tutti i thread necessitano di 3/4 della CACHE, molti CACHE MISS Concetti Switch ad ogni ciclo di clock SALTANDO THREAD IN STALL Fine Grained Multi Threading SUN UltraSPARC T1 Utilizzato particolarmente in ambito embedded per basso overhead computazionale Casi di studio Strettamente collegato all'architettura sottostante Architettura con più CPU e memoria primaria condivisa Pipeline scheduling Tutti i processi condividono lo spazio di indirizzamento logico, mappabile fisicamente su memoria di processori diversi Rischio cache miss per spostamento processo Introduzione Strumenti L'efficienza dipende dal numero di registri disponibili (rischio di appoggiarsi a RAM) Loop unrolling PROBLEMI Bilanciamento del carico Possiblità di spostare processi tra le code Spostamento delle istruzioni per LIMITARE gli STALL Nasce per limitare l'overhead di gestione del loop SO moderni usano SMP (symmetric multiprocessing), uno scheduler per processore SO moderni con SMP usano code separate per ogni processore Come si fa per cicli di lunghezza non definita? Codice generato più lungo con rischio di CACHE MISS delle istruzioni Uniform Memory Access Ogni CPU ha tempo di accesso a MEM uniforme Tutti i processori condividono la memoria primaria La memoria condivisa può essere il collo di bottiglia Compilatore genera ISSUE PACKETS Sistemi UMA Cache Snooper non fa nulla Multiple Issue Statico approccio VLIW Dato è presente nella mia Cache Non faccio nulla Read hit Write Through Tecniche più sofisticate Exclusive Linea valida, RAM NON aggiornata, no altre copie Modified PROBLEMA Estende concetto VLIW operation group 4 bit Inzializzazione Architettura IA-64 template 5 bit Advanced Load SOLUZIONE Trimedia TM32 LIMITE: con un bus singolo si possono avere max 32 CPU Si usa una rete che connette ogni processore con ogni memoria Ogni commutatore si occupa dell'inoltro dell'informazione a seconda del valore di un bit, nell'ordine PREGI Semplicità dell'hardware Codice molto lungo OBIETTIVO: spostare una parte di informazioni utili in memorie più veloci e costose Esempio: rete Omega n CPU -> (n/2)log2(n) Spaziale Località Ogni CACHE LINE è numerata e identificata dai primi (n-m) bit dell'indirizzo in RAM In ogni istante alcune delle linee di RAM sono anche nella cache Multiprocessori (sistemi a mem condivisa) Non tutte le operazioni possono essere eseguite contemporaneamente E' probabile che vengano utilizzati indirizzi utilizzati di recente (es.: cicli) RAM divisa in CACHE LINES di dimensione fissa Struttura Value (opzionale) E' probabile che vengano utilizzati indirizzi simili a quelli appena usati (es.: array) Temporale Commutatori a più stadi CPU e memoria si scambiano messaggi con 4 campi Funzionamento Non Caching NUMA (NC-NUMA) Prestazioni dipendenti dalla dimensione delle linee Una MMU apposita controlla quale memoria viene utilizzata Utilizzo di cache -> PROBLEMA coerenza Ogni nodo del sistema ha directory che traccia le linee nelle cache Far sì che la linea possa essere in più di una cache contemporaneamente Funzionamento di base Non Uniform Memory Access Cache Coherent (CC-NUMA) 1 ciclo clock per richiedere indirizzo in RAM Costo di servizio di un cache miss Effetti sul sistema Ottimizzazione Tempo d'accesso che varia in funzione della memoria in cui si trova il dato Slide da 51 a 62 (p.17-21) Qualsiasi lettura restituisce il valore più recente scritto Aumentare dimensione cache Architetture Parallele Cache Direct-Mapped Bit di validità Contenuto della cache Cache associativa a n vie Sistema combinato UMA/CC-NUMA Cache Set-Associative I processori nella stessa boardset sono connessi con un BUS con snooping 18 boardset connesse 3 crossbar switch Sun Fire E25K Caching a più livelli DIMM 1 per i dati SDRAM SGI ALTIX RAM DDR La CACHE del sistema viene vista come locale e i dati vengono spostati tra le CACHE al bisogno Dual Inline Memory Modules Syncronous DRAM Double Data Rate DDR2, DDR3, DDR4 ... Quando un dato viene sovrascritto ed era l'ultima copia, che succede? Difficoltà a connettere tra tante CPU che vedano intero spazio di memoria Collo di bottiglia Necessità di rete di interconnessione velocissima Costosissimi (milioni di $), usati per FINANZA, SCIENZA, MILITARI Migliaia di CPU connesse da una rete ad alte prestazioni, alta capacità di I/O Alta tolleranza ai guasti Ogni sistema ha le sue peculiarità Unità computazionali uguali e dense Sfruttano una rete ad alte prestazioni progettata apposta La singola unità computazionale non potrebbe funzionare da sola Problemi con elevato sforzo computazionale Idea è alta potenza e alta efficienza ($,watt,m3) SOLUZIONE PowerPC 440 2 processori 16x Custom card 32x Motherboard 64x Cabinet Composizione BlueGene/L (il primo) cache 4 MB L3 condivisa Massively Parallel Processors (MPP) 512MB-2GB di RAM Nodi connessi da un toroide 3D (6 vicini x nodo) Diviso in 2 thread 1 solo processo Su ogni CPU gira un SO molto semplice 1 solo utente Potenza computazionale 1 PetaFlop BlueGene/P CHIP: 4 PowerPC 450 Raggiunge 20 PetaFLOPS BlueGene/Q CHIP: 18 core PowerPC A2 Processore Opteron (prima 1 poi 2/4 core) 1 GB RAM x Core 8x Scheda 3x Card Cage 108x Cabinet Chip Ethernet 100Mb/s RedStorm Multicomputers (sistemi a scambio messaggi) Rete toroidale 3D SO: catamount per computazione, linux per le CPU di servizio Composto da macchine anche molto diverse Spesso, ciascuna unità computazionale può funzionare da sola Rete di interconnessione NON progettata appositamente Numero di nodi connessi molto VARIABILE Non esiste un criterio di progettazione specifico Resistenza ai guasti Le query vengono inoltrate al server più vicino Più centri di elaborazione sparsi per il mondo Centro->Internet 2,488Gb in fibra Backup: Centro->provider alternativo 622Mb Processori a basso costo e consumo 80x PC 64x rack Connessi su due porte per ogni switch Hardware numeroso -> tanti guasti Migliora prestazioni e tolleranza guasti Replicazione e SW di gestione fanno sì che sistemi di sicurezza costosi siano superflui 2x switch Ethernet Connessioni 60x datacenter(oggi di più) Software tollerante ai guasti Replicazione dei componenti HW/SW Cardini gestione del sistema Cluster Of Workstation (COW) Ottimizzazione rapporto costi/prestazioni Copia di ogni pagina Web Esplorazione periodica della rete per mantenere aggiornato il DB Search index diviso in shards e replicato Shards replicati e distribuiti su vari cluster non adiacenti Google Aggiornamento del search index Caratteristiche Pagine web suddivise in shards Master server usati per sapere la locazione degli shards 1. Richiesta inviata a data center 2. Load balancer instrada richiesta a gestore di query 3. Richiesta inoltrata a analizzatore sintattico 4. In parallelo inviata a Ad server Processamento query 5. Il gestore di query interroga uno o più index server per sapere in quali pagine si trovano le parole oggetto della ricerca 6. Con i risultati si interrogano i document server per estrarre i pezzi di testo più significativi 7. Risposta inviata al client inseme a pubblicità e eventuali segnalazioni di errore Semplificano i loop HW in grado di lavorare su vettori di dati con istruzioni vettoriali P.E. sommare due vettori e copiare il risultato in un terzo Una singola istruzione specifica grande quantità di lavoro (eqiv a un loop) Non servono controlli di data hazard L'uso di istruzioni vettoriali indica che la computazione di ogni elemento è indipendente Le alee tra due istruzioni vettoriali vanno controllate solo una volta per ogni vettore operando Caratteristiche istruzioni vettoriali Le istruzioni vettoriali di solito accedono a locazioni di memoria adiacenti Un intero loop viene sostituito da un'unica istruzione vettoriale 8 registri vettoriali che contengono 64 elementi da 32/64bit Registri vettoriali Ogni unità pipelined, una unità di controllo verifica eventuali confilitti Unità funzionali vettoriali Possono spostare l'intero contenuto in più celle adiacenti da/in RAM Unità vettoriali load-store Possono essere usati per calcolare indirizzi di RAM o eseguire operazioni tra vettori e scalari Componenti di un processore vettoriale Registri scalari Processori vettoriali Architettura più complessa che limita la frequenza di clock Registri più grandi e connessi in modo più complicato Ogni UF è più sofisticata volendo operare su più elementi contemporaneamente Datapath più ampio per poter spostare più blocchi di operandi contemporaneamente da un punto all'altro PROBLEMI Connessione con memoria più sofisticata per sostenere mole di dati che CPU richiede COSTO MAGGIORE Uso giustificato da applicazioni che hanno connotazione vettoriale P.E. Pentium 2 MMX P.E. Pentium III SSE SDRAM che trasferiscono dati sia su fronte di salita che di discesa del clock Clock aumenta Voltaggio (->consumi) diminuisce Trasferimento in parallelo = alta banda Saldate direttamente a GPU Molti processori hanno arricchito l'Istruction Set con estensioni multimediali (tipo vettoriali) P.E. Pentium 4 SSE2 Utilizzate molto nelle consolle per videogames Caratteristiche Numero limitato di riscritture Costo : - di SDRAM + di HD Prestazioni più vicine a SDRAM che HD Architetture dove i nodi comunicano con SCAMBI DI MESSAGGI Ogni nodo è un computer normale più un PROCESSORE PER LA COMUNICAZIONE Chip montati su piccole schede contenenti 4-16 DRAM che memorizzano dati in blocchi da 8 byte (+ECC) Statiche DIFETTI multiprocessori FLASH Memory Stato attuale Troppo costosa da implementare DRAM dotate di clock sincronizzabile con quello del controller Particolari EEPROM leggibili e riscrivibili NO Remote Memory Access (NORMA) Uso di SEND-RECEIVE invece di STORE-LOAD Graphics (Sync) DRAM PROBLEMI Scalabilità limitata Molte CPU possono accedere a stesse variabili Sistemi COMA GDRAM Quando un indirizzo logico viene tradotto in un indirizzo fisico e il dato non è in cache né in RAM dov'è? Ogni linea può andare in qualsiasi entry L1 C L2 C L3 Cache Only Memory Access I dati non hanno un luogo specifico ma possono migrare e essere replicati nei vari banchi di memoria della memoria centrale Contiene n word Ogni linea può essere memorizzata in n entry della cache L'insieme di entry in cui può andare una linea si calcola (indirizzo linea in RAM) mod (numero di insiemi della cache) Cache fully associative 1 per le richieste 1 per le risposte Campo Tag Cache line Consistenza del processore Per ogni locazione di memoria, qualsiasi CPU vede tutte le scritture effettuate da ogni singola CPU in quella locazione nello stesso ordine (Indirizzo della linea in RAM) modulo (numero di entry nella cache) Per distinguere il contenuto dell'entry della cache tra le possibili linee di RAM che può contenere c'è un campo tag con i bit più significativi dell'indirizzo Modelli di consistenza della memoria Vengono utilizzate varianti più "relaxed" Le scritture da parte di una qualsiasi CPU sono viste da altre CPU nell'ordine in cui sono state inviate Parallelizzare la lettura dei dati da RAM Usare più livelli di cache Linee di dimensione ottimale CACHING Consistenza stretta Consistenza sequenziale Interleaved memory Cache set-associative Ogni linea della RAM viene memorizzata in un punto ben preciso della CACHE Difficile da implementare 2x Chip Miglioramento Riduzione del numero di cache miss In una sequenza di istruzioni di lettura/scrittura viene scelto un qualche ordine di esecuzione (anche casuale), ma è uguale per tutte le CPU 4 x 15 cc per leggere linea 4 x 1 cc per inoltrare la linea alla cache Sincronizzazione tra processi In sistemi di questo tipo non viene garantito l'ordine di esecuzione delle istruzioni Snooping per coerenza cache Modifiche solo in cache, copia in RAM solo se il dato deve essere rimpiazzato Ritardo Non viene usata Perdita di tempo Conserva il dato finché non viene scritto in RAM Miglioramento del CPI ideale da 151 a 4 Memoria fisica distribuita sui processori 1 per comunicazioni tra nodi nel sistema Write buffer Write back Sistemi NUMA Spazio di indirizzamento unico 1 per istruzioni Poche linee = + località spaziale - temporale Propagare direttamente il valore in RAM Problema coerenza con RAM per scritture CACHE MISS: word prelevata da RAM e esecuzione rallentata Troppe linee = + località temporale - spaziale MIGLIORAMENTI MOLTO DIFFICILE da implementare CACHE HIT: esecuzione non rallentata Quando viene indirizzata una word l'HW controlla se è presente in CACHE I processori non hanno cache o se ce l'hanno la usano solo per dati privati Protocollo directory-based Indica presenza di "stop" Load che restituisce il valore prima di sapere se deve essere eseguita, controllata su ALAT No controlli runtime DIFETTI Crossbar Switch Con n CPU ci vogliono n^2 switch, INACCETTABILE Directory interrogata spesso -> serve HW veloce Indica unità usate dal bundle Processore VLIW per usi embedded Se non si usa una politica write-allocate la modifica viene propagata direttamente in RAM Directory usa 1 bit per tracciare se la linea è stata inviata o meno a un altro nodo 3 x Reg 7 bit Predicate Reg 6 bit Coerenza della cache Linea modificata da CPU1 Se CPU2 richiede la linea, CPU1 informa che CPU2 deve aspettare mentre CPU1 inoltra la modifica in RAM No problema di coerenza cache ma TEMPI di accesso ai dati ELEVATI OP type 10 bit 3 x istruzioni 41 bit Istruzioni organizzate in bundle 128 bit CPU1: Modified Altre CPU: Invalid Itanium II Protocollo MESI Letture di altre CPU, linea marcata come SHARED Opcode Ogni gruppo viene schedulato liberamente da CPU Ordine blocchi rispettato Letture successive di CPU1 usano la copia in cache Operazione da eseguire: WRITE o READ Blocchi più flessibili SOLUZIONE Prima lettura da CPU1, viene marcata come EXCLUSIVE nella cache relativa Address Difficoltà di conversione in codice predicativo, specie se lungo Istruzioni predicative spesso più lente 4 stati possibili per ogni entry della cache Tutte le entry sono INVALID Indirizzo all'interno della memoria Istruzioni separate da varie istruzioni condizionali compattate in sequenze di istruzioni indipendenti Gruppo: insieme di istruzioni indipendenti Shared Nessun'altra cache contiene la linea e RAM aggiornata Module Loop non srotolato ma in ogni pacchetto vengono inserite istruzioni indipendenti anche appartenenti a cicli diversi Global code scheduling Invalid Linea contenuta in più cache e RAM aggiornata ID MEM-ID CPU, p.e.: 110-001 Symbolic loop unrolling Esecuzione di istruzioni inutili Istruzioni predicative ILP STATICO PROBLEMA: ogni operazione viene propagata in RAM -> INEFFICIENTE Dati contenuti non validi Parallelismo evidenziato in loop con istruzioni non indipendenti Esecuzione parallela sia del codice di branch eseguito e non eseguito e selezione di quello corretto Snooping Write hit/miss PROBLEMA Dato non presente nella mia Cache Assume un branch statico o cerca di capire l'andamento tramite il codice Loop level parallelism Read miss Cache Snooper non se ne accorge Cache Snooper invalida Non serve il controllo delle dipendenze perché è stato fatto in fase di compilazione Static branch prediction Un controller monitora le richieste alla memoria delle altre CPU ed, eventualmente, interviene Se una linea non è stata modificata ed è presente nella mia RAM conviene prelevarla da lì piuttosto che richiederla all'altra CPU BRANCH SBAGLIATO: ROB svuotato Scheduling dinamico NON necessario MA consigliato Serve un hardware aggiuntivo (OVERHEAD) Bloccante se il Module usa gli stessi commutatori Risultato scritto nel CDB e nel ROB NO BRANCH: contenuto del campo valore trasferito in registro o MP Prelievo contemporaneo di più operandi e più istruzioni per ciclo di clock Multiple Issue Un thread può utilizzare al massimo fino a un TOT della risorsa Valore nel caso di WRITE WRITE RESULT UF in numero sufficiente Strategie perché 2 thread usino contemporaneamente le risorse della CPU Nei processori Intel sono condivise solo le risorse abbondanti SOLUZIONE: usare cache o parti di memoria private Operandi necessari inviati alla stazione se disponibili nei registri o nel ROB EXECUTE COMMIT La risorsa viene utilizzata dal primo thread che se ne impossessa Rischio STARVATION L'istruzione viene inoltrata al passo EXECUTE se ci sono entry nel ROB e stazioni di prenotazione libere ISSUE Architetture 2 Duplicazione delle risorse 2 tavole di mappatura dei registri Ogni thread usa metà della risorsa L'OS lo vede come processore doppio
© Copyright 2024 Paperzz