Parallelizzazione Laplace 2D: MPI e MPI+OMP. - Cineca - SuperComputing Applications and Innovation Department



Documenti analoghi
Introduzione alla parallelizzazione ibrida con MPI+OpenMP Modulo 1

Sommario. Analysis & design delle applicazioni parallele. Misura delle prestazioni parallele. Tecniche di partizionamento.

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

SISTEMI OPERATIVI THREAD. Giorgio Giacinto Sistemi Opera=vi

Capitolo 5: I thread

FONDAMENTI di INFORMATICA L. Mezzalira

L API socket ed i daemon

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Pronto Esecuzione Attesa Terminazione

Operazioni di Comunicazione di base. Cap.4

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

DMA Accesso Diretto alla Memoria

istraffic Sistema di monitoraggio Traffico

Scheduling. Sistemi Operativi e Distribuiti A.A Bellettini - Maggiorini. Concetti di base

Sistemi Operativi. Scheduling della CPU SCHEDULING DELLA CPU. Concetti di Base Criteri di Scheduling Algoritmi di Scheduling

Sistemi Operativi SCHEDULING DELLA CPU. Sistemi Operativi. D. Talia - UNICAL 5.1

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Prodotto Matrice - Vettore in OpenMP

INFORMATICA 1 L. Mezzalira

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Descrizione di un algoritmo

Note su quicksort per ASD (DRAFT)

I/O su Socket TCP: read()

Gestione Risorse Umane Web

Tirocinio per la Laurea Triennale

Calcolatori Elettronici A a.a. 2008/2009

Richiesta pagina PHP (es: index.php)

MPI è una libreria che comprende:

GESTIONE INFORMATICA DEI DATI AZIENDALI

Alberi binari di ricerca

Sistemi Operativi SCHEDULING DELLA CPU

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Il simulatore SPIM SPIM

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Allocazione dinamica della memoria - riepilogo

Università degli Studi di Salerno

Sistema di Monitoraggio e Controllo della Produzione di Materie Plastiche

IL SOFTWARE SECONDO LA NORMA UNI EN ISO :2008 (IIA PARTE) 1

Lezione 10: Librerie e compilazione separata

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi

Risparmiare innovando

Approccio stratificato

Criteri di Scheduling Algoritmi di Scheduling Multiple-Processor Scheduling Asymmetric/Symmetric multiprocessing Processori Multicore

Tera TM. Applicazione per il telemarketing

Il problema del produttore e del consumatore. Cooperazione tra processi

Introduzione ai Metodi Formali

Corso di Linguaggi di Programmazione

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

L unità di elaborazione pipeline L unità Pipelining

Introduzione ai sistemi operativi

Introduzione al MATLAB c Parte 2

e-dva - eni-depth Velocity Analysis

Scuola Superiore Sant Anna. Progetto parte Unix. AA : Distributed File Repository

Alcuni strumenti per lo sviluppo di software su architetture MIMD

LabVIEW offre un ambiente di programmazione grafica

CAPITOLO 27 SCAMBIO DI MESSAGGI

La schedulazione. E.Mumolo

Introduzione ai tipi di dato astratti: applicazione alle liste

QG Gestione Assenze. Inserimento per Classe. Per la gestione delle assenze accedere dal Menu Giornaliere->Assenze e Giustificazioni

GAS.DV/WIN Front Office

Sistemi Operativi. 5 Gestione della memoria

Sistemi Operativi GESTIONE DELLA MEMORIA SECONDARIA. D. Talia - UNICAL. Sistemi Operativi 11.1

Sistemi Operativi. Memoria Secondaria GESTIONE DELLA MEMORIA SECONDARIA. Struttura del disco. Scheduling del disco. Gestione del disco

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

PkBox Client Smart API

Hazard sul controllo. Sommario

Profibus vs WorldFIP WorldFip centralizzato e basato sulla schedulazione

(a cura di Francesca Godioli)

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

B+Trees. Introduzione

CPU. Maurizio Palesi

Comunicazione tra Processi

Comunicazione tra Processi

OE-TL100 SOFTWARE PER RACCOLTA ORDINI MAGAZZINO

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Algoritmi e Strutture Dati

Calcolatori Elettronici

OPERAZIONI DI INIZIO ANNO ADHOC REVOLUTION

Configuration Management

Esercizio: numero primo

EFFETTI DEGLI INVESTIMENTI AMBIENTALI B.A.T. SULLA COMPATIBILITà AMBIENTALE

Lo scheduling. Tipici schedulatori

CRM AziendaDemo. Validità: Dicembre 2013

ACO Archiviazione Elettronica e Conservazione sostitutiva

Ingegneria del Software 5. Esercizi sui casi d uso. Dipartimento di Informatica Università di Pisa A.A. 2014/15

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?

Configurazione di Outlook Express

SAPIENZA Università di Roma Facoltà di Ingegneria

CASSA AUTOMATICA SelfCASH

Architettura di un sistema operativo

In questo manuale sono indicate le procedure per utilizzare correttamente la gestione delle offerte dei fornitori.

Operazioni di input e output in Fortran 90

Panasonic. Analog Pbx System KX-TES 824 (NE) e TEA308 (NE) Chiamate senza restrizioni (PIN,Codice Conto e Cambio COS)

Transcript:

Parallelizzazione Laplace 2D: MPI e MPI+OMP - Cineca - SuperComputing Applications and Innovation Department

Outline Parallelizzazione Laplace 2D Parallelizzazione Laplace 2D - MPI bloccante Parallelizzazione Laplace 2D - MPI non bloccante Parallelizzazione Laplace 2D - MPI+OMP

Laplace 2D: parallelizzazione Algoritmo semplice per mostrare le strategie di parallelizzazione OpenMP, MPI e ibrida MPI+OpenMP OpenMP: sicuramente conveniente almeno per la semplicità di implementazione MPI: necessaria per sfruttare architetture multinodo MPI+OpenMP: per l algoritmo testato non mostra vantaggi particolari esempio solo a scopo didattico! Decomposizione MPI a blocchi 2D: conveniente soprattutto per problemi grandi perché limita l impatto delle comunicazioni decomponendo a blocchi 1D ogni processo invia e riceve 2N dati decomponendo a blocchi 2D ogni processo invia e riceve 4N/ NPROC dati, se il numero di blocchi nelle due direzioni sono uguali

Outline Parallelizzazione Laplace 2D Parallelizzazione Laplace 2D - MPI bloccante Parallelizzazione Laplace 2D - MPI non bloccante Parallelizzazione Laplace 2D - MPI+OMP

Laplace 2D: MPI bloccante Fortran program laplace...dichiarazione DI VARIABILI... call MPI Init(ierr) call MPI Comm rank(mpi COMM WORLD, rank, ierr) call MPI Comm size(mpi COMM WORLD, nprocs, ierr)...input, ALLOCAZIONE, GESTIONE GRIGLIA CARTESIANA E CONDIZIONE INIZIALE... do while (var > tol.and. iter <= maxiter) iter = iter + 1 ; var = 0.d0 ; myvar = 0.d0 buffer_s_rl(1:mymsize_y) = T(1,1:mymsize_y)!--- exchange boundary data with neighbours (right->left) call MPI Sendrecv(buffer s rl,mymsize y,mpi DOUBLE PRECISION,dest rl, tag, & buffer r rl,mymsize y,mpi DOUBLE PRECISION,source rl,tag, & cartesiancomm, status, ierr) if(source_rl >= 0) T(mymsize_x+1,1:mymsize_y) = buffer_r_rl(1:mymsize_y)...scambio ALTRE HALO TRA PROCESSI MPI... do j = 1, mymsize_y do i = 1, mymsize_x Tnew(i,j) = 0.25d0 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) myvar = max(myvar, abs( Tnew(i,j) - T(i,j) )) enddo enddo Tmp =>T; T =>Tnew; Tnew => Tmp; call MPI Allreduce(myvar,var,1,MPI DOUBLE PRECISION,MPI MAX,MPI COMM WORLD,ierr) end do...deallocazione... call MPI Finalize(ierr) end program laplace

Outline Parallelizzazione Laplace 2D Parallelizzazione Laplace 2D - MPI bloccante Parallelizzazione Laplace 2D - MPI non bloccante Parallelizzazione Laplace 2D - MPI+OMP

Laplace 2D: MPI non bloccante Fortran do while (var > tol.and. iter <= maxiter) iter = iter + 1 ; var = 0.d0 ; myvar = 0.d0!--- exchange boundary data with neighbours (right->left) buffer_s_rl(1:mymsize\_y) = T(1,1:mymsize_y) call MPI Isend(buffer s rl, mymsize y, MPI DOUBLE PRECISION, & dest rl, tag, cartesiancomm, requests(1), ierr) if(source_rl >= 0) then call MPI Irecv(buffer r rl, mymsize y, MPI DOUBLE PRECISION, & source rl, tag, cartesiancomm, requests(2), ierr) endif...scambio ALTRE HALO TRA PROCESSI MPI......EVOLVO I PUNTI INTERNI (ESCLUSI I BOUNDARY)... call MPI Waitall(8, requests, MPI STATUSES IGNORE, ierr) if(source_rl >= 0) T(mymsize\_x+1,1:mymsize\_y) = buffer\_r\_rl(1:mymsize\_y)...copio GLI ALTRI 3 BUFFER......EVOLVO I PUNTI DI BOUNDARY... Tmp =>T; T =>Tnew; Tnew => Tmp; call MPI Allreduce(myvar,var,1,MPI DOUBLE PRECISION,MPI MAX,MPI COMM WORLD,ierr) end do

Outline Parallelizzazione Laplace 2D Parallelizzazione Laplace 2D - MPI bloccante Parallelizzazione Laplace 2D - MPI non bloccante Parallelizzazione Laplace 2D - MPI+OMP

Laplace 2D: parall. ibrida I Strategia di parallelizzazione ibrida: ogni blocco MPI esegue operazioni parallelizzate con OpenMP La strategia piú semplice è parallelizzare con OpenMP aprendo e richiudendo la regione parallela direttamente in corrispondenza del loop di aggiornamento di T Le chiamate MPI funzionano normalmente, perché avvengono al di fuori delle regioni multi-threaded funzionano sia MPI THREAD SINGLE che MPI INIT

Laplace 2D: mpi thread single Fortran program laplace...dichiarazione DI VARIABILI... call MPI Init(ierr) call MPI Comm rank(mpi COMM WORLD, rank, ierr) call MPI Comm size(mpi COMM WORLD, nprocs, ierr)...input, ALLOCAZIONE, GESTIONE GRIGLIA CARTESIANA E CONDIZIONE INIZIALE... do while (var > tol.and. iter <= maxiter) iter = iter + 1 ; var = 0.d0 ; myvar = 0.d0 buffer_s_rl(1:mymsize_y) = T(1,1:mymsize_y)!--- exchange boundary data with neighbours (right->left) call MPI Sendrecv(buffer s rl,mymsize y,mpi DOUBLE PRECISION,dest rl, tag, & buffer r rl,mymsize y,mpi DOUBLE PRECISION,source rl,tag, & cartesiancomm, status, ierr) if(source_rl >= 0) T(mymsize_x+1,1:mymsize_y) = buffer_r_rl(1:mymsize_y)...scambio ALTRE HALO TRA PROCESSI MPI...!$omp parallel do reduction(max:myvar) do j = 1, mymsize_y do i = 1, mymsize_x Tnew(i,j) = 0.25d0 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) myvar = max(myvar, abs( Tnew(i,j) - T(i,j) )) enddo enddo!$omp end parallel do Tmp =>T; T =>Tnew; Tnew => Tmp; call MPI Allreduce(myvar,var,1,MPI DOUBLE PRECISION,MPI MAX,MPI COMM WORLD,ierr) end do...deallocazione... call MPI Finalize(ierr) end program laplace

Laplace 2D: parall. ibrida II Allarghiamo la regione parallela OpenMP in modo da includere le chiamate MPI di scambio halo Il vantaggio è la possibilità di sovrapporre calcolo e comunicazioni MPI i master thread eseguono le comunicazioni delle halo e poi aggiornano le variabili che sono vicino al bordo gli altri thread con il master quando ha terminato il punto precedente eseguono i calcoli che non richiedono le halo è opportuno indicare uno scheduling per dare al master meno carico sui nodi interni da aggiornare Con la direttiva master il blocco di codice associato è eseguito solo dal Master Thread, gli altri thread lo saltano senza fermarsi Si dovrebbe usare MPI THREAD FUNNELED...

Laplace 2D: mpi thread funneled Fortran do while (var > tol.and. iter <= maxiter) iter = iter + 1 ; var = 0.d0 ; myvar = 0.d0 ; mastervar = 0.d0!$omp parallel!$omp master...scambio HALO TRA PROCESSI MPI... do j = 1, mymsize_y, mymsize_y-1 ; do i = 1, mymsize_x Tnew(i,j) = 0.25 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) mastervar = max(mastervar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo do j = 1, mymsize_y ; do i = 1, mymsize_x, mymsize_x-1 Tnew(i,j) = 0.25 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) mastervar = max(mastervar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo!$omp end master!$omp do reduction(max:myvar) schedule(dynamic,125) do j = 2, mymsize_y-1 ; do i = 2, mymsize_x-1 Tnew(i,j) = 0.25d0 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) myvar = max(myvar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo!$omp end do!$omp master myvar = max(myvar,mastervar)!$omp end master!$omp end parallel Tmp =>T; T =>Tnew; Tnew => Tmp; call MPI Allreduce(myvar,var,1,MPI DOUBLE PRECISION,MPI MAX,MPI COMM WORLD,ierr) end do

Laplace 2D: parall. ibrida III Per limitare gli overhead OpenMP, è possibile far sì che la regione parallela OpenMP includa anche il ciclo while Analogamente a prima, è necessario utilizzare barriere OpenMP esplicite per gestire il ciclo iterativo È necessaria inoltre una barriera (implicita) dopo MPI Allreduce. Perchè? La chiamata MPI Allreduce all interno della direttiva single richiederebbe almeno MPI THREAD SERIALIZED ma sia livelli di supporto thread inferiori che MPI Init possono funzionare

Laplace 2D: mpi thread serialized Fortran!$omp parallel do while (var > tol.and. iter <= maxiter)!$omp barrier!$omp single iter = iter + 1 ; var = 0.d0 ; myvar = 0.d0 ; mastervar = 0.d0!$omp end single!$omp master...scambio HALO TRA PROCESSI MPI... do j = 1, mymsize_y, mymsize_y-1 ; do i = 1, mymsize_x Tnew(i,j) = 0.25 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) mastervar = max(mastervar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo do j = 1, mymsize_y ; do i = 1, mymsize_x, mymsize_x-1 Tnew(i,j) = 0.25 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) mastervar = max(mastervar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo!$omp end master!$omp do reduction(max:myvar) schedule(dynamic,125) do j = 2, mymsize_y-1 ; do i = 2, mymsize_x-1 Tnew(i,j) = 0.25d0 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) myvar = max(myvar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo!$omp end do!$omp single Tmp =>T; T =>Tnew; Tnew => Tmp;!$omp end single nowait!$omp single myvar = max(myvar,mastervar) call MPI Allreduce(myvar,var,1,MPI DOUBLE PRECISION,MPI MAX,MPI COMM WORLD,ierr)!$omp end single enddo!$omp end parallel

Laplace 2D: parallel. ibrida IV Le 4 fasi di comunicazione sono effettuate ognuna da un thread usando single nowait di fatto le chiamate MPI diventano non bloccanti l aggiornamento delle halo viene posticipato dopo quello dei nodi interni È necessario utilizzare MPI THREAD MULTIPLE più thread che comunicano simultaneamente possono incrementare le performance di bandwidth ma aumentando il supporto thread può aumentare anche l overhead della libreria MPI

Laplace 2D: mpi thread multiple Fortran!$omp parallel do while (var > tol.and. iter <= maxiter)!$omp barrier!$omp single iter = iter + 1 ; var = 0.d0 ; myvar = 0.d0!$omp end single!$omp single!--- exchange boundary data with neighbours (right->left) buffer_s_rl(1:mymsize_y) = T(1,1:mymsize_y) ; call MPI Sendrecv(buffer s rl,...) if(source_rl >= 0) T(mymsize_x+1,1:mymsize_y) = buffer_r_rl(1:mymsize_y)!$omp end single nowait...scambio ALTRE HALO TRA PROCESSI MPI TRA SINGLE NOWAIT...!$omp do reduction(max:myvar) schedule(dynamic,125) do j = 2, mymsize_y-1 ; do i = 2, mymsize_x-1 Tnew(i,j) = 0.25d0 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) myvar = max(myvar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo!$omp end do!$omp do reduction(max:myvar) do j = 1, mymsize_y, mymsize_y-1 ; do i = 1, mymsize_x Tnew(i,j) = 0.25 * ( T(i-1,j) + T(i+1,j) + T(i,j-1) + T(i,j+1) ) myvar = max(myvar, abs( Tnew(i,j) - T(i,j) )) enddo ; enddo!$omp end do...aggiornamento ALTRE HALO...!$omp single Tmp =>T; T =>Tnew; Tnew => Tmp;!$omp end single nowait!$omp single call MPI Allreduce(myvar,var,1,MPI DOUBLE PRECISION,MPI MAX,MPI COMM WORLD,ierr)!$omp end single enddo!$omp end parallel

Scaling Laplace 2D Strong scaling - Griglia 5000 5000-200 iterate Configuriamo l ambiente e completiamo le tabelle module load module load profile/advanced module load intel/cs-xe-2015--binary intelmpi/5.0.1--binary MPI blocking vs non-blocking MPI 1 2 4 8 16 32 Blocking Non-blocking MPI+OMP (MPI THREAD SINGLE version) MPI/OMP 1 2 4 8 16 1 2 4 8 16 32 Attenzione al settaggio dei processi per il caso ibrido e multi-nodo!

Scaling Laplace 2D Strong scaling - Griglia 5000 5000-200 iterate Configuriamo l ambiente e completiamo le tabelle module load module load profile/advanced module load intel/cs-xe-2015--binary intelmpi/5.0.1--binary MPI blocking vs non-blocking MPI 1 2 4 8 16 32 Blocking 9.87 4.91 2.7 1.97 1.78 0.97 Non-blocking 9.86 4.93 2.7 1.84 1.87 0.98 MPI+OMP (MPI THREAD SINGLE version) MPI/OMP 1 2 4 8 16 1 13.3 7.37 4.36 3.9 4.1 2 6.67 3.54 2.19 1.96 2.26 4 3.59 2.08 1.91 1.14-8 2.13 1.95 1.02 - - 16 1.75 1.06 - - - 32 0.99 - - - - Attenzione al settaggio dei processi per il caso ibrido e multi-nodo!

Scaling Laplace 2D / 2 Weak scaling - Griglia 800 800 per processo/thread - 200 iterate MPI blocking vs non-blocking MPI 1 2 4 8 16 32 Blocking Non-blocking MPI+OMP (MPI THREAD SINGLE version) Conviene l ibrido? MPI/OMP 1 2 4 8 16 1 2 4 8 16 32

Scaling Laplace 2D / 2 Weak scaling - Griglia 800 800 per processo/thread - 200 iterate MPI blocking vs non-blocking MPI 1 2 4 8 16 32 Blocking 0.27 0.33 0.34 0.48 0.91 0.95 Non-blocking 0.28 0.28 0.31 0.48 0.91 0.99 MPI+OMP (MPI THREAD SINGLE version) Conviene l ibrido? MPI/OMP 1 2 4 8 16 1 0.36 0.46 0.44 1.1 2.01 2 0.39 0.40 0.64 1.03 2.25 4 0.41 0.63 0.92 1.16-8 0.56 1.11 1.05 - - 16 0.92 1.03 - - - 32 1.0 - - - -