PARTE II PROGRAMMAZIONE PARALLELA Metodologie di Esplicitazione del
Metodologie di Esplicitazione del Implicito Funzionale (Control Parallelism ) Basato sui dati (Data Parallelism ) Ogni metodologia di esplicitazione del parallelismo, si basa sempre su due tecniche: - Decomposizione del dominio dei dati e/o dei processi - Mapping dei sottodomini e/o dei processi ai processori Michele Colajanni Esplicitazione del parallelismo 3/34 Metodologie di Esplicitazione del ( Funzionale)
Metodologie di Esplicitazione del (Funzionale) Implicito Funzionale (Control Parallelism) Basato sui dati (Data Parallelism) Pipelining Algoritmico Instruction Level Parallelism (ILP) Funzioni Processi Michele Colajanni Esplicitazione del parallelismo 5/34 Funzionale Applicazione divisa in elementi funzionali (istruzioni, sottoprogrammi, processi) assegnati ai vari nodi. Il codice è diverso per ogni nodo. I dati seguono il codice. Si suddivide in: Pipelining Si individuano nel software dei nuclei sequenziali, che tutti i dati devono attraversare. Si assegna un nucleo ad ogni nodo e quando la pipe è piena si ha il parallelismo Algoritmico Si devono differenziare delle unit à funzionali che possono essere eseguite in modo parallelo (da singola istruzione ad insiemi di funzioni) Tali unit à funzionali possono interagire fra di loro in qualche momento della computazione. Tale interazione richiede uno scambio di informazioni. Richiede un elevato numero di codici differenti. Istruction Level Parallelism (ILP) algoritmico esplicitato a livello di istruzioni. All inizio, era a carico del programmatore, adesso vi sono strumenti (compilatori) che individuano automaticamente il parallelismo Michele Colajanni Esplicitazione del parallelismo 6/34
Esplicitazione del Funzionale Ogni programma sequenziale è un potenziale programma parallelo. L esplicitazione del parallelismo dipende dal livello di astrazione a cui ci si pone. Scelta del livello di astrazione (ATOMO=espressione aritmetica, istruzione, funzione, processo) Grafico delle unità computazionali non più suddivisibili ( atomi ); i nodi sono le funzioni, gli archi denotano le dipendenze funzionali tra gli atomi. (Grafo ottenuto in maniera deterministico, una volta scelto il livello di astrazione). Dipendenze funzionali tra cluster (insiemi di atomi partizionati). Problema NP-completo assimilabile al grain-packing, per cui ci si accontenta di approsimazioni Denota come i cluster vengono assegnati ai processori (quale processore esegue cosa). Un altro problema NP-completo. Michele Colajanni Esplicitazione del parallelismo 7/34 Paradigma Multiple Process Multiple Data (MPMD) E l unico livello di parallelizzazione funzionale che attualmente rimane di competenza del programmatore. I livelli di astrazione inferiori vengono ormai esplicitati in modo automatico da strumenti hardware o software di basso livello integrati con compilatori che ottimizzano il codice per una determinata architettura. Nel caso di MPMD, il parallelismo viene esplicitato: # A livello di Processo (Coarse-grain) # Consentendo a elementi di elaborazione multipli di eseguire concorrentemente - Un insieme di programmi - Parti indipendenti di questi La definizione MPMD ricorda la tassonomia di Flynn, sebbene venga applicata ad un contesto differente da quello architetturale. Michele Colajanni Esplicitazione del parallelismo 8/34
Costrutti per esprimere la concorrenza Corutines - Chiamate esplicite tra parti di subroutine - Scambio di flussi a carico del programmatore - Concorrenza gestita dal programmatore Costrutto Fork Join - Concorrenza gestita dal programmatore - Istruzione che specifica il nome di un processo da mandare in esecuzione. La modalità è analoga ad una chiamata di procedura, con la differenza fondamentale che il processo che esegue la fork continua nella sua esecuzione, parallelamente al processo che la fork ha mandato in esecuzione. - Join: ricombina due o più computazioni correnti - Non solo Unix mode ma più generale Costrutto ParBegin / Parend - Consente di specificare l esecuzione concorrente di un insieme di istruzioni. Es: PARBEGIN S1;S2;.;Sn; PAREND Tutte le istruzioni racchiuse fra PARBEGIN e PAREND possono essere eseguite in parallelo. L esecuzione termina solo quando tutte le istruzioni racchiuse sono terminate. Schemi a processi I processi vengono dichiarati in modo analogo alle procedure e vengono attivati con speciali istruzioni. Per eseguire diverse copie di un processo è sufficiente attivarlo con chiamate multiple. Ogni funzione è autonoma, ha un inizio e una fine, può comunicare con altri processi e può essere sincronizzata. Michele Colajanni Esplicitazione del parallelismo 9/34 Metodologie di Esplicitazione del ( basato sui dati)
Metodologie di Esplicitazione del (Decomposizione e Mapping) Implicito Funzionale (Control Parallelism) Basato sui dati (Data Parallelism) Pipelining Algoritmico Problemi bilanciati Problemi non bilanciati Geometrico Task Farm Statico Michele Colajanni Esplicitazione del parallelismo 11/34 basato sui dati (DECOMPOSIZIONE DEL DOMINIO) Molti problemi richiedono l applicazione di operazioni simili (analoga complessità computazionale per tutta la durata dell esecuzione) su parti differenti di grandi insiemi di dati.(problemi bilanciati) In tali circostanze è spesso appropriato decomporre il dominio tra (possibilmente) tutti i processi disponibili ( Geometrico) Esempio 16 processi: Se non vi sono dipendenze all interno del dominio dei dati il principale fattore che limita il parallelismo è dato dal numero di processi disponibili. Altrimenti va scelta la granularità opportuna dell insieme di dati da assegnare a ciascun processore Tradeoff tra overhead di comunicazione e numero di processori utilizzati Michele Colajanni Esplicitazione del parallelismo 12/34
Problemi Bilanciati (TASK FARM STATICO) Modello adottabile per applicazioni che richiedono l esecuzione di uno stesso algoritmo ripetuto su dati iniziali diversi. Ogni esecuzione è indipendente dalle altre e può essere eseguita concorrentemente in modo indipendente dalle altre. Un processore ha la funzione di distributore e collettore. Tutti i rimanenti processori sono denominati worker N task Vi è un partizionamento statico del lavoro (task farm statico) per N worker Esempi di applicazioni: ray tracing (image partitioning), simulazione col metodo Montecarlo, intersezioni orbitali, simulated annealing,. WORKER DISTRIBUTORE WORKER COLLETTORE WORKER Michele Colajanni Esplicitazione del parallelismo 13/34 Metodologie di Esplicitazione del (Decomposizione e Mapping) Implicito Funzionale (Control Parallelism) Basato sui dati (Data Parallelism) Pipelining Algoritmico Problemi bilanciati Problemi non bilanciati Geometrico Task Farm Statico Decomposizione a grana fine Task Farm Dinamico Riconfigurazione Dinamica Michele Colajanni Esplicitazione del parallelismo 14/34
Problemi non Bilanciati (altre possibilità?) Si supponga di avere un dominio computazionale in cui alcuni elementi richiedano un elaborazione molto più onerosa. geometrico (NO!) Si avrebbe un forte sbilanciamento del carico Es. con 16 processi Michele Colajanni Esplicitazione del parallelismo 15/34 Problemi non Bilanciati (DECOMPOSIZIONI STATICHE A GRANA FINE) Una possibile soluzione: decomposizione del dominio dei dati a grana fine Sottodominio assegnato al processore 0 Michele Colajanni Esplicitazione del parallelismo 16/34
Problemi non Bilanciati (TASK FARM DINAMICO) Tipicamente, si scelgono granularità piuttosto fini in modo che il numero di task sia adeguatamente superiore al numero di worker Un processore viene eletto task manager (o master) Tutti i rimanenti processori sono denominati worker (o slave) Il task manager: Conserva l insieme dei grani (computazioni) non ancora elaborati Determina dinamicamente a quale worker assegnare ciascun grano - inizialmente un task ad ogni worker - appena un worker termina l esecuzione, il manager gli assegna un altro task Pool di M task (>>N worker) MANAGER WORKER WORKER WORKER WORKER Michele Colajanni Esplicitazione del parallelismo 17/34 Problemi non Bilanciati (TASK FARM DINAMICO) - continua Caratteristiche 1) Con il task farm dinamico, si ha il considerevole vantaggio di non dover fare assunzioni preliminari sul mapping del dominio dei dati per ottenere un buon bilanciamento 2) Si ottengono buone prestazioni se: I grani sono relativamente indipendenti Si riesce a mantenere costante il flusso dei grani tra manager e worker I costi delle continue interazioni dinamiche con il manager non sono prevalenti Il manager non deve diventare il collo di bottiglia della computazione, ma non deve rimanere inattivo per troppo tempo Michele Colajanni Esplicitazione del parallelismo 18/34
TASK FARM (modelli ibridi) TASK FARM CON MANAGER/WORKER MANAGER/ WORKER WORKER WORKER WORKER WORKER SINK TASK FARM BUFFERIZZATO MANAGER Worker Worker Worker Worker SINK Michele Colajanni Esplicitazione del parallelismo 19/34 Con il task farm dinamico, si ha il considerevole vantaggio di non dover fare assunzioni preliminari sul mapping del dominio dei dati per ottenere un buon bilanciamento. Tuttavia, si può applicare solo in applicazioni parallele in cui non vi è necessità di cooperazione/comunicazione tra i worker. Il modello alternativo prevede: - Una decomposizione (tipicamente) a grana medio-fine del dominio dei dati, senza studi preliminari sull efficienza del bilanciamento del carico - Dei momenti di controllo (check point) durante la computazione per verificare l efficienza (soprattutto il bilanciamento del carico) della com putazione stessa - Una fase di ridistribuzione del carico computazionale (bilanciamento dinamico) tra i processori nel caso in cui il check abbia evidenziato serie inefficienze Alcuni problemi Problemi non Bilanciati (RICONFIGURAZIONE DINAMICA) - Quanto frequenti devono essere i checkpoint? - Come decidere che il ribilancimaneto è necessario? - Se è necessario, come effettuarlo? Michele Colajanni Esplicitazione del parallelismo 20/34
Sintesi: Classi di Applicazioni del Data Parallelism Applicazioni bilanciate Tutti gli elementi del dominio richiedono lo stesso numero di operazioni per tutta la durata della computazione. Decomposizione geometrica oppure Task farm statico Applicazioni non bilanciate 1. Diversi sottoinsiemi del dominio richiedono un numero diverso di operazioni. Durante la computazione non vi sono modifiche sul partizionamento di tali sottoinsiemi Decomposizione a grana fine 2. Diversi sottoinsiemi del dominio richiedono un numero diverso di operazioni. Durante la computazione vi possono essere modifiche sul partizionamento di tali sottoinsiemi. Comunque, i sottoinsiemi di elementi che richiedono diverse operazioni e la stima delle operazioni richieste sono staticamente prevedibili. Decomposizione a grana fine Michele Colajanni Esplicitazione del parallelismo 21/34 Sintesi: Classi di Applicazioni del Data Parallelism (cont.) 3. Diversi sottoinsiemi del dominio richiedono un numero diverso di operazioni. Durante la computazione vi possono essere modifiche sul partizionamento di tali sottoinsiemi. I sottoinsiemi di elementi che richiedono diverse operazioni e/o la stima delle operazioni richieste non sono staticamente prevedibili. I sottoinsiemi computazionali sono indipendenti ed in numero significativamente maggiore del numero di processori disponibili Task farm dinamico I sottoinsiemi computazionali non sono indipendenti: Riconfigurazione dinamica Michele Colajanni Esplicitazione del parallelismo 22/34
Il modello programmativo del Data Parallelism: Single Program Multiple Data (SPMD) Ciascun processore di una macchina MIMD esegue lo stesso programma, ma su di un insieme diverso di dati. ESEMPIO A( ) Nodo 0 Nodo 1 Nodo 2 Nodo 3 B( ) C( ) C( ) C( ) Programma SPMD.. begin < esegui A( )>; if (nodo==0) <esegui B( )>; else <esegui C( )>; if (nodo==0) <esegui D( )>; end HOST D( ) Il modello SPMD è estremamente flessibile: - Utilizzabile anche per programmare TASK FARM La differenza rispetto al modello SIMD? Quali sono i 2 costrutti fondamentali? Michele Colajanni Esplicitazione del parallelismo 23/34 Emulare TaskFarm con modello SPMD main ( ) { int process_id; process_id = <return my process identifier>; if (process_id == 0) Master (argomenti); else Worker (argomenti); } Michele Colajanni Esplicitazione del parallelismo 24/34
Sintesi: Quale modello programmato conviene utilizzare? Dipende dall architettura Macchina SIMD data parallel a grana fine-finissima (programmazione sincrona) Macchina MIMD funzionale a grana grossa (programmazione asincrona) a memoria condivisa Macchina MIMD a memoria distribuita funzionale a grana grossa MPMD data parallel a grana media-fine SPMD Nota Nel caso della memoria condivisa le (pseudo-)comunicazioni e le interruzioni possono avvenire a livello di istruzioni. Nel caso della memoria distribuita, invece, le comunicazioni sono costose e, per ottenere programmi efficienti, devono essere effettuate a livello di sottoprogrammi. Michele Colajanni Esplicitazione del parallelismo 25/34 Ibrido Ibrido= Control Parallelism + Data Parallelism DECOMPOSIZIONE DEL CONTROLLO DECOMPOSIZIONE DEL DOMINIO In alcune applicazioni questa doppia decomposizione fornice delle ottime prestazioni grazie al buon trade-off tra granularità ed overhead E il paradigma di parallelizzazione più comune nel caso di applicazioni reali di grandi dimensioni: Qualche unità di programmi differenti (operanti in modalità MPMD) Decine/centinaia o più di processi operanti su sottodomini computazionali (operanti in modalità SPMD) Michele Colajanni Esplicitazione del parallelismo 26/34
Le tre forze della parallelizzazione delle applicazioni 1. Massimizzare il bilanciamento del carico Ovvero: perseguire la granularità più fine possibile (finest grain) 2. Minimizzare le comunicazioni Ovvero: perseguire la granularità più grossa possibile (coarsest grain) 3. (Non dimenticare di)tener conto delle caratteristiche architetturali della piattaforma MIMD a memoria distribuita: Quanti processori? Quale potenza computazionale offerta da ciascun processore? Quali caratteristiche hardware (vettoriali,ilp, )? Quanti e quali livelli di cache? Quale topologia delle rete di interconnessione? Quale costo medio delle comunicazioni per unità di dato? Soddisfare il trade-off tra tutte queste forze, spesso contrastanti, significa arriv are a rispondere alla vera domanda che la metodologia di parallelizzazione data parallel implica: Quale è il migliore livello di granularità per la mia applicazione e la mia architettura? Michele Colajanni Esplicitazione del parallelismo 27/34 E un termine utilizzato per caratterizzare diversi elementi: modelli algoritmici, distribuzione dei dati/processi, caratteristiche delle architetture parallele Granularità algoritmica Granularità La dimensione media dell unità di calcolo sequenziale che non richiede sincronizzazioni né comunicazioni. Granularità del problema La dimensione media dell insieme di dati assegnati ad un processore. Ad esempio,se una griglia è decomposta spazialmente in sottogriglie,la granularità è il numero di punti in ciascuna sottogriglia. Granularità architetturale La potenza computazionale di ciascun processore Il livello minimo di granularità algoritmica che un multiprocessor gestisce efficientemente. Spingere il grado di parallelismo al di sotto di questo livello causerebbe significative perdite di prestazioni dovute all eccessivo overhead parallelo Michele Colajanni Esplicitazione del parallelismo 28/34
. *. *. * Esempio (come diverse granularità influenzano le prestazioni) Applicazione iterativa che ad ogni passo deve aggiornare ciascun blocco/elemento con i valori dei 4 elementi adiacenti Processo i: Due categorie di elementi: - Elementi interni non hanno dipendenze con dati che appartengono ad altri processi - Elementi bordo, il cui aggiornamento dipende da elementi che appartengono ad altri processi. NECESSITA DI SWAP DELLE AREE DI OVERLAP Processo i: Processo j: Michele Colajanni Esplicitazione del parallelismo 29/34 Esempio [cont.] (come diverse granularità influenzano le prestazioni) Coarse decomposition (blocchi di 6 righe) Fine decomposition (blocchi di 3 righe) Very fine decomposition (blocchi di 2 righe) 2 righe da trasmettere ogni 6 da calcolare (rischio di non bilanciamento, ma basso overhead di comunic.) 2 righe da trasmettere ogni 3 da calcolare (maggior bilanciamento, ma più alto overhead di comunicazione) 2 righe da trasmettere ogni 2 da calcolare (massimo bilanciamento, ma altissimo overhead di comunic.) Michele Colajanni Esplicitazione del parallelismo 30/34
Dall Esplicitazione del al Programma Parallelo Approcci al (a) implicito (b) esplicito Programmatore Programmatore Codice sorgente scritto in linguaggi sequenziali, Es. C, Fortran, LISP, Pascal Codice sorgente scritto in dialetti di linguaggi Sequenziali. Es. Fortran, C, LISP, Pascal Compilatore autoparallelizzante Codice oggetto parallelo Compilatore che preserva la concorrenza Codice oggetto parallelo Esecuzione da parte del Sistema a runtime Esecuzione da parte del Sistema a runtime Michele Colajanni Esplicitazione del parallelismo 32/34
Modelli di programmazione parallela (presente e futuro) MODELLO COMPUTAZIONALE MEMORY MODEL PROCESS CONTROL MECHANISMS HARDWARE DISTRIBUTED PROCESS MODEL MESSAGE PASSING DISTRIBUTED MEMORY MULTICOMPUTER SHARED MPMD O SPMD LOCKS,SEMAPHORES, MONITORS SHARED MEMORY MULTIPROCESSOR Futuro? MEMORY MODEL SHARED PROCESS MODEL MPMD O SPMD COMPILATORE PARALLELO DISTRIBUTED MEMORY MULTICOMPUTER SHARED MEMORY MULTIPROCESSOR Michele Colajanni Esplicitazione del parallelismo 33/34 La realtà dei Linguaggi per la programmazione parallela a scambio di messaggi Linguaggi paralleli Ambienti di Programmazione IMPLICITO PARALLELISMO ESPLICITO PARALLELISMO (CSP, Occam, Ada, ) Linguaggi sequenziali + Librerie a run-time (C parallelo, Fortran parallelo, ) Pre - compilatori (Express, Linda) Librerie di routine parallele (Scalapack, PBLAS, Toolbox, ) Supercompilatori Librerie propriet. Libreria PVM Libreria MPI (HPF, Vienna Fortran) Michele Colajanni Esplicitazione del parallelismo 34/34