Introduzione ai sistemi di calcolo parallelo Giovanni Erbacci Gruppo Supercalcolo- CINECA g.erbacci@cineca.it
Argomenti Il modello di von Neumann Verso il parallelismo effettivo Pipelining Classificazione di Flynn Architetture vettoriali Architetture Parallele © CINECA 2008 Giovanni Erbacci
Modello di von Neumann Calcolatore Convenzionale Controllo Input Memoria Output Unità Aritm. Logica ……… Dati Controllo Le istruzioni vengono processate sequenzialmente: 1 un istruzione viene caricata dalla memoria (fetch) e decodificata 2 vengono calcolati gli indirizzi degli operandi; 3 vengono prelevati gli operandi dalla memoria; 4 viene eseguita l'istruzione; 5 il risultato viene scritto in memoria (store). © CINECA 2008 Giovanni Erbacci
Calcolatori più Veloci aumentare la velocità dei componenti elettronici Limite imposto dalla velocità della luce Problema della dissipazione del calore aumentare il grado di parallelismo architetturale (numero di attività che possono essere compiute contemporaneamente) Tempo Performance Processori Memoria Gap © CINECA 2008 Giovanni Erbacci
Legge di Moore Legge empirica che afferma che la complessità dei dispositivi (numero di transistor per sqare inch nei microprocessori) raddoppia ogni 18 mesi. Gordon Moore, co-founder di Intel, 1965 Si stima che la legge di Moore valga ancora almeno per questo decennio. © CINECA 2008 Giovanni Erbacci
Altri fattori che influenzano le Prestazioni Dati Indirizzi Arithmetic-Logical Unit ALU Control Unit Memoria Centrale Device Oltre alla potenza del processore, altri fattori influenzano le prestazioni degli elaboratori: - dimensione della memoria - larghezza di banda (bandwidth) fra memoria e processore - larghezza di banda verso il sistema di I/O - dimensione e larghezza di banda della cache - latenza fra processore, memoria e sistema di I/O © CINECA 2008 Giovanni Erbacci
Primordi del Parallelismo Miglioramenti architetturali Memoria bit-parallel e Aritmetica bit-parallel Processori indipendenti per l’attività di I/O Memoria interleaved Gerarchie di memoria Unità funzionali multiple Unità funzionali segmentate Pipelining Miglioramenti software Multiprogrammazione e Look-ahead e scheduling delle istruzioni © CINECA 2008 Giovanni Erbacci
Verso il Parallelismo effettivo Sistemi vettoriali Array processors Architetture sistoliche Very Long Instruction Word (VLIW) Sistemi Multiprocessore Sistemi Multicomputer © CINECA 2008 Giovanni Erbacci
Gerarchie di Memoria Maggior Capacità Minor costo Maggior velocità Tempo di accesso alla memoria: indica la velocità con la quale si può referenziare una locazione di memoria Tempo di ciclo della memoria: indica il tempo che deve trascorrere prima di un nuovo accesso a una stessa locazione di memoria Negli ultimi anni questi tempi sono molto migliorati rendendo possibili sistemi di memoria più veloci ma al tempo stesso è diminuito anche il tempo di clock del processore: IBM PC XT (1980) 4.77 MHz => 210 ns Commodity DRAM T. acc. 200 ns Pentium II (1998) 300 MHz => 3.3 ns Commodity DRAM T. acc. 50 ns La performance dei processori raddoppia ogni 18 mesi mentre quella della memoria raddoppia circa ogni 6 anni. Registri Cache Memory Memoria Secondaria Primaria Maggior velocità Maggior Capacità Minor costo © CINECA 2008 Giovanni Erbacci
Cache Memory Unità di memoria di dimensioni ridotte usata come buffer per i dati che vengono scambiati fra la memoria centrale e il processore. Consente di ridurre il tempo speso dal processore in attesa dei dati dalla memoria principale. L'efficienza della cache dipende dalla località dei riferimenti nei programmi località temporale: una istruzione o un dato possono essere referenziati più volte località spaziale: quando si referenzia una locazione di memoria, è molto probabile che vengano referenziate anche le locazioni adiacenti. Diversi calcolatori dispongono anche di cache per le istruzioni (o instruction buffer) oppure di cache che contengono sia dati che istruzioni: l'istruzione viene prelevata dalla cache anziché dalla memoria. un'istruzione può essere eseguita ripetutamente senza ulteriori riferimenti alla memoria principale. L'instruction buffer del CDC 6600 era costituito da 8 registri di 60 bit ciascuno (istruzioni di 15 o 30 bit). Il Cray Y-MP aveva 4 instruction buffer di 128 parcel (16 bit) per CPU (istruzioni di 1, 2, o 4 parcel). Ogni processsore del Cray T3E ha una cache per le istruzioni di 8 KByte, una per i dati di 8KByte e di una di secondo livello di 96KByte. © CINECA 2008 Giovanni Erbacci
Cache Memory / 1 E' demandato all'abilità del sistema far rientrare le istruzioni che compongono un kernel computazionale pesante (es. un loop) all’interno della cache, se queste possono esservi contenute per intero. Lo stesso vale per i dati, ma in questo caso l’opera di ottimizzazione coinvolge anche il programmatore Registri 2 ns L1 On-chip 4 ns L2 On-Chip 5 ns L3 Off-Chip 30 ns Memoria 220 ns DEC Alpha 21164 (500 MHz): Tempo di accesso alla memoria © CINECA 2008 Giovanni Erbacci
Organizzazione della Cache La cache è divisa in slot della stessa dimensione (linee) Ogni linea contiene k locazioni di memoria consecutive (es. 4 word). Quando è richiesto un dato dalla memoria, se questo non è già in cache, viene caricata dalla memoria l’intera linea di cache che lo contiene, sovrascrivendo così il contenuto precedente della linea. Memoria Cache © CINECA 2008 Giovanni Erbacci
Organizzazione della Cache / 1 Quando si modifica un dato memorizzando un nuovo valore in cache, occorre aggiornare il dato anche in memoria principale: Cache write-back - i dati scritti nella cache vi rimangono finché la linea di cache non è richiesta per memorizzare altri dati quando si deve rimpiazzare la cache il dato viene scritto in memoria; comune nei sistemi mono-processore. Cache write-through – i dati vengono scritti immediatamente nella cache e nella memoria principale. Nei sistemi con più processori occorre gestire la coerenza della cache: per accedere a dati aggiornati i processori devono essere a conoscenza dell’attività delle cache locali P1 P2 Cache P1 Cache P2 M © CINECA 2008 Giovanni Erbacci
Mapping - Direct mapped - Fully associative - Set associative Poiché in ogni istante temporale la cache può contiene solo un sotto-insieme della memoria, occorre sapere quale: si tratta di associare un insieme di locazioni di memoria ad una linea di cache (mapping). In base al mapping la cache può essere organizzata in uno dei seguenti modi: - Direct mapped - Fully associative - Set associative Memoria Il modo con cui le locazioni di memoria vengono mappate nelle linee di cache può incidere sulle prestazioni dei programmi (due locazioni di memoria pesantemente usate possono essere mappate oppure no sulla stessa linea). Cache © CINECA 2008 Giovanni Erbacci
Cache Direct Mapping Cache Memoria Con questo schema, se ad es. la dimensione della cache è di 8 Kbyte e la memoria centrale ha word di 8 Byte, la prima locazione di memoria (word 1) viene mappata sulla linea 1, così come la locazione d+1, 2d+1, 3d+1 ecc. (dove d = N° linee * N° word per linea). 1 1.9 2 725 3 51.9 4 -18.5 5 1.7 6 -25.3 … …… 1024 1025 1026 1027 1028 1029 1030 …. 2048 2049 2050 Linea 1 1.9 Linea 2 1.7 Linea 3 Linea 4 Linea 5 …..… …… Linea 256 725 -25.3 51.9 -18.5 Cache Memoria © CINECA 2008 Giovanni Erbacci
Cache Direct Mapping / 1 Memoria Cache Indirizzo Contenuto 8 linee Indica la parola all’interno della linea 0000 000 00 1.9 1 01 725 2 10 51.9 3 11 -18.5 4 001 1.7 5 -25.3 .. …. … …… 010 12 011 29 111 30 31 32 0001 33 62 63 64 0010 65 Indica la linea Linea 0 1.9 Linea 1 1.7 Linea 2 Linea 3 Linea 4 Linea 5 Linea 6 Linea 7 725 -25.3 51.9 -18.5 Memoria Cache 8 linee 4 word per linea © CINECA 2008 Giovanni Erbacci
Cache Direct Mapping / 2 Quando si hanno riferimenti di memoria che alternativamente puntano alla stessa linea di cache (es. word 1, word 1025, word 1, word 1025, ripetutamente), ogni riferimento causa un cache miss e si deve rimpiazzare la linea appena inserita. Si genera parecchio lavoro aggiuntivo (overhead); questo fenomeno è detto thrashing. © CINECA 2008 Giovanni Erbacci
Cache Set Associative Memoria Cache 2 way set associative 1 1.9 2 725 3 51.9 4 -18.5 5 1.7 6 -25.3 … …… 1024 1025 66 1026 71 1027 33 1028 100 1029 17 1030 …. 2048 2049 2050 2 way set associative 2048 word, linee di 4 word Memoria Linea 1 66 Linea 2 17 71 33 100 Linea 1 1.9 Linea 2 1.7 Linea 3 Linea 4 Linea 5 …..… …… Linea 256 725 -25.3 51.9 -18.5 Cache Banco 2 Banco 1 © CINECA 2008 Giovanni Erbacci
Unità Funzionali Multiple Nei calcolatori tradizionali, la CPU è costituita da un insieme di registri generali, da alcuni registri speciali (es. il program counter) e dall'unità aritmetico logica (ALU) che, una per volta, calcola le operazioni. Un primo passo verso il parallelismo consiste nel suddividere le funzioni dell'ALU e progettare unità indipendenti capaci di operare in parallelo (unità funzionali indipendenti). E' compito del compilatore esaminare le istruzioni e stabilire quali operazioni possono essere fatte in parallelo, senza alterare la semantica del programma. © CINECA 2008 Giovanni Erbacci
Pipelining Il concetto di pipelining è analogo a quello di catena di montaggio dove in una linea di flusso (pipe) di stazioni di assemblaggio gli elementi vengono assemblati a flusso continuo. Idealmente tutte le stazioni di assemblaggio devono avere la stessa velocità di elaborazione altrimenti la stazione più lenta diventa il bottleneck dell'intera pipe. © CINECA 2008 Giovanni Erbacci
Pipelining / 1 Un task T viene scomposto in un insieme di sotto task {T1,T2,...Tk} legati da una relazione di dipendenza: il task Tj non può partire finchè tutti i sotto task precedenti {Ti , ij} non sono terminati Sovrapposizione delle operazioni in una pipe a 4 stadi diagramma spazio-temporale © CINECA 2008 Giovanni Erbacci
Pipeline di Istruzioni © CINECA 2008 Giovanni Erbacci
Classificazione di Flynn M. J. Flynn Very high speed computing systems, proceedings of the IEEE (1966). Some computer organizations and their effectiveness, IEEE Transaction on Computers.(1972). "The moltiplicity is taken as the maximum possible number of simultaneous operations (instructions) or operands (data) being in the same phase of execution at the most constrained component of the organization" Categorizza una architettura dalla molteplicità dell'hardware usato per manipolare stream di istruzioni e dati. - Considera lo stream delle istruzioni (sequenza delle istruzioni eseguite dal calcolatore) e lo stream dei dati (sequenza dei dati usati per eseguire uno stream di istruzioni) SI Single Instruction stream SD Single Data stream MI Multilpe Instruction stream MD Multilpe Data stream 4 combinazioni possibili: SISD, SIMD, MISD, MIMD © CINECA 2008 Giovanni Erbacci
Sistemi SISD - Corrisponde alla classica architettura di von Neumann. Sistemi Sequenziali - Corrisponde alla classica architettura di von Neumann. - Sistemi scalari monoprocessore. - L'esecuzione delle istruzioni può essere pipelined (Cyber 76). - Ciascuna istruzione aritmetica inizia un'operazione aritmetica CU PU MM IS DS CU Control Unit PU Processing Unit MM Memory Module DS Data stream IS Instruction Stream © CINECA 2008 Giovanni Erbacci
Sistemi SIMD Parallelismo Sincrono DS2 DS1 MM2 MM1 MMn . CU IS PU2 PU1 PUn DSn Parallelismo Sincrono I sistemi SIMD hanno una sola unità di controllo Una singola istruzione opera simultaneamente su più dati. Appartengono a questa classe array processor e sistemi vettoriali CU Control Unit PU Processing Unit MM Memory Module DS Data stream IS Instruction Stream © CINECA 2008 Giovanni Erbacci
Sistemi MIMD Parallelismo Asincrono Più processori eseguono istruzioni diverse e operano su dati diversi. Versione multiprocessore della classe SIMD. Spazia dai linked main frame computer alle grandi reti di micro- processori. CU2 IS2 PU2 MM2 DS2 PU1 MM1 DS1 PUn MMn DSn CU1 CUn ISn IS1 . . . IS2 CU Control Unit PU Processing Unit MM Memory Module DS Data stream IS Instruction Stream © CINECA 2008 Giovanni Erbacci
Calcolatori Vettoriali Dispongono di un set di istruzioni vettoriali che si aggiunge al set di istruzioni di istruzioni scalari. Le istruzioni vettoriali specificano una particolare operazione che deve essere eseguita su un determinato insieme di operandi detto vettore. In questo contesto un vettore è una lista ordinata di valori scalari. Le unità funzionali che eseguono istruzioni vettoriali sfruttano il pipelining per esegure la stessa operazione su tutte le coppie di operandi. © CINECA 2008 Giovanni Erbacci
Esempio V0 V1 + V2 do i = 1, N A(i) = B(i)+C(i) end do © CINECA 2008 Unità Funzionale Add Floating Point do i = 1, N A(i) = B(i)+C(i) end do V0 V1 + V2 © CINECA 2008 Giovanni Erbacci
Sistemi Paralleli di classe MIMD Mainframes multiprocessor A metà degli anni '70 si diffondono i primi mainframes multiprocessore: Univac 1100/80 (1976), Burroughs B-7800 (1978), Cyber 170/720 (1979), IBM 3081 (1980). Solo il gestore del sistema beneficia del miglioramento del throughput (numero di lavori completati per unità di tempo). Rimane il von Neumann bottelneck. Sistemi multiprocessor ed elaborazione parallela E' interessante invece disporre di sistemi multiprocessore in cui le diverse CPU possono essere attive in modo concorrente nella soluzione di un singolo problema (elaborazione parallela). Multicomputer Un sistema multicomputer consiste di più calcolatori autonomi che possono comunicare o meno l'uno con l'altro (distributed memory system). Multiprocessor In un sistema multiprocessor le diverse CPU che compongono il sistema condividono una memoria centrale unica (shared memory system). © CINECA 2008 Giovanni Erbacci
Esempi di Sistemi MIMD Cray Y MP/8, Cray C90/16, Cray T90/32 Cray T3D, Cray T3E IBM ES900-530-VF IBM SP1, SP2, SP3, SP4 Ipercubi N-Cube Ipercubi Intel Paragon Intel KSR1 Meiko Parsytec GC-2 Thinking Machine Corp. CM5 Fujitsu AP 100 e VPP500 NEC SX4, SX5 SGI Origin 3800 © CINECA 2008 Giovanni Erbacci
Classificazione in Base alla Memoria P M N M P Sistema a Memoria Condivisa Sistema a Memoria Distribuita © CINECA 2008 Giovanni Erbacci
Sistemi a Memoria Condivisa I processori coordinano la loro attività, accedendo ai dati e alle istruzioni in una memoria globale (shared memory), condivisa da tutti i processori Uniform Memory Access (UMA)model <=> SMP: Symmetric Multi Processors L’accesso alla memoria è uniforme: i processori presentano lo stesso tempo di accesso per tutte le parole di memoria l’interconnessione processore-memoria avviene tramite common bus, crossbar switch, o multistage network. ogni processore può disporre di una cache locale, le periferche sono condivise. Alcuni esempi: ETA10, Cray 2, Cray C90, IBM 3090/600 VF, NEC SX-5 I sistemi a memoria condivisa presentano un numero limitato di processori (da 2 a 32) molto potenti (possoo presentare anche un’architettura vettoriale) Questi multiprocessori sono chiamati tightly coupled systems per l’alto grado di condivisione delle risorse © CINECA 2008 Giovanni Erbacci
Sistemi a Memoria Distribuita La memoria è distribuita fisicamente tra i processori (local memory). NO-Remote Memory Access (NORMA) model tutte le memorie locali sono private e può accedervi solo il processore locale La comunicazione tra i processori avviene tramite un protocollo di comunicazione a scambio di messaggi (message passing). I messaggi che vengono instradati sulla rete di interconnessione In genere si tratta di sistemi che presentano un numero elevato di processori (da poche decine ad alcune migliaia), ma di potenza non troppo elevata, chiamati nodi di elaborazione. - Potenza del nodo. - Topologia della rete di interconnessione © CINECA 2008 Giovanni Erbacci
Non Uniform Memory Access (NUMA) model Sistemi NUMA Non Uniform Memory Access (NUMA) model La memoria è fisicamemte distribuita fra tutti i processori (ogni processore ha una propria memoria locale) L’insieme delle memorie locali forma uno spazio di indirizzi globale, accessibile da tutti i processori Supporto hw per far si che ogni processore possa indirizzare la memoria di tutti i processori Il tempo di accesso dal processore alla memoria non è uniforme: l’accesso è più veloce se il processore accede alla propria memoria locale; quando si accede alla memoria dei processori remoti si ha un delay dovuto alla rete di interconnessione. © CINECA 2008 Giovanni Erbacci
Il concetto di Nodo Nodo SMP Network Nodo 6 Nodo 5 M P Nodo 1 Nodo 4 © CINECA 2008 Giovanni Erbacci
Condivisione Fisica e Logica Condivisione fisica della memoria le CPU hanno lo stesso spazio di indirizzamento i valori scritti in una parola da una CPU possono essere letti da un'altra. Condivisione logica della memoria è determinata da come il sw, in opposizione all'hw, vede il sistema. Quando due processi (programmi in esecuzione) condividono la stessa memoria logica, le informazioni scritte in una struttura dati da uno di questi, possono essere lette dall'altro. Quando non c'è condivisione logica i processi devono comunicare con forme di I/O (read e write di buffer) o tramite message passing. © CINECA 2008 Giovanni Erbacci
Rete di Interconnessione: definizioni Grafo aciclico: un grafo che non contiene cicli grado: il grado è il numero di linee connesse a un nodo in una data topologia. E’ equivalente al numero di primi vicini del nodo. E’ un indice della connettività Un grado grande è un benefico perché identifica una molteplicità di paths. Diametro: il diametro di una rete è la distanza tra i due nodi più lontani (percorso più lungo tra due nodi) Un diametro piccolo corrisponde a una latenza bassa. Neighbor: Due nodi si dicono vicini se c’è un link che li connette. © CINECA 2008 Giovanni Erbacci
Rete di Interconnessione Cos’è una rete di interconnessione? È l’insieme dei cavi che definiscono come i diversi processori di un calcolatore parallelo sono connessi tra loro e con le unità di memoria. Il tempo richiesto per trasferire i dati dipende dal tipo di interconnessione. Il tempo di trasferimento è detto communication time. la massima distanza che devono percorrere i dati scambiati tra due procecssori che comunicano incide sulle prestazioni della rete. Caratteristiche di una rete di interconnessione Bandwidth: identifica la quantità di dati che possono essere inviati per unità di tempo sulla rete. Occorre massimizzare la bandwidth Latency: identifica il tempo necessario per instradare un messaggio tra due processori. Si definisce anche come il tempo necessario per trasferire un messaggio di lunghezza nulla. Occorre minimizzare la latenza Altri aspetti da considerare - Costo - Scalabilità - Affidabilità - Diametro - Degree © CINECA 2008 Giovanni Erbacci
Connettività Interconnessione completa (ideale) Ogni nodo può comunicare direttamente con tutti gli altri nodi (in parallelo) con n nodi si ha un'ampiezza di banda proporzionale a n2. il costo cresce proporzionalmente a n2. Interconnessione indiretta (pratica) Solo alcuni nodi sono connessi direttamente. Un percorso diretto o indiretto permette di raggiungere tutti i nodi. Il caso pessimo è costituito da un solo canale di comunicazione, condiviso da tutti i nodi (es. un cluster di workstation collegate da una LAN). Occorrono soluzioni intermedie in grado di bilanciare costi e prestazioni (mesh, albero, shuffle-exchange, omega, ipercubo, ...). La connettività è più ristretta: soluzione appropriata perché molti algoritmi paralleli richiedono topologie di connessione più ristrette (locali). Es: comunicazione tra primi vicini. © CINECA 2008 Giovanni Erbacci
k=2 (2D array) es. ICL DAP, Intel Paragon, Topologia Mesh In una network a griglia, i nodi sono disposti secondo un reticolo a k dimensioni (k dimensional lattice) di ampiezza w, per un totale di wk nodi. k=1 (array lineare) k=2 (2D array) es. ICL DAP, Intel Paragon, La comunicazione diretta è consentita solo tra i nodi vicini. I nodi interni comunicano direttamente con altri 2k nodi. © CINECA 2008 Giovanni Erbacci
Topologia Toroidale Alcune varianti del modello a mesh presentano connessioni di tipo wrap-around fra i nodi ai bordi della mesh (topologia toroidale). Il Cray T3E adotta una topologia toroidale 3D. © CINECA 2008 Giovanni Erbacci
Topologia Ipercubo Una topologia ipercubo (cube-connected) è formata da n =2k nodi connessi secondo i vertici di un cubo a k dimensioni. Ogni nodo è connesso direttamente a k altri nodi. Il degree di una topologia ipercubo è log n ed anche il diametro è log n. Esempi di calcolatori con questo tipo di network sono la CM2, NCUBE-2, Intel iPSC860, SGI Origin. © CINECA 2008 Giovanni Erbacci
Topologia Ipercubo / 1 Definizione ricorsiva: H(i) = H(H(i-1),H(i-1)) Ogni nodo è connesso ad altri k nodi k rappresenta la distanza tra i due punti più distanti (diametro). Una network cube connected è una network butterfly le cui colonne sono collassate in nodi singoli. © CINECA 2008 Giovanni Erbacci
Topologia Tree I processori sono I nodi terminali (foglie) di un albero Il degree di una network con topologia ad albero con N nodi è log2N e il diametro è 2 log 2(N) - 2 Fat tree la bandwidh della network aumenta all’aumentare del livello della rete. Esempi: CM-5, Network Myrinet e QSNet Piramide Una network piramidale di ampiezza p è un albero 4-rio completo con livelli, dove i nodi di ciascun livello sono collegati in una mesh bi-dimensionale. © CINECA 2008 Giovanni Erbacci