Parallel Computing. Architetture Hardware e Software per l elaborazione parallela. 2 Giugno Lorenzo Muttoni Anno Accademico

Documenti analoghi
Alcuni strumenti per lo sviluppo di software su architetture MIMD

Alcuni strumenti per lo sviluppo di software su architetture MIMD

Programma della 1 sessione di laboratorio

Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017 Palermo 31 Luglio - 4 Agosto 2017

MPI Quick Refresh. Super Computing Applications and Innovation Department. Courses Edition 2017

Modelli di programmazione parallela

Alcuni strumenti per lo sviluppo di software su architetture MIMD

MPI in dettaglio. Chi ha definito MPI. Salvatore Orlando. CALCOLO PARALLELO - S. Orlando. CALCOLO PARALLELO - S. Orlando

Architetture della memoria

Classificazione delle Architetture Parallele

MPI. MPI e' il risultato di un notevole sforzo di numerosi individui e gruppi in un periodo di 2 anni, tra il 1992 ed il 1994

Alcuni strumenti per lo sviluppo di software su architetture MIMD

SISD - Single Instruction Single Data. MISD- Multiple Instructions Single Data. SIMD Single Instruction Multiple Data. Architetture di processori

Calcolo parallelo. Una sola CPU (o un solo core), per quanto potenti, non sono sufficienti o richiederebbero tempi lunghissimi.

Impianti Informatici. Grid computing e architetture parallele

Compiti di un ambiente sw per il C.D. NetSolve: un ambiente per il calcolo distribuito. gestire gli accessi alle risorse. gestire l eterogeneita

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

Primi Programmi con MPI 1

MPI è una libreria che comprende:

Introduzione al Many/Multi-core Computing

Design of Parallel Algorithm

Calcolo parallelo. Una sola CPU (o un solo core), per quanto potenti, non sono sufficienti o richiederebbero tempi lunghissimi

Somma di un array di N numeri in MPI

Sistemi a processori multipli

Le topologie. Message Passing Interface MPI Parte 2. Topologie MPI. Esempi di topologie. Definizione: topologia. Laura Antonelli

Laboratorio di Calcolo Parallelo

A.d'Alessio. Calcolo Parallelo. Esempi di topologie

Introduzione al Calcolo Parallelo Algoritmi e Calcolo Parallelo. Daniele Loiacono

Calcolo Parallelo con MPI (2 parte)

Introduzione al Calcolo Parallelo Algoritmi e Calcolo Parallelo. Daniele Loiacono

Esercizi Calcolo Parallelo Algoritmi, Strutture Dati e Calcolo Parallelo. Daniele Loiacono

Come aumentare le prestazioni Cenni alle architetture avanzate

Laboratorio di Informatica. Introduzione

UNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II

Sommario. Elementi di Parallelismo. Misura delle prestazioni parallele. Tecniche di partizionamento. Load Balancing. Comunicazioni

Calcolo parallelo e sistemi multiprocessore

Prodotto Matrice - Vettore in MPI II Strategia

Corso di Calcolatori Elettronici I

ACSO Programmazione di Sistema e Concorrente

Prodotto Matrice - Vettore in MPI - III Strategia

Presentazione del corso

Sistemi Operativi (M. Cesati)

Università degli Studi di Ferrara

Estensioni all architettura di Von Neumann

Università degli Studi di Napoli Parthenope. Corso di Calcolo Parallelo e Distribuito. Virginia Bellino Matr. 108/1570

Programmi per calcolo parallelo. Calcolo parallelo. Esempi di calcolo parallelo. Misure di efficienza. Fondamenti di Informatica

il tipo di parallelismo dipende dal grado di cooperazione

Linguaggi di programmazione

Spazio di indirizzamento virtuale

La vera difficoltà non è progettare architetture

Introduzione ai thread

Strutture di Controllo Iterative: Istruzione FOR

Esercizi MPI. Algoritmi e Calcolo Parallelo. Daniele Loiacono

Introduzione al Calcolo Parallelo Algoritmi e Calcolo Parallelo. Daniele Loiacono

Nota: Si consideri il valore di pi greco.

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Dichiarazioni e tipi predefiniti nel linguaggio C

Parte VIII. Architetture Parallele

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Pag. 1. La formalizzazione dell informazione: Dati e Diagrammi di Flusso. Codifica degli algoritmi

Elenco sezioni libro di testo Ed. 5 Tra parentesi le corrispondenze per l'ed. 7.

Fondamenti di Informatica

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Introduzione a MPI Algoritmi e Calcolo Parallelo. Daniele Loiacono

Il linguaggio C. Puntatori e dintorni

sistemi distribuiti Sistemi distribuiti - architetture varie classificazioni classificazione di Flynn (1972)

Strutture di Controllo Iterative: Istruzione FOR

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

Laboratorio di Architettura degli Elaboratori LabArch 2006 Secondo Quadimestre, a.a Docente: H. Muccini

Studio degli algoritmi

C: panoramica. Violetta Lonati

Introduzione. Laboratorio di Calcolo Corso di Laurea in Fisica. Università degli Studi di Roma La Sapienza

Architettura dell elaboratore

Architettura dell elaboratore

Sistemi Operativi (M. Cesati)

Perché il linguaggio C?

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Addendum alle chiamate di sistema per la gestione processi. E Mumolo

Università degli Studi di Ferrara

Istruzioni iterative (o cicliche)

Università degli Studi di Ferrara

PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii

Funzioni come parametri

Architettura degli Elaboratori

Introduzione al Calcolo Scientifico

Metriche e Strumenti. di Valutazione delle Prestazioni. nel Calcolo Parallelo. (cenni) Speedup

Informatica (A-K) 5. Algoritmi e pseudocodifica

Criteri da tenere a mente

Dati due punti sul piano calcolare la loro distanza

La CPU e la Memoria. Sistemi e Tecnologie Informatiche 1. Struttura del computer. Sistemi e Tecnologie Informatiche 2

Sistemi Operativi: Concetti Introduttivi

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

File. Molto astratta: file ha un nome (ex. Pippo.c), ed altre caratteristiche (dimensione, tipo, etc). Operazioni: copiare, cancellare, eseguire..

Transcript:

Parallel Computing Architetture Hardware e Software per l elaborazione parallela 2 Giugno 2004 Lorenzo Muttoni Anno Accademico 2003-2004

Indice Introduzione Parametri: Speedup ed Efficienza Modelli Hardware Tipologie di Elaborazione Parallela Paradigmi di programmazione MPI: Message Passing Interface Esempi di programmazione MPI Lorenzo Muttoni Impianti Informatici - A.A. 03-04 2

Parallel Computing: perché? Richieste di potenza di calcolo sempre crescente: Simulazioni CFD, dinamica molecolare, strutture statiche, crash test, Weather forecasting Movie & Special Effects Riduzione costi/time-to-market (evitare la fase di prototipazione) Lorenzo Muttoni Impianti Informatici - A.A. 03-04 3

Parallel Computing: problemi Efficienza Accesso concorrente alle risorse Cache coherence Parallelizzazione del problema Scomposizione del dominio Lorenzo Muttoni Impianti Informatici - A.A. 03-04 4

Parametri Speedup: parametro che indica l incremento di prestazioni al crescere della potenza di calcolo (numero di processori) impiegata. Viene definito come: S p = T 1 /T p Efficienza: indice che esprime la capacità di sfruttare la potenza di calcolo: E p = Lorenzo Muttoni Impianti Informatici - A.A. 03-04 5 S p p

Modelli hardware Si possono classificare le macchine parallele in base al modo in cui è organizzata la memoria: A Memoria distribuita (es. Intel Paragon, IBM SPx, cluster) A memoria condivisa (es. SGI Power Challenge, Cray T3D) Entrambe i tipi di architetture possono essere usati con i modelli software SIMD e MIMD (si veda più avanti). Lorenzo Muttoni Impianti Informatici - A.A. 03-04 6

Legge di Amdahl (1967) Tempo con 1 processore: T 1 = T s + T p Tempo con n processori: Speedup: T n = T s +T p /n Tempo per l esecuzione della frazione seriale del programma. Tempo per l esecuzione della frazione parallela. Frazione seriale: Legge di Amdahl: S(n) = T 1 /T n f s = T s /(T s + T p ) Sn ( ) n = n f + (1 f ) Lorenzo Muttoni Impianti Informatici - A.A. 03-04 7 s s

Legge di Amdahl (2) Dimostrazione Normalizzo: T 1 =1 T n = f s + f p /n 1 1 n S = = = = n f 1 f nf + 1 f f + p f + s s s s s n n n n = = f ( n 1) + 1 n f + (1 f ) s s s Lorenzo Muttoni Impianti Informatici - A.A. 03-04 8

Legge di Amdahl (3) S 1/f s Speedup Ideale: f s =0 Speedup reale 1 Dovuto al fatto che non è vero che f p =T p /n. Ci sono le comunicazioni Tp Tn = Ts + + Klog 2 n n Num. Proc. Lorenzo Muttoni Impianti Informatici - A.A. 03-04 9

Legge di Amdahl (4): esempio Un programma che viene eseguito in 100 s su un processore singolo, ha una frazione sequenziale dell 1%. In quanto tempo viene eseguito su 10 processori? S = 10 / (.1 +.99) = 10/1.09 = 9.174 T(n) = T(1)/S = 100/9.174 = 10.9 s E = 9.174/10 = 91.7% E su 100 processori? S = 100/(1 +.99) = 100/1.99 = 50.25 T(N) = T(1)/S = 100/50.25 = 1.99 s E = 50.25/100 = 50% Lorenzo Muttoni Impianti Informatici - A.A. 03-04 10

Lo speedup scalato La dimensione del problema, in genere, cresce all aumentare del numero di processori. T(k,n) = tempo di esecuzione di un sistema con n processori per risolvere un problema di complessità k. Speedup scalato: Sn ( ) = T(1, k( n)) Tnkn (, ( )) Lorenzo Muttoni Impianti Informatici - A.A. 03-04 11

Modelli hardware (2) sfumature Memoria Virtualmente Distribuita Memoria Centrale Memoria Distribuita Memoria Virtualmente Condivisa Lorenzo Muttoni Impianti Informatici - A.A. 03-04 12

Modelli hardware (3): Memoria condivisa Proc Proc Proc Proc Cache Cache Cache Cache Single bus Memoria Non esistono percorsi preferenziali di accesso alla memoria. Vengono dette SMP (Symmetric MultiProcessors). Sono possibili 2 implementazioni: UMA (Uniform Memory Access) NUMA (Non Uniform Memory Access) Il collo di bottiglia è il BUS: non si possono mettere troppi processori (non più di 16) Esiste problema di coerenza delle cache Lorenzo Muttoni Impianti Informatici - A.A. 03-04 13

Multiprocessors Cache Coherency La possibilità che ogni processore lavori su dati differenti comporta problemi di coerenza delle cache (di ogni processore). L algoritmo più utilizzato per gestire la cache coherency è detto snooping algorithm (per sistemi a singolo bus). Letture multiple dello stesso dato non creano problemi; è importante, invece, garantire le coerenza in fase di scrittura. Lorenzo Muttoni Impianti Informatici - A.A. 03-04 14

Multiprocessors Cache Coherency (2) Processor Processor Processor Snoop Tag Cache tag and data Snoop Tag Cache tag and data Snoop Tag Cache tag and data Single bus Memory I/O Lorenzo Muttoni Impianti Informatici - A.A. 03-04 15

Multiprocessors Cache Coherency (3) Snooping algorithm Quando un processore aggiorna un dato shared, per prima cosa deve invalidare tutte le copie presenti nelle cache. Esistono due metodi: Write Invalidate: prima di aggiornare il dato (nella cache locale) viene mandato un segnale di invalidate e NON si aggiorna la memoria. Se altri processori hanno bisogno del dato, lo si scrive in memoria e gli altri andranno a leggere il nuovo dato. Write Update: invece di invalidare le cache, si aggiornano direttamente mandando il nuovo dato su bus; chi possiede quello vecchio, lo aggiorna. Anche chiamato write-broadcast. E molto band consuming. Lorenzo Muttoni Impianti Informatici - A.A. 03-04 16

Modelli hardware (4): Memoria distribuita Memoria Memoria Memoria Memoria Proc Proc Proc Proc Network Ogni processore ha il suo spazio di indirizzamento privato L utente deve gestire in maniera esplicita la distribuzione dei dati e la loro allocazione Lorenzo Muttoni Impianti Informatici - A.A. 03-04 17

Tipologie di elaborazione parallela [SISD]: elaborazione sequenziale SIMD: Single Instruction, Multiple Data. Calcolatori vettoriali: una sola Control Unit, un solo clock MIMD: Multiple Instructions, Multiple Data. Ogni processore esegue codice indipendente dagli altri SPMD: Single Program, Multiple Data. Stile di programmazione delle macchine MIMD: ogni processore hai i suoi dati ma tutti eseguono lo stesso programma Lorenzo Muttoni Impianti Informatici - A.A. 03-04 18

Esempi di programmazione I seguenti esempi si riferiscono a macchine a memoria condivisa (es. SMP) Sono presentati in un linguaggio, inesistente, C-like Il problema, elementare, che si vuole risolvere è la somma di N interi con nproc processori Lorenzo Muttoni Impianti Informatici - A.A. 03-04 19

Esempi: Soluzione sequenziale #define N 100000 int a[n]; int i, s; //i: contatore, s: somma... void main(){ s=0; for (i=0; i<n; i++) s = s + a[i];... } Lorenzo Muttoni Impianti Informatici - A.A. 03-04 20

Esempi: Soluzione parallela #define N 100000 #define M (N/nproc) share int a[n]; share int par_sum[nproc]; int i, s;... void main(){... s=0; contiene le somme parziali di ciascun processore ogni processore ha una copia di queste variabili for (i = M*IDproc; i < M*(IDproc+1); i++) s = s+a[i]; par_sum[idproc]=s; Come sommo i risultati parziali? Lorenzo Muttoni Impianti Informatici - A.A. 03-04 21

Esempi: Soluzione parallela (2) a) Soluzione intuitiva (poco efficiente): il processore 0 (master) esegue tutte le somme parziali Per evitare che cominci a sommare i parziali prima synch(); che gli altri abbiano finito di calcolarli if (IDproc==0){ for (i=1; i<nproc; i++) s=s+sum[i]; } Lorenzo Muttoni Impianti Informatici - A.A. 03-04 22

Esempi: Soluzione parallela (3) b) Soluzione ottima. Si parallelizza anche la somma parziale. Questo approccio funziona in modo ottimo se il numero di elementi da sommare è una potenza di 2 half log 2 N somme invece di N Applico questo passaggio iterativamente Lorenzo Muttoni Impianti Informatici - A.A. 03-04 23

Esempi: Soluzione parallela (4) } int half= nproc/2; while(half>0){ synch(); if (IDproc<half) } devo sincronizzare ogni ramo sum[idproc]=sum[idproc] + sum[idproc + half]; half=half/2; Lorenzo Muttoni Impianti Informatici - A.A. 03-04 24

Paradigmi a memoria condivisa HPF (High Performance Fortran) Prima versione rilasciata nel 1994 HPF è Fortran 90 + lo statement FORALL e le direttive di decomposizione dei dati Approccio SPMD. Linguaggio di alto livello, no message passing. Esempio di forall: forall(i=1:m:2,j=1:n:3) a(i,j) = b(i,j)*j + (i- 1)*m Corrisponde a cicli do annidati. Il compilatore li parallelizza automaticamente Esistono direttive per gestire situazioni di dipendenza degli indici dai cicli OpenMP: Insieme di direttive per standardizzare la programmazione di macchine a memoria condivisa (fine e coarse grained parallelism) Lorenzo Muttoni Impianti Informatici - A.A. 03-04 25

Paradigmi a Skeleton Skeleton: insieme di strutture/modelli tipici che si possono riscontrare nelle applicazioni parallele Esempi di skeleton sono: Pipeline: si ottiene scomponendo una funzione in sotto funzini consecutive implementabili in maniera indipendente (es. f(g(x)) con x vettore) Farm: frazionamento del problema in sottoproblemi che vengono affidati da un master a dei worker Loop: parallelizzazione dei cicli Sequenziale, Lorenzo Muttoni Impianti Informatici - A.A. 03-04 26

Esempio di Paradigmi a Skeleton: la pipeline x4 s1 s2 s3 s3(s2(s1(x))) Tempo impiegato per un esecuzione parallela x3 x2 x1 Tempo impiegato per un esecuzione sequenziale s1 s2 s3 Tempo impiegato per eseguire un singolo task x1 x2 x3 x4 Esempio di Codice: pipe nome_modulo in(inlist) out(outlist) < chiamata dello stadio 1 >... < chiamata dello stadio n > end pipe Lorenzo Muttoni Impianti Informatici - A.A. 03-04 27

Paradigmi a Memoria Distribuita PVM (Parallel Virtual Machine) Fornisce il supporto per un OS distribuito Controllo della generazione di processi da parte dell utente Molto utilizzato ancora oggi Costituito da un insieme di librerie (da includere nel codice dell applicazione) e da un supporto run-time (demoni). MPI (Message Passing Interface): approfondito nel seguito Lorenzo Muttoni Impianti Informatici - A.A. 03-04 28

MPI Message Passing Interface È un insieme di specifiche (API): Modello message-passing Non è un set di specifiche per i compilatori Non è un prodotto Per computer paralleli, cluster e reti eterogenee Full-featured Progettato per consentire (unleash?) lo sviluppo di librerie di software parallelo Progettato per fornire accesso a caratteristiche avanzate delle macchine parallele per: Utenti finali Sviluppatori di librerie Sviluppatori di programmi Lorenzo Muttoni Impianti Informatici - A.A. 03-04 29

MPI (2) Specifiche rilasciate nel 1994 (MPI 1.0) dal MPI Forum costituito da un ampia rappresentanza di produttori hw, sw e sviluppatori. Indipendente dalla piattaforma hw/sw su cui si appoggia. Linguaggi ospiti: Fortran, C, C++, Esistono implementazioni open source e proprietarie. Versione oggi utilizzata: MPI 2.0. MPI è principalmente per SPMD/MIMD. (HPF è un esempio di interfaccia SIMD) Lorenzo Muttoni Impianti Informatici - A.A. 03-04 30

MPI: i device MPI è solo un insieme di API. Quindi l implementazione sulla specifica architettura deve essere lasciata a software di livello più basso: i device I device implementano le specifiche MPI sulle varie architetture (NEC, Cray, cluster, ) Spesso sono realizzati da sistemi di comunicazione proprietari precedenti ad MPI Per i cluster il device più utilizzato è p4 (MPICH) Lorenzo Muttoni Impianti Informatici - A.A. 03-04 31

MPI: caratteristiche Possibilità di definire sottogruppi di processori (communicators) Programmi portabili Comunicazioni Point-to-point (bloccanti e non) e collettive (broadcast e reduce) Caratteristiche non previste e non supportate dalle specifiche MPI: process management remote memory transfers active messages threads virtual shared memory Lorenzo Muttoni Impianti Informatici - A.A. 03-04 32

Quando usare MPI Necessità di realizzare un programma parallelo portabile Sviluppo di una libreria parallela Problema irregolare o dynamic data Relazioni che non si adattano ad un modello data parallel e quando NON usare MPI: Si può usare HPF o una versione parallela di Fortran 90 Non serve il parallelismo ;-) Si possono usare librerie (magari scritte in MPI). Lorenzo Muttoni Impianti Informatici - A.A. 03-04 33

MPI: le 6 funzioni di base MPI_Init: la prima istruzione MPI: inizializza il supporto MPI_Finalize: l ultima istruzione che esce dall ambiente MPI (libera meoria, ) MPI_Send: invia un messaggio AD un processo MPI_Recv: riceve un messaggio DA un processo MPI_Comm_size: numero di processi che appartengono ad un comunicatore MPI_Comm_rank: identificativo (integer) di un processo all interno di un comunicatore Lorenzo Muttoni Impianti Informatici - A.A. 03-04 34

Struttura tipica di un programma MPI 1. #include delle librerie MPI 2. MPI_INIT(); 3. [definizione del communicator] 4. get del procid (detto rank) 5. get del communicator size 6. Send/Receive,, Broadcast/Reduce 7. MPI_Finalize(); Lorenzo Muttoni Impianti Informatici - A.A. 03-04 35

Esempio banale #include <stdio.h> #include "mpi.h" int main(int argc, char **argv) { int MyID; char msg[20]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &MyID); if (MyID == 0) { printf ("I am master. I am sending the message.\n\n"); Lorenzo Muttoni Impianti Informatici - A.A. 03-04 36

Esempio banale (2) strcpy(msg,"hello World!"); MPI_Send(msg, 13, MPI_CHAR, 1, 100, MPI_COMM_WORLD); } else { printf ("I am slave. I am receiving the message.\n"); MPI_Recv(msg, 13, MPI_CHAR, 0, 100, MPI_COMM_WORLD, &status); printf ("The message is: %s\n", msg); } MPI_Finalize(); } Lorenzo Muttoni Impianti Informatici - A.A. 03-04 37

2 Esempio: calcolo di pi-greco in parallelo 1 0 4 1+ x 2 dx = 4arctan() x =π 1 0 Per eseguire l integrale, l intervallo 0-1 viene diviso in n parti. Ogni processore calcola il suo pezzo Più grande è n e maggiore è l accuratezza: metodo pessimo ma utile a scopo didattico. Lorenzo Muttoni Impianti Informatici - A.A. 03-04 38

Esempio: pi-greco #include "mpi.h" #include <stdio.h> #include <math.h> int main(int argc,char *argv[]){ int done = 0, n, myid, numprocs, i; double PI25DT = 3.141592653589793238462643; double mypi, pi, h, sum, x; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); Lorenzo Muttoni Impianti Informatici - A.A. 03-04 39

Esempio: pi-greco (2) MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); while (1){ if (myid == 0){ printf("enter the number of intervals: (0 quits) "); scanf("%d",&n); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) break; else{ Lorenzo Muttoni Impianti Informatici - A.A. 03-04 40

Esempio: pi-greco (3) h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs){ x = h * ((double)i - 0.5); sum += (4.0 / (1.0 + x*x)); } mypi = h * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0){ printf("pi is approximately %.16f, Error is %.16f\n",pi, fabs(pi - PI25DT)); } \\else } \\while MPI_Finalize(); return 0; } \\ main Lorenzo Muttoni Impianti Informatici - A.A. 03-04 41