La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Dense Matrix-Matrix Multiplication in Parallel PROGETTO PER IL CORSO DI CALCOLO PARALLELO A.A. 2006/07 Cappellazzo Pietro Carminati Roberto De Martin Andrea.

Presentazioni simili


Presentazione sul tema: "Dense Matrix-Matrix Multiplication in Parallel PROGETTO PER IL CORSO DI CALCOLO PARALLELO A.A. 2006/07 Cappellazzo Pietro Carminati Roberto De Martin Andrea."— Transcript della presentazione:

1 Dense Matrix-Matrix Multiplication in Parallel PROGETTO PER IL CORSO DI CALCOLO PARALLELO A.A. 2006/07 Cappellazzo Pietro Carminati Roberto De Martin Andrea

2 Matrix-Matrix Multiplication in Parallel2 Obbiettivi Implementazione dellalgoritmo sequenziale Implementazioni di tre algoritmi paralleli Matrix-Matrix Multiplication Cannon Algorithm Processor Farm Test e confronti fra gli algoritmi paralleli

3 Matrix-Matrix Multiplication in Parallel3 Strutture Dati Le matrici utilizzate sono descritte dalla seguente struttura: typedef struct matrice{ int size; double **valori; } Matrice; Per gestire queste sono state implementate varie funzioni, fra le quali: Matrice *generaMatrici(int); void stampaMatrice(Matrice *matrice); Matrice *leggiMatrice(char nome[],int *n); void freeMatrice(Matrice *m);

4 Matrix-Matrix Multiplication in Parallel4 Strutture Dati Le matrici possono essere sia caricate da disco, sia generate a runtime. Se vengono caricate da file, il file deve essere strutturato come segue: dimensione matrice contenuto della matrice

5 Matrix-Matrix Multiplication in Parallel5 Implementazione Algoritmo Sequenziale Lalgoritmo sequenziale è stato implementato tramite una semplice moltiplicazione di matrici: Entrambe le matrici da moltiplicare vengono caricate o generate nello heap Anche la matrice risultante viene generata (vuota) nello heap Vengono effettuati i calcoli La matrice risultante viene salvata sul disco locale (di default nella cartella /tmp ) Complessità O(n 3 ) Questo non è lalgoritmo più efficiente (sequenziale) Lalgoritmo ottimo è lalgoritmo di Strassen Complessità O( )

6 Matrix-Matrix Multiplication in Parallel6 Implementazione Matrix-Matrix Multiplication Input Input da file Generazione a runtime Suddivisione delle matrici (e posizionamento in array)

7 Matrix-Matrix Multiplication in Parallel7 Implementazione Matrix-Matrix Multiplication Comunicazioni (Fase 1) Invio in broadcast il numero di celle che dovrà ricevere ogni processo Ogni processo alloca lo spazio necessario Il processo master invia ad ogni altro processo le proprie celle (scatter)

8 Matrix-Matrix Multiplication in Parallel8 Implementazione Matrix-Matrix Multiplication Comunicazioni (Fase 2) i processi devono comunicare il proprio blocco a tutti gli altri processi presenti nella stessa riga della prima matrice e nella stessa colonna della seconda MPI_Comm_split(MPI_COMM_WORLD,xy[1],myid,&MPI_Riga); MPI_Comm_split(MPI_COMM_WORLD,xy[0],myid,&MPI_Colonna);

9 Matrix-Matrix Multiplication in Parallel9 Implementazione Matrix-Matrix Multiplication Comunicazioni (Fase 2) Vengono effettuate tutte le comunicazioni necessarie (all_to_all) Viene eseguita una Allgather in ogni comunicatore creato.

10 Matrix-Matrix Multiplication in Parallel10 Implementazione Matrix-Matrix Multiplication Moltiplicazione ogni processo possiede tutti i dati necessari a calcolare il proprio blocco risultante e procede con la moltiplicazione Comunicazioni (Fase 3) I blocchi vengono convertiti in array monodimensionali e inviati al processo master (gather)

11 Matrix-Matrix Multiplication in Parallel11 Implementazione Matrix-Matrix Multiplication Salvataggio Il processo master a questo punto compone la matrice risultante e la salva nel disco locale Di default nella cartella /tmp del sistema Riassunto funzionamento

12 Matrix-Matrix Multiplication in Parallel12 Implementazione Cannon Algorithm Input Input da file Generazione a runtime Suddivisione delle matrici (e posizionamento in array)

13 Matrix-Matrix Multiplication in Parallel13 Implementazione Cannon Algorithm Allineamento delle matrici

14 Matrix-Matrix Multiplication in Parallel14 Implementazione Cannon Algorithm Comunicazioni (Fase 1) La fase di allineamento pone le matrici in array monodimensionali Viene comunicato ad ogni processo quante celle dovrà ricevere(broadcast) Ogni processo alloca quindi lo spazio necessario a ricevere i dati Il master invia ad ogni processo il proprio blocco (scatter)

15 Matrix-Matrix Multiplication in Parallel15 Implementazione Cannon Algorithm Determinazione del rank dei processi vicini Per ogni processo vengono determinati gli id del processo Sopra, Sotto, A Destra, A Sinistra

16 Matrix-Matrix Multiplication in Parallel16 Implementazione Cannon Algorithm Moltiplicazione ogni processo procede al calcolo del blocco parziale (moltiplicando i due blocchi in suo possesso) Comunicazioni (Fase 2) Attraverso la primitiva MPI_Sendrecv_replace ogni processo comunica: Il proprio blocco della prima matrice al vicino di destra e lo riceve da quello di sinistra Il proprio blocco della seconda matrice al vicino in alto e lo riceve dal vicino in basso

17 Matrix-Matrix Multiplication in Parallel17 Implementazione Cannon Algorithm In questo modo viene effettuato uno shift delle matrici Ad ogni passo il valore del blocco risultante temporaneo viene aggiornato

18 Matrix-Matrix Multiplication in Parallel18 Implementazione Cannon Algorithm Una volta ricevuti: tutti i blocchi della riga della prima matrice e della colonna della seconda matrice Il blocco calcolato è il risultato finale Comunicazioni (Fase 3) I blocchi calcolati vengono trasformati in array monodimensionali e inviati al processo master (gather)

19 Matrix-Matrix Multiplication in Parallel19 Implementazione Cannon Algorithm Salvataggio Il processo master a questo punto compone la matrice risultante e la salva nel disco locale Di default nella cartella /tmp del sistema Riassunto funzionamento

20 Matrix-Matrix Multiplication in Parallel20 Implementazione Processor Farm Input Input da file Generazione a runtime Comunicazioni (Fase 1) Viene comunicata la dimensione della seconda matrice (broadcast) Ogni processo può allocare lo spazio necessario Lintera seconda matrice viene quindi replicata in tutti i processi slave (broadcast)

21 Matrix-Matrix Multiplication in Parallel21 Implementazione Processor Farm Comunicazioni (Fase 2) Il Processo master inizia a scandire la prima matrice comunica ad ogni processo slave una riga (MPI_send) Ed un id che indica la posizione della riga nella prima matrice se ci sono più processi che righe viene comunicato il valore id = -1 che indica al processo slave che non ci sono dati da computare Moltiplicazione Ogni processo slave può calcolare la riga risultante Possiede una riga della prima matrice (MPI_recv) e lintera seconda matrice

22 Matrix-Matrix Multiplication in Parallel22 Implementazione Processor Farm Comunicazioni (Fase 3) Il processo slave, una volta terminato il calcolo invia il risultato (e lindice) al processo master (MPI_send) Comunicazioni (Fase 4) Il processo master : se ha ancora righe della matrice Ris che non sono state calcolate, invia una riga della prima matrice (e lindice corrispondente) al processo dal quale ha appena ricevuto un risultato altrimenti Invia al processo richiedente lindice -1 che indica che il lavoro è terminato Salvataggio Il processo master a questo punto compone la matrice risultante e la salva nel disco locale Di default nella cartella /tmp del sistema

23 Matrix-Matrix Multiplication in Parallel23 Implementazione Processor Farm Master Slave 1 B B B B Riga matrice A + id id = -1 Riga matrice Ris + id Processo Idle Processo Attivo

24 Matrix-Matrix Multiplication in Parallel24 Implementazione Processor Farm

25 Matrix-Matrix Multiplication in Parallel25 Scelte progettuali Funzione per appesantire la computazione Funzione che accetta in input un numero e, a seconda del suo valore, utilizza il processore per più o meno tempo. E basata sulle dimensione delle matrici Ad esempio: per calcolare una matrice 1920x1920,vengono effettuate moltiplicazioni Supponendo che la funzione occupi il processore per 1ms 1ms* ore di computazione (in sequenziale) (81 giorni !!!! ) Per questo la scelta è ricaduta su un semplice ciclo for for (k=0;k

26 Matrix-Matrix Multiplication in Parallel26 Scelte progettuali Dimensioni delle matrici Sono state scelte delle matrici che permettono di occupare la memoria di essere calcolate in un tempo ragionevole

27 Matrix-Matrix Multiplication in Parallel27 Test I test sono stati eseguiti su un cluster di workstation con macchine omogenee, così configurate: CPU: Intel® Pentium® Ghz (1795 Mhz) RAM: 768MB (774300KB total KB free) RETE: Ethernet 100.0Mbps indirizzi Ip * OS: Ubuntu Linux (kernel version: ) Per i test sono state utilizzate fino a 16 macchine I test sono stati eseguiti variando: Granularità (BASSA – MEDIA – ALTA) Dimensione matrice (192 – 384 – ) Questo per ogni algoritmo, con un totale di 120 test prestazionali

28 Matrix-Matrix Multiplication in Parallel28 Test – tempi di esecuzione Algoritmo sequenziale O(n 3 ) la complessità dellalgoritmo è O(n 3 ) nella matrice con dimensioni maggiori (1920x1920) la differenza è di circa 1469sec (24minuti). Questo permetterà poi di valutare effettivamente il comportamento degli algoritmi paralleli

29 Matrix-Matrix Multiplication in Parallel29 Test – tempi di esecuzione Matrix-Matrix Multiplication laumento del numero di processi non comporta laumento delle prestazioni auspicabile con laumento del numero di processori, aumentano anche le comunicazioni necessarie a fornire ad ogni processo il proprio blocco di dati da computare.

30 Matrix-Matrix Multiplication in Parallel30 Test – tempi di esecuzione Matrix-Matrix Multiplication Matrix-Matrix Multiplication non effettua il bilanciamento del carico Si ipotizza infatti che almeno una delle macchine coinvolte nel calcolo, sia risultata più lenta, comportando un aumento del tempo totale di calcolo

31 Matrix-Matrix Multiplication in Parallel31 Test – tempi di esecuzione Cannon Algorithm lalgoritmo offre un significativo aumento delle prestazioni fino a 9 processi, per poi diminuire le prestazioni passando a 16

32 Matrix-Matrix Multiplication in Parallel32 Test – tempi di esecuzione Cannon Algorithm Questo comportamento viene enfatizzato con matrici di grandi dimensioni arriva addirittura ad impiegare lo stesso tempo utilizzando 9 oppure 16 processi

33 Matrix-Matrix Multiplication in Parallel33 Test – tempi di esecuzione Processor Farm Lalgoritmo processor farm risente meno dello sbilanciamento del carico il numero di comunicazioni totali dipende esclusivamente dalla dimensione della matrice

34 Matrix-Matrix Multiplication in Parallel34 Test – speedup Nei problemi semplici Matrix- Matrix Multiplication è lunico algoritmo ad avere un andamento positivo del valore di speedup.

35 Matrix-Matrix Multiplication in Parallel35 Test – speedup In problemi onerosi, lalgoritmo Processor Farm ha una crescita con andamento lineare del valore di speedup.

36 Matrix-Matrix Multiplication in Parallel36 Test – efficienza Con problemi di ridotte dimensioni gli algoritmi paralleli implementati non hanno mai evidenziato valori di efficienza significativi (max0.3)

37 Matrix-Matrix Multiplication in Parallel37 Test – efficienza Cannon Algorithm presenta un buon valore di efficienza nel caso in cui i processi coinvolti siano pochi. Riteniamo più efficiente lalgoritmo Processor Farm, che tende a far rimanere il valore dellefficienza costante

38 Matrix-Matrix Multiplication in Parallel38 Test – dimensione del problema il tempo di calcolo dellalgoritmo matrix-matrix multiplication aumenta notevolmente rispetto agli algoritmi cannon e processor farm, rendendolo praticamente inutilizzabile per la risoluzione di compiti di grande dimensione

39 Matrix-Matrix Multiplication in Parallel39 Test – Complessità del problema lalgoritmo processor farm ha un andamento allincirca costante al variare della granularità il bilanciamento del carico effettuato da questo algoritmo è sempre più efficiente allaumentare della complessità del problema

40 Matrix-Matrix Multiplication in Parallel40 Conclusioni Lalgoritmo Matrix Matrix Multiplication, non si è mostrato idoneo alla parallellizzazione, arrivando al massimo ad un efficienza pari a 0.4. Gli algoritmi Cannon e Processor Farm hanno invece evidenziato dei tempi di esecuzione simili: Cannon algorithm ha una tendenza a far diminuire lefficienza allaumentare dei processi coinvolti nel calcolo; Processor farm ha invece mantenuto invariato tale valore. Lalgoritmo che quindi è da preferire, nellambiente di test provato, è sicuramente Processor Farm: ha dimostrato di risolvere i calcoli in un buon tempo; di riuscire a bilanciare il carico; di non soffrire di un aumento di comunicazioni, allaumentare nel numero di processi coinvolti nelle fasi di calcolo.

41 Matrix-Matrix Multiplication in Parallel41 Riferimenti MPI: The Complete Reference, by Marc Snir, Steve Otto, Steven Huss-Lederman, David Walker and Jack Dongarra, The MIT Press, Cambridge, Massachusetts London, England. Parallel Matrix Multiplication and other Full Matrix Algorithms, G. Fox, Community Grids Laboratory, Indiana University, Introduction to Parallel Computing, 2° Ed., A. Grama, A. Gupta, G. Karypis, V. Kumar Addison-Wesley, The C Programming Language, Kernighan, Brian W.; Dennis M. Ritchie, Prentice Hall. - The Message Passing Interface (MPI) standard. - The University of Melbourne - Department of Computer Science and Software Engineering - Cannon's algorithm. - Università CaFoscari, Venezia – Dipartimento di informatica - Appunti per il corso di calcolo parallelo


Scaricare ppt "Dense Matrix-Matrix Multiplication in Parallel PROGETTO PER IL CORSO DI CALCOLO PARALLELO A.A. 2006/07 Cappellazzo Pietro Carminati Roberto De Martin Andrea."

Presentazioni simili


Annunci Google