Dense Matrix-Matrix Multiplication in Parallel

Slides:



Advertisements
Presentazioni simili
MODULO 4 – Il Foglio elettronico
Advertisements

Array multidimensionali
Algoritmi notevoli In linguaggio C.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Introduzione alla programmazione
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
Algoritmi e Strutture Dati
Heap Sort. L’algoritmo heap sort è il più lento di quelli di ordinamento O(n * log n) ma, a differenza degli altri (fusione e quick sort) non richiede.
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Tail recursion: esempio
Corso di Fondamenti di programmazione a.a.2009/2010
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 29/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Paralleli e Distribuiti a.a. 2008/09
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 12/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 17/03/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Algoritmi e strutture Dati - Lezione 7
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Allocazione dinamica della memoria
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Importazione di dati Nellambito dellutilizzo di qualsiasi software statistico una necessità è quella di importare dati esterni forniti dallutilizzatore.
APPUNTI SUL LINGUAGGIO C
Heap allocation e garbage collector di Oberon Algoritmo Quick Fit e garbage collector mark and sweep.
memoria gestita staticamente:
Java base III: Array e Stringhe
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
Università degli studi di Modena e Reggio Emilia
Autore: Francesco Palmieri Microsoft Excel Tecniche di base.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Calcolo Parallelo e Distribuito
Per iniziare Cos’è un Foglio Elettronico?
Esercizi su File e Liste
IL MASSIMO DI UN ARRAY ESERCIZIO
Ricerca sequenziale in un array di interi
Corso di Programmazione Grafica e Laboratorio Daniele Marini
ALGORITMI a.
Algoritmo che viene utilizzato per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine, in modo che ogni elemento.
Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante un algoritmo.
Definizione di un algoritmo
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
Programmazione in linguaggio C
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
Lezione 11 Riccardo Sama' Copyright  Riccardo Sama' Excel.
Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Algoritmi e basi del C Struttura di un programma
Array (visita e ricerca) CORDA – Informatica A. Ferrari.
Algoritmi e basi del C Struttura di un programma
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
EM 09 Il foglio elettronico EXCEL. EM 09 Foglio di calcolo Una tabella in cui è possibile disporre dati, formule e valori anche con relazioni dinamiche.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Lezione sulle allocazioni dinamiche
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
GLI ALGORITMI DI ORDINAMENTO
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
Suggerimenti [1d5] SE la prima lettera della matrice (in alto a sinistra, matrice[0,0]) è diversa dalla prima lettera della parola (parola[0]) ALLORA siamo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array n-dimensionali e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata.
Planet HT – Genova - Elisa Delvai
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi Complessità e Trasportabilità Lezione n°3.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Algoritmi distribuiti Lezione n°9.
Transcript della presentazione:

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

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

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

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 100652072.371159 244830855.097792 58656990.522433 49018021.012937 1069220144.632378 -141295504.878204 -109381498.803692 357493319.983084 392155482.578247 881982189.524574 -673959577.796322 151256985.897165 1043582072.493237 511353868.458505 189438468.246429 -344821564.773202 dimensione matrice contenuto della matrice Matrix-Matrix Multiplication in Parallel

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

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

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

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

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

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

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

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

Implementazione Cannon Algorithm Allineamento delle matrici Matrix-Matrix Multiplication in Parallel

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

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

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

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

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

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

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

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

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

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

Implementazione Processor Farm Matrix-Matrix Multiplication in Parallel

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 19203 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. http://www-unix.mcs.anl.gov/mpi/ - The Message Passing Interface (MPI) standard. http://www.cs.mu.oz.au/498/notes/node30.html - The University of Melbourne - Department of Computer Science and Software Engineering - Cannon's algorithm. http://www.dsi.unive.it/~calpar/ - Università Ca’Foscari, Venezia – Dipartimento di informatica - Appunti per il corso di calcolo parallelo Matrix-Matrix Multiplication in Parallel