Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
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 Parallel
Obbiettivi Implementazione dell’algoritmo sequenziale Implementazioni di tre algoritmi paralleli Matrix-Matrix Multiplication Cannon Algorithm Processor Farm Test e confronti fra gli algoritmi paralleli Matrix-Matrix Multiplication in Parallel
3
Matrix-Matrix Multiplication in Parallel
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); Matrix-Matrix Multiplication in Parallel
4
Matrix-Matrix Multiplication in Parallel
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: 4 dimensione matrice contenuto della matrice Matrix-Matrix Multiplication in Parallel
5
Implementazione Algoritmo Sequenziale
L’algoritmo 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(n3) Questo non è l’algoritmo più efficiente (sequenziale) L’algoritmo ottimo è l’algoritmo di Strassen Complessità O( ) Matrix-Matrix Multiplication in Parallel
6
Implementazione Matrix-Matrix Multiplication
Input Input da file Generazione a runtime Suddivisione delle matrici (e posizionamento in array) Matrix-Matrix Multiplication in Parallel
7
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) Matrix-Matrix Multiplication in Parallel
8
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); Matrix-Matrix Multiplication in Parallel
9
Implementazione Matrix-Matrix Multiplication
Comunicazioni (Fase 2) Vengono effettuate tutte le comunicazioni necessarie (all_to_all) Viene eseguita una Allgather in ogni comunicatore creato. Matrix-Matrix Multiplication in Parallel
10
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) Matrix-Matrix Multiplication in Parallel
11
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 Matrix-Matrix Multiplication in Parallel
12
Implementazione Cannon Algorithm
Input Input da file Generazione a runtime Suddivisione delle matrici (e posizionamento in array) Matrix-Matrix Multiplication in Parallel
13
Implementazione Cannon Algorithm
Allineamento delle matrici Matrix-Matrix Multiplication in Parallel
14
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) Matrix-Matrix Multiplication in Parallel
15
Implementazione Cannon Algorithm
Determinazione del rank dei processi vicini Per ogni processo vengono determinati gli id del processo Sopra, Sotto, A Destra, A Sinistra Matrix-Matrix Multiplication in Parallel
16
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 Matrix-Matrix Multiplication in Parallel
17
Implementazione Cannon Algorithm
In questo modo viene effettuato uno shift delle matrici Ad ogni passo il valore del blocco risultante temporaneo viene aggiornato Matrix-Matrix Multiplication in Parallel
18
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) Matrix-Matrix Multiplication in Parallel
19
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 Matrix-Matrix Multiplication in Parallel
20
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 L’intera seconda matrice viene quindi replicata in tutti i processi slave (broadcast) Matrix-Matrix Multiplication in Parallel
21
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 l’intera seconda matrice Matrix-Matrix Multiplication in Parallel
22
Implementazione Processor Farm
Comunicazioni (Fase 3) Il processo slave, una volta terminato il calcolo invia il risultato (e l’indice) 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 l’indice corrispondente) al processo dal quale ha appena ricevuto un risultato altrimenti Invia al processo richiedente l’indice -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 Matrix-Matrix Multiplication in Parallel
23
Implementazione Processor Farm
Processo Attivo Master Processo Idle Riga matrice A + id Riga matrice Ris + id id = -1 Riga matrice A + id Riga matrice Ris + id Riga matrice Ris + id Riga matrice A + id Slave 1 Slave 1 B B Slave 1 Slave 1 B B Matrix-Matrix Multiplication in Parallel
24
Implementazione Processor Farm
Matrix-Matrix Multiplication in Parallel
25
Matrix-Matrix Multiplication in Parallel
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* 19203≈1960 ore di computazione (in sequenziale) (81 giorni !!!! ) Per questo la scelta è ricaduta su un semplice ciclo for for (k=0;k<granularita;k++)l++; Sono state scelte tre granularità: Matrix-Matrix Multiplication in Parallel
26
Matrix-Matrix Multiplication in Parallel
Scelte progettuali Dimensioni delle matrici Sono state scelte delle matrici che permettono di occupare la memoria di essere calcolate in un tempo ragionevole Matrix-Matrix Multiplication in Parallel
27
Matrix-Matrix Multiplication in Parallel
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 Matrix-Matrix Multiplication in Parallel
28
Test – tempi di esecuzione Algoritmo sequenziale O(n3)
la complessità dell’algoritmo è O(n3) nella matrice con dimensioni maggiori (1920x1920) la differenza è di circa 1469sec (≈24minuti). Questo permetterà poi di valutare effettivamente il comportamento degli algoritmi paralleli Matrix-Matrix Multiplication in Parallel
29
Test – tempi di esecuzione Matrix-Matrix Multiplication
l’aumento del numero di processi non comporta l’aumento delle prestazioni auspicabile con l’aumento del numero di processori, aumentano anche le comunicazioni necessarie a fornire ad ogni processo il proprio blocco di dati da computare. Matrix-Matrix Multiplication in Parallel
30
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 Matrix-Matrix Multiplication in Parallel
31
Test – tempi di esecuzione Cannon Algorithm
l’algoritmo offre un significativo aumento delle prestazioni fino a 9 processi, per poi diminuire le prestazioni passando a 16 Matrix-Matrix Multiplication in Parallel
32
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 Matrix-Matrix Multiplication in Parallel
33
Test – tempi di esecuzione Processor Farm
L’algoritmo processor farm risente meno dello sbilanciamento del carico il numero di comunicazioni totali dipende esclusivamente dalla dimensione della matrice Matrix-Matrix Multiplication in Parallel
34
Matrix-Matrix Multiplication in Parallel
Test – speedup Nei problemi semplici Matrix-Matrix Multiplication è l’unico algoritmo ad avere un andamento positivo del valore di speedup. Matrix-Matrix Multiplication in Parallel
35
Matrix-Matrix Multiplication in Parallel
Test – speedup In problemi onerosi, l’algoritmo Processor Farm ha una crescita con andamento lineare del valore di speedup. Matrix-Matrix Multiplication in Parallel
36
Matrix-Matrix Multiplication in Parallel
Test – efficienza Con problemi di ridotte dimensioni gli algoritmi paralleli implementati non hanno mai evidenziato valori di efficienza significativi (max≈0.3) Matrix-Matrix Multiplication in Parallel
37
Matrix-Matrix Multiplication in Parallel
Test – efficienza Cannon Algorithm presenta un buon valore di efficienza nel caso in cui i processi coinvolti siano pochi. Riteniamo più efficiente l’algoritmo Processor Farm, che tende a far rimanere il valore dell’efficienza costante Matrix-Matrix Multiplication in Parallel
38
Test – dimensione del problema
il tempo di calcolo dell’algoritmo matrix-matrix multiplication aumenta notevolmente rispetto agli algoritmi cannon e processor farm, rendendolo praticamente inutilizzabile per la risoluzione di compiti di grande dimensione Matrix-Matrix Multiplication in Parallel
39
Test – Complessità del problema
l’algoritmo processor farm ha un andamento all’incirca costante al variare della granularità il bilanciamento del carico effettuato da questo algoritmo è sempre più efficiente all’aumentare della complessità del problema Matrix-Matrix Multiplication in Parallel
40
Matrix-Matrix Multiplication in Parallel
Conclusioni L’algoritmo 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 l’efficienza all’aumentare dei processi coinvolti nel calcolo; Processor farm ha invece mantenuto invariato tale valore. L’algoritmo che quindi è da preferire, nell’ambiente 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, all’aumentare nel numero di processi coinvolti nelle fasi di calcolo. Matrix-Matrix Multiplication in Parallel
41
Matrix-Matrix Multiplication in Parallel
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, 2005. Introduction to Parallel Computing, 2° Ed., A. Grama, A. Gupta, G. Karypis, V. Kumar Addison-Wesley, 2003. 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à Ca’Foscari, Venezia – Dipartimento di informatica - Appunti per il corso di calcolo parallelo Matrix-Matrix Multiplication in Parallel
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.