rchitetture SIMD (rchitetture e Principi di Programmazione) Modello rchitettura SIMD ontrol Unit PE PE 1 PE PE n-1 Proc Mem. Proc 1 Proc Proc n-1 Mem. 1 Mem. Mem. n-1 Rete di Interconnessione PE = Processing Element Michele olajanni rchitetture SIMD /7
rchitetture SIMD Nella categoria delle macchine SIMD rientrano o possono rientrare: 1. Supercomputer vettoriali (i registri vettoriali mediante cui è possibile effettuare computazioni algebriche elementari in un unico ciclo macchina assomigliano ai PE di un architettura SIMD). Sistemi a parallelismo massiccio, costituiti da molti (ma semplici) processori quali: TM onnection Machine (6.6 processori) MD DP (.96 processori) MarsPar MP-1 (16.8 processori). Macchine SIMD special-purpose: IM GF-11 (11 Gflops peak) INFN PE-1 (6 Gflops peak, nel 1991) QUDRIS Michele olajanni rchitetture SIMD /7 Modello SIMD ovvero data-parallel sincrono (1) La Programmazione SIMD richiede come primo passo una distribuzione del dominio dei dati tra tutti i nodi di elaborazione Si ha una granularità fine (fine grain) o finissima della distribuzione dei dati in quanto il numero delle unità di elaborazione è, in genere, elevato e ciascun nodo è molto semplice Per far sì che la programmazione SIMD sia efficiente, la distribuzione del dominio dei dati va effettuata in modo tale che la struttura del problema (pattern prevalente di comunicazione) sia mappata sulla rete di interconnessione fisica in modo (possibilmente) 1:1 Ogni deviazione dal mapping 1:1 comporta considerevoli perdite di tempo nello scambio dei dati (effettuato con step multipli o passando attraverso l unità di controllo, molto più lenta) Michele olajanni rchitetture SIMD /7
Mapping su reti di interconnessione Le topologie di interconnessione delle architetture SIMD sono regolari (griglie, torus, ipercubi, mesh multidimensionali) o, nel caso di sistemi dedicati, vengono create in base alla struttura stessa del problema Mapping Dominio dei dati Rete di Interconnessione toroidale Michele olajanni rchitetture SIMD /7 Modello SIMD ovvero data-parallel sincrono () La programmazione parallela risulta semplificata per il fatto che vi è un solo flusso di controllo e non vi sono processi indipendenti che vengono eseguiti in modo asincrono. Tutte le operazioni vengono effettuate in modalità LOK-STEP (pertanto, non vi è bisogno di meccanismi di sincronizzazione espliciti e soggetti a rischio di errore, quali monitor, semafori, ecc.) Vi è scambio di dati tra i processori, ma: di tipo collettivo e non solo tra coppie di nodi è realizzato in modo molto efficiente (in un tempo di ordini di grandezza inferiore rispetto a comunicazioni in MIMD) Processori differenti nonpossono eseguire istruzioni differenti nello stesso ciclo di clock Michele olajanni rchitetture SIMD 6/7
pproccio di parallelismo SIMD (sintesi) Su architetture SIMD il parallelismo viene esplicitato: mediante data parallelism: si consente ad elementi di elaborazione multipli di eseguire simultaneamente la stessa istruzione su insiemi differenti di dati (vi è un solo programma le cui istruzioni sono eseguite sequenzialmente, ma con parallelismo sui dati) in modalità sincrona in quanto vi è una sola U deadlock free Si tende al mapping tra la struttura logica del problema e la topologia della macchina Le macchine SIMD possono essere molto efficienti quando eseguono elaborazioni regolari su grandi insiemi di dati (es., alcune applicazioni numeriche, elaborazioni delle immagini) Michele olajanni rchitetture SIMD 7/7 Problemi di efficienza del parallelismo SIMD 1. ostrutti condizionali. Necessità di processori virtuali. Mapping non 1:1 del dominio dei dati problemi nelle comunicazioni Michele olajanni rchitetture SIMD 8/7
ostrutti condizionali Nelle istruzioni condizionali, il codice per ogni condizione deve essere eseguito sequenzialmente Valori iniziali If (==) =; else =/; Processor Processor 1 Processor Processor 6 Step 1 Processor Processor 1 idle Processor idle Processor 6 Processor idle Processor 1 Processor Processor idle Step 6 Michele olajanni rchitetture SIMD 9/7 Processori virtuali L elementarietà dei processori SIMD fa si ciascuno di essi esegua operazioni molto semplici ad ogni ciclo di clock. Potrebbero anche non essere sufficienti i 6.6 processori della M-. Esempio: gestire immagini con x pixel =. processori PROESSORI VIRTULI Programma richiede: processori virtuali Hardware dispone di: 1 processori fisici iterazioni per ogni istruzione 1... 1 1 1 1 11 1 1 1 1 1 1 1 Numero virtuale Numero fisico inattivi durante la terza iterazione Michele olajanni rchitetture SIMD 1/7
Tasso di virtualizzazione R = v p rescita del tempo di esecuzione e del load (Programma ipotetico: solo istruzioni vettoriali senza PE inattive) t t t _ Run time 1 virtualization ratio Numero processori virtuali Numero processori fisici??/ PE load (N o medio P attivi) _ 1 virtualization ratio La virtualizzazione deve essere trasparente per il programmatore. Può essere realizzata: In hardware (M-) In software (MasPar MP-) omunicazioni molto complesse (uso di buffer) Michele olajanni rchitetture SIMD 11/7 omunicazioni nelle rchitetture SIMD
omunicazioni in Sistemi SIMD Le OMUNIZIONI che rispettano la topologia fisica non creano conflitti e sono poco costose (simili ad operazioni register-to-register) nche le comunicazioni vengono eseguite in modalità LOK-STEP Le comunicazioni non sono nodo-nodo, ma avvengono con uno scambio di dati (generalmente di dimensioni limitate) tra tutte le unità di elaborazione o tra un sottoinsieme di queste Le comunicazioni avvengono tra nodi vicini e quindi il costo è dell ordine di un istruzione aritmetico/logica. nche nei sistemi con comunicazioni più complesse, il loro costo è di diversi ordini di grandezza inferiore a quello che si ha nei sistemi MIMD. Michele olajanni rchitetture SIMD 1/7 Scambio di dati E una funzione collettiva eseguita in parallelo Ogni PE trasmette il valore della sua variabile locale x al suo vicino a destra nella griglia: [,1] [,1] [1,1] [,] [,] [1,] [,] [,] [1,] [,] [,] [1,] Dal momento che i sistemi SIMD mettono a disposizione delle strutture di interconnessione molto veloci, le comunicazioni regolari sono mappate facilmente sulla connessione fisica e sono realizzate in modo molto efficiente. Ogni deviazione dalla regolarità causa considerevoli perdite di tempo, in quanto lo scambio dei dati deve avvenire: o attraverso passi multipli o (se disponibile) attraverso la più lenta struttura di interconnessione universale Michele olajanni rchitetture SIMD 1/7
Passi per lo Scambio dei Dati [] Definizione di una struttura di connessione (logica) ONFIGURTION ring [..11]; [1] TTIVZIONE Selezione di un gruppo di PE PRLLEL ring [..8];.. END PRLLEL [] Scelta di una direzione nella struttura di connessione pre cedentemente definita PROPGTE.right(x); [] ESEUZIONE Trasferimento dei dati (a coppie) tra tutte le PE selezionate 9 11 1 send 1 1 11 1 9 receive 8 7 6 8 7 6 Michele olajanni rchitetture SIMD 1/7 Mapping (1) Le comunicazioni sono efficienti SOLO SE rispettano la regolarità della topologia di interconnessione fisica. grid[,1] grid[,] Esempio: RING 1 11 6 7 8 9 1 1 grid[1,1] grid[1,] 1 GRID casi: (i, j) (i, j+1) (i, j) (i+1, j) (,) (1, 1) Michele olajanni rchitetture SIMD 16/7
Mapping () Per mapping complessi, non strutturati, o spesso nel caso dei processori virtuali, non conviene utilizzare il meccanismo precedente ma passare dal ROUTER UNIVERSLE. PE1 PE PE PE PE PE6 PE7 PE8 PE1 PE PE PE PE PE6 PE7 PE8 La struttura di connessione globale è semplice da utilizzare, ma molto inefficiente Michele olajanni rchitetture SIMD 17/7 Rete di interconnessione (M-) [,,,,,,,,,1,1,1] GLOLE [,,,,,,,,,1,,1] [,,,,,,,,1,1,1,1] [,,,,,,,,1,,1,1] [,,,,,,,,,,1,] [,,,,,,,,,,1,1] [,,,,,,,,,,,] [,,,,,,,,,,,1] 1 1 Router(hypercube + NEWS) LOLE PE1 PE PE PE PE PE6 PE7 PE8 PE 9 PE1 PE11 PE1 PE1 PE1 PE1 PE16 Michele olajanni rchitetture SIMD 18/7
Rete di Interconnessione (MasPar MP-) LOLE 1, luster whith 16 Pes each (16,8 PEs total) Multiplexer Demultiplexer GLOLE 1 1 1, 1, -stage los-network Michele olajanni rchitetture SIMD 19/7 aratteristiche comuni delle architetture SIMD I sistemi hanno almeno un mesh o un torus bidimensionale come rete di interconnessione Tutti i sistemi usano una versione parallela di Fortran (anche se non compatibile tra loro ) E stata resa disponibile una versione standard di Fortran 9 che semplifica la parallelizzazione automatica (o meglio esplicita i costrutti parallelizzabili) Michele olajanni rchitetture SIMD /7
SIMD vs. MIMD 1. SIMD richiede meno hardware dei MIMD perché vi è una sola U e molti PE. D altro canto, nei MIMD è possibile utilizzare processori general-purpose e quindi per le leggi dell economia di scala i processori MIMD potrebbero essere allo stesso tempo più potenti e più economici dei PE delle architetture SIMD.. SIMD richiede meno memoria dei MIMD perché si deve memorizzare una sola copia del programma. MIMD memorizza il programma ed il sistema operativo in ogni nodo. SIMD è naturalmente predisposta ad una programmazione data-parallel. In particolare, con frequenti sincronizzazioni (fine grain). SIMD richiede un tempo di STRTUP inferiore nelle comunicazioni con i vicini perché (essendovi un clock globale) la comunicazione è paragonabile ad un trasferimento register-to-register Michele olajanni rchitetture SIMD 1/7 Linguaggi di Programmazione SIMD
Vector Reduction Una delle operazioni fondamentali nelle tipiche applicazioni per macchine SIMD. dove: Un vettore è ridotto ad uno scalare: S := REDUE.xxx (vector) xxx = SUM, MULT, M, MIN, ND, Tutte le macchine SIMD mettono a disposizione dell hardware o del software specializzato per eseguire in modo efficiente questa operazione. Tree-Shaped Paralllel Processing 1 1 + + + + 1 Sequential Processing + 6 + 1 log n steps (n-1) steps Michele olajanni rchitetture SIMD /7 Fortran 9 Sviluppato da: NSI ommittee j [1978-1991] Successo del Fortran 77 Sviluppato per superare tutti i dialetti dei Fortran paralleli (MFortran, MPFortran, Fortran-Plus, ecc.) datti sia ad architetture sequenziali che parallele ttenzione!!! iò non significa che un dusty program scritto in Fortran Possa essere eseguito efficientemente in parallelo dopo semplice ricompilazione Michele olajanni rchitetture SIMD /7
ostrutti paralleli Operazioni matriciali come singole istruzioni: INTEGER, DIMENSION(1, ) ::,, = + Non tutti i PE devono prender parte alle operazioni: WHERE (V.LT. ) V = 7 Diverse operazioni di riduzione sono disponibili: LL, NY, MVL, MINVL, PRODUT, SUM ltre funzioni standard disponibili: DOTPRODUT (vector_a, vector_b) = INTEGER D_PROD INTEGER, DIMENSION(1) ::,,, = * D_PROD = SUM() MMUL (matrix_a, matrix_b) Programmare in Fortran 9 consente un uso ristretto del parallelismo: Le formule matematiche sono relativamente facili da convertire lgoritmi complessi possono, invece, creare problemi a causa dell insufficiente flessibilità dei costrutti del linguaggio. Michele olajanni rchitetture SIMD /7 Parallaxis Sviluppato da: Thomas räunl [1989]. asato sul Modula-, esteso con concetti paralleli portabile su tutti gli ambienti SIMD Public domain Programmare ad un livello di astrazione con PE virtuali e connessioni virtuali. PROGRMM = Descrizione lgoritmo + Dichiarazione onnessione (in forma funzionale) Michele olajanni rchitetture SIMD 6/7
ostrutti Paralleli di onnessione west north east Hypercube [,1,1,1] south ONFIGURTION grid [1..],[1..] ONFIGURTION north: grid[ i, j ] grid[ i+1, j].south; south: grid[ i, j ] grid[ i-1, j ].north; east : grid[ i, j ] grid[ i, j+1].west; west : grid[ i, j ] grid[ i, j-1 ].south; inary Tree 8 ONFIGURTION tree [1..1] ONNETION lchild: tree[i] tree[*i].parent; rchild: tree[i] tree[*i+1].parent; 1 6 9 1 11 1 1 1 7 1 [,,,] [,,1,] [1,1,1,1] [,1,,1] [1,,1,1] [,,1,1] [,,,1] ONFIGURTION hyper [], [], [], []; ONNETION go(1) : hyper[i,j,k,l] hyper[(i+1)mod, j, k, 1).go(1); go() : hyper[i,j,k,l] hyper[i, (j+1)mod, k, 1).go(); go() : hyper[i,j,k,l] hyper[i, j, (k+1)mod, 1).go(); go() : hyper[i,j,k,l] hyper[i, j, k, (l+1)mod ).go(); Michele olajanni rchitetture SIMD 7/7 ostrutti paralleli di omunicazione PROPGTE PPROPGTE. east(x); PROPGTE può anche avere parametri: Espressioni vettoriali da inviare Variabili ricevute { Es.: PROPGTE.east(*y, x); SEND e REEIVE Example: SEND grid.east(*y) TO grid.west(x); REEIVE tree.parent(t) FROM grid.east(x); Utili soprattutto nel caso di topologie diverse. Evidentemente, ad ogni passo, solo una delle operazioni può essere attiva. Michele olajanni rchitetture SIMD 8/7
Dot Product Esempi ONFIGURTION list(max); ONNETION; (* none *) scalar d_prod: real; scalar x, y, prod: real;... PRLLEL prod := x*y d_prod := REDUE.SUM(prod); ENDPRLLEL; Laplace ONFIGURTION grid [1..1],[1..1]; ONNETION north: grid[ i, j ] grid[ i+1, j].south; south: grid[ i, j ] grid[ i-1, j ].north; east : grid[ i, j ] grid[ i, j+1].west; west : grid[ i, j ] grid[ i, j-1 ].south; VETOR pixel, n, s, w, e: INTEGER;... PRLLEL PROPGTE.north(pixel, s); PROPGTE.south(pixel, n); PROPGTE.west(pixel, e); PROPGTE.east(pixel, w); pixel := *pixel n - s - w e; ENDPRLLEL; Michele olajanni rchitetture SIMD 9/7 Problemi con la Programmazione SIMD Operazioni vettoriali indiciate d esempio, Gather e Scatter for i := 1 to n do a[i] := b[index[i]] end ccessi non regolari ai vettori for i := 1 to n do a[index[i]] := b[i] end Mapping di processi virtuali su processi fisici olli di bottiglia dovuti ad accessi alle periferiche omunicazioni non regolari Multi-utenza Tolleranza ai guasti Michele olajanni rchitetture SIMD /7
Integerazione numerica π = 1 _ l+x dx Interv. Σ i=1 _ width 1+((i-.)*width) * 1 SYSTEM compute _pi : (* parallel algorithm from R. abb *) ONST intervals = 1; width = 1. / float(intervals) ONFIGURTION list [1..intervals]; 6 ONNETION ( * none *) 7 8 VETOR val: real; 9 1 PROEDURE f (VETOR x: real):vetor real; 11 (* function to be integrated *) 1 EGIN 1 RETURN (. / (1. + *)) 1 END f; 1 16 EGIN 17 PRLLEL(* Integral approximation with rectangle rule*) 18 val := width* f( ( float(id_no)-.) * width ); 19 ENDPRLLEL writereal(redue.sum(val), 1); 1 END compute_pi.. 1 Michele olajanni rchitetture SIMD 1/7 Sorting (ODD-EVEN) (1) 1 SYSTEM sort; (* Odd-Even Transposition Sorting (parallel bubble-sort) *) ONST n = 1; ONFIGURTION list [1..n]; ONNETION left : list[i] -> list [i-1].right; 6 right: list[i] -> list [i+1].left; 7 8 SLR step: INTEGER; 9 a: RRY[1..n] OF INTEGER; 1 11 VETOR val,r,l,comp: INTEGER; 1 lhs: OOLEN; 1 1 EGIN 1 WriteString("Please enter values: '); 16 FOR step:=1 TO n DO ReadInt(a[step]) END; 17 LOD(val,a); 18 19 PRLLEL lhs := ODD(id_no); (* PE is left-hand side of a comparison *) 1 FOR step:=1 TO n DO PROPGTE.right(val,l); PROPGTE.left(val,r); Michele olajanni rchitetture SIMD /7
Sorting (ODD-EVEN) () IF lhs THEN comp:=r ELSE comp:=l END; IF lhs = (comp<val) THEN val:=comp END; (* lhs&(comp<val) *) 6 lhs := NOT lhs; (* or rhs&(comp val) *) 7 END; 8 ENDPRLLEL; 9 STORE(val,a); 1 1 FOR step:=1 TO n DO WriteInt(a[step],1); WriteLn END; END sort.! Numbers distributed among the PEs 1 Steps 1. Odd 1. Even 1. Odd 1. Even 1. Odd 1 Michele olajanni rchitetture SIMD /7 Moltiplicazione matriciale (sistolica) 1 Input Matrix b nn := * b 11 Input Matrix a 11 a nn Processor Field and Solution Matrix Michele olajanni rchitetture SIMD /7
Moltiplicazione matriciale (sistolica) 1 SYSTEM systolic_array; (* alculate the matrix product c := a * b *) ONST max = 1; TYPE matrix = RRY [1..max], [1..max] OF REL; 6 ONFIGURTION grid [max], [max]; 7 ONNETION left: grid[i,j] -> grid[i,(j-l) MOD max].left*; 8 up : grid[i,j] -> grid[((i-l) MOD max,j].up; 9 pre : grid[i,j] -> grid[i,(j-i) MOD max].pre; 1 pre: grid[i,j] -> grid[(i-j) MOD max,j].pre; 11 1 SLR i,j : INTEGER; 1 a,b,c : matrix; 1 1 16 PROEDURE matrix_muit(slr VR a,b,c : matrix); 17 (* c := a * b *) 18 SLR k: INTEGER; 19 VETOR ra,rb,rc : REL; EGIN 1 LOD (ra,a); LOD (rb,b); PRLLEL PROPGTE.pre (ra); PROPGTE.pre(rb); 6 rc := ra * rb; 7 FOR k := TO max DO 8 PROPGTE.left(ra); 9 PROPGTE.up(rb); rc := rc + ra * rb; 1 END; ENDPRLLEL; STORE(rc,c); END matrix_mult; 6 EGIN 7... (* read matrices a and b *) 8 matrix_mult(a,b,c); 9... (* write matrix c *) END systolic_array. Generazione di frattali (1) (Metodo DIVIDE-ND-ONQUER) Starting state PE rranged as a inary Tree fter 1st step fter nd step fter nth step Divide-and-conquer implemented with tree topology Iserire immagine Michele olajanni rchitetture SIMD 6/7
Generazione di frattali () 1 SYSTEM fractal; ONST maxlevel = 7; low_val =.; high_val = 1.; maxnode = **maxlevel - 1; 6 (* declaration of the tree structure *) 7 ONFIGURTION tree [1..maxnode]; 8 ONNETION child_l: tree[i] <-> tree[*i].parent; 9 child_r: tree[i] <-> tree[*i+l].parent; 1 SLR i : INTEGER; 11 delta : REL; 1 field : RRY [1..maxnode] OF REL; 1 VETOR x, low, high : REL; 1 1 PROEDURE Gauss(): VETOR REL; 16 (*generation of a random value vector with Gauss dist.*)...... 6 END Gauss; 7 8 PROEDURE inorder(slr node: INTEGER); 9 (* output of the tree elementa inlinear sequence *)...... 6 END inorder; 7 8 PROEDURE MidPoint(SLR delta:rel;slr level:integer); 9 EGIN (* select current tree level *) PRLLEL [**(level-1).. **level - 1] 1 x :=. * (low + high) + delta*gauss(); IF level < maxlevel THEN (* values for children*) SEND tree.child_l (low) TO tree.parent ( low) ; SEND tree.child_l (x) TO tree.parent(high); SEND tree.child_r (x) TO tree.parent( low) ; 6 SEND tree.child_r (high) TO tree.parent(high); 7 END; 8 ENDPRLLEL; 9 END MidPoint; 1 EGIN (* main program *) PRLLEL (* starting values *) low := low_val; high := high_val; x :=.; 6 ENDPRLLEL; 7 FOR i:=1 TO maxlevel DO 8 delta:=.**(float(i)/.); 9 MidPoint(delta,i); 6 END; 61 STORE(,field); 6