La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

III corso avanzato di calcolo e grid computing Catania 29 settembre 2009 www.cineca.it Architettura e modelli di programmazione parallela Giovanni Erbacci.

Presentazioni simili


Presentazione sul tema: "III corso avanzato di calcolo e grid computing Catania 29 settembre 2009 www.cineca.it Architettura e modelli di programmazione parallela Giovanni Erbacci."— Transcript della presentazione:

1 III corso avanzato di calcolo e grid computing Catania 29 settembre 2009 www.cineca.it Architettura e modelli di programmazione parallela Giovanni Erbacci Gruppo Supercalcolo – CINECA g.erbacci@cineca.it

2 © CINECA 2006Giovanni Erbacci2 Parallel Computing Cosa si intende per parallel computing?  Parallel computing è una tecnica di programmazione che coinvolge l’utilizzo di più processori che operano insieme su un singolo problema  Il problema globale è suddiviso in parti, ciascuna delle quali viene eseguita da un diverso processore in parallelo. Programma Parallelo programma composto di tasks (processi) che comunicano tra loro per realizzare un obiettivo computazionale complessivo. L'esecuzione di processi di calcolo non sequenziali richiede: - un calcolatore non sequenziale (in grado di eseguire un numero arbitrario di operazioni contemporaneamente) - un linguaggio di programmazione che consenta di descrivere formalmente algoritmi non sequenziali

3 © CINECA 2006Giovanni Erbacci3 Calcolatori Paralleli Un calcolatore parallelo è un sistema costituito da una collezione di processori in grado di comunicare e cooperare per risolvere grandi problemi computazionali in modo veloce. Progettati anche per evitare il von Neumann bottleneck: “The instruction stream is inherently sequential – there is one processing site and all instructions, operands and results must flow through a bottleneck between processors and memory.” PM

4 © CINECA 2006Giovanni Erbacci4 Calcolatori Paralleli / 1 P M P M P M P M P M P M N Sstema a Memoria Distribuita Sistema a Memoria Condivisa M PP PP Network M PP PP Nodo 1 Nodo 5Nodo 6 Nodo 4 Nodo 2Nodo 3 Sstema ibrido

5 © CINECA 2006Giovanni Erbacci5 Paradigmi di Programmazione Parallela Un modello di programmazione è una collezione di astrazioni di programma che fornisce una visione semplificata e trasparente del sistema hardware e software nella sua globalità. I processori di un calcolatore parallelo comunicano tra loro secondo 2 schemi di comunicazione:  Shared memory: I processori comunicano accedendo a variabili condivise  Message-passing: I processori comunicano scambiandosi messaggi Questi schemi identificano altrettanti paradigmi di programmazione parallela: - paradigma a memoria condivisa o ad ambiente globale (Shared memoy) i processi interagiscono esclusivamente operando su risorse comuni - paradigma a memoria locale o ad ambiente locale (Messsage passing) non esistono risorse comuni, i processi gestiscono solo informazioni locali e l'unica modalità di interazione è costituita dallo scambio di messaggi (message passing)

6 © CINECA 2006Giovanni Erbacci6 Paradigma Message Passing Nel paradigma message passing i processi comunicano scambiandosi messaggi Primitive message passing di base: –Send (parameter list) –Receive (parameter list) AB

7 © CINECA 2006Giovanni Erbacci7 Paradigma Shared Memory Nel paradigma shared memory i processi comunicano accedendo a variabili e strutture dati condivise. Primitive shared memory di base: –Read da una variabile condivisa –Write su una variabile condivisa Sistema di Interconnessione … Processori Moduli di Memoria …

8 © CINECA 2006Giovanni Erbacci8 Esempio: Sort di n numeri /* Bubble sort for integers */ #define SWAP(a,b) { int t; t=a; a=b; b=t; } void SORT( int a[], int n ) /* Pre-condition: a contains n items to be sorted */ { int i, j; /* Make n passes through the array */ for(i=0;i<n;i++) { /* From the first element to the end of the unsorted section */ for(j=1;j<(n-i);j++) { /* If adjacent items are out of order, swap them */ if( a[j-1]>a[j] ) SWAP(a[j-1],a[j]); } Input: una sequenza di n numeri Output: una permutazione degli elementi, tale che a’ 1  a’ 2,  a’ 3  …  a’ n Bubble Sort

9 © CINECA 2006Giovanni Erbacci9 Sort di n numeri / 1 Idea: - si potrebbe dividere il vettore da ordinare in due vettori di n/2 elementi ciascuno, - ordinare i due vettori separatamente - richiamare una procedura di merge per ricomporre i due vettori ordinati precedentemente SORT(a[0 : n/2-1]) SORT(a[n/2 : n-1]) MERGE(a[0 : n/2-1], a[n/2 : n-1])

10 © CINECA 2006Giovanni Erbacci10 Sort su k Processori P0P0 P1P1 P2P2 ……..P k-1 Step 0 Step 2 Step 1 Step log 2 K

11 © CINECA 2006Giovanni Erbacci11 Problema Lettura dati da ordinare SORT(a[0 : n/2-1]) SORT(a[n/2 : n-1]) MERGE(a[0 : n/2-1], a[n/2 : n-1]) Scrittura del vettore ordinato Nella programmazione parallela occorre affrontare problematiche che non si presentano con la programmazione sequenziale. Occorrono decidere: · quali parti di codice costituiscono le sezioni parallele · quando iniziare l’esecuzione delle diverse sezioni parallele · quando terminare l’esecuzione delle sezioni parallele · quando e come effettuare la comunicazione fra le entità parallele. quando effettuare la sincronizzazione fra le entità parallele Poi occorrono gli strumenti per implementare questi aspetti

12 © CINECA 2006Giovanni Erbacci12 Indirizzamento Locale o Globale Con il modello di programmazione Shared Memory, si fa affidamento sull’indirizzamento globale della memoria Con il modello a memoria distribuita è possibile solo la gestione locale della memoria, e quindi si può gestire solo uno spazio di indirizzamento locale. Esempio: calcolare la somma degli elementi di una matrice M[n, n] s =  i  j m ij

13 © CINECA 2006Giovanni Erbacci13 Indirizzamento Globale Si alloca la matrice M[n, n] nella memoria comune e tutti i processori che intervengono nella computazione possono indirizzare tutti gli elementi di M. P0P0 P3P3 P2P2 P1P1 M s3s3 s2s2 s1s1 s0s0 S Memoria M(i,j) i = 1, n, j = 1,m Temp = M(857,760) + M(321, 251)

14 © CINECA 2006Giovanni Erbacci14 Indirizzamento Locale Ogni processore vede solo la sua memoria locale e vi alloca una fetta della matrice M[n, n] P0P0 P3P3 P2P2 P1P1 s1s1 s0s0 M(i,j) i = 1, n/k, j = 1,m s3s3 s2s2 ?? S Temp = M(857,760) + M(321, 251)   Temp = M(107,760)P 3 + M(71, 251) P 1 (N = 1000, 4 proc)

15 © CINECA 2006Giovanni Erbacci15 Filosofia Master Slave e SPMD Master / Slave Un singolo processo (il Master) controlla il lavoro svolto dagli altri processi (slaves, Workers). Questi possono eseguire lo stesso programma o programmi differenti Single Program Multiple Data Ogni processore esegue la stessa copia del programma il flusso di esecuzione su ogni processore varia in funzione dell’ambiente locale (dati, numero di processore ecc.) Si può emulare la filosofia master /slave tipica di alcuni ambienti message passing. C main (int argc, char **argv) { if (process is to become a controller process) { Controller (/* Arguments /*); } else { Worker (/* Arguments /*); } Fortran PROGRAM IF (process is to become a controller process) THEN CALL Controller (/* Arguments /*) ELSE CALL Worker (/* Arguments /*) ENDIF END

16 © CINECA 2006Giovanni Erbacci16 Paradigmi di Programmazione Paralela - Paradigma a memoria condivisa (Open-MP) - Paradigma Message Passing (PVM, MPI, …) - Paradigma Data Passing (Shmem, One Side Communication) - Paradigma Data Parallel (HPF, HPF-Craft) Linguaggi Procedurali sequenziali (Fortran 90,C,C++) + API (Direttive al Compilatore) Si tende a favorire un Parallelismo implicito - Parallelism is not visible to the programmer - Compiler responsible for parallelism - Easy to do - Small improvements in performance Linguaggi Procedurali sequenziali (Fortran 90, C, C++) + API (Chiamate a Librerie) Parallelismo Esplicito  Parallelism is visible to the programmer  Difficult to do (right)  Large improvements in performance Schema SPMD oppure Fork/Join

17 © CINECA 2006Giovanni Erbacci17 Modelli di Parallelismo Parallelismo sui Dati Partizionamento dei dati (data parallelism) Ogni processo esegue lo stesso lavoro su un sottoinsieme dei dati - Il poizionamento dei dati (“data placement”) è critico - Più scalabile del parallelismo funczionale - Programmazione in message-passing o HPF - Problema della gestione del contorno - Bilanciamento del carico (in alcuni casi)

18 © CINECA 2006Giovanni Erbacci18 Modelli di Parallelismo Parallelismo sul Controllo (Parallelismo Funzionale) vengono distribuite le funzioni Partizionamento by task Ogni processo esegue una diversa "funzione“: Identificare le funzioni, e poi i data requirements Bilanciamento del carico

19 © CINECA 2006Giovanni Erbacci19 Gestione del contorno Parallelismo sui Dati

20 © CINECA 2006Giovanni Erbacci20 Bilanciamento del carico t P1P1 P0P0 P2P2 t P1P1 P2P2 P0P0 P4P4 P3P3

21 © CINECA 2006Giovanni Erbacci21 Bilanciamento del carico / 1 t P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 t P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 P 8 P 9 P 10 P 11 P 12 P 13 P 14 P 15

22 © CINECA 2006Giovanni Erbacci22 Note sul modello Shared Memory: Accesso a variabili condivise L’accesso concorrente in lettura a una stessa locazione di memoria non causa problemi. Tale operazione è ben definita: concettualmente ogni processore fa una copia del contenuto della locazione di memoria e la memorizza in un proprio registro. I problemi si possono manifestare quando si verifica un accesso concorrente in scrittura cioè quando più processi scrivono simultaneamente sulla stessa locazione di memoria. Due processi P1 e P2 condividono una variabile x che entrambi devono incrementare Qual'è il valore finale di x ? P1 legge il valore corrente di x P2 legge il valore corrente di x P1 incrementa di 1 il valore letto P2 incrementa di 1 il valore letto P1 memorizza il nuovo valore P2 memorizza il nuovo valore Il programmatore, il linguaggio di programmazione e/o l’architettura devono fornire strumenti per risolvere i conflitti

23 © CINECA 2006Giovanni Erbacci23 Note sul modello Shared Memory:Deadlock Situazione in cui uno o pi ù processi rimangono indefinitamente bloccati perch è non possono verificarsi le condizioni necessarie per il loro proseguimento Un gruppo di processi entra in deadlock quando tutti i processi del gruppo attendono un evento (acquisizione o rilascio di risorse) che può essere causato solo da un altro dei processi in attesa Processo P0 Processo P1 receive (x 1, P1 ) ……. send (x 2, P1 ) receive (x 2, P0 ) ……. send(x 1,P0 ) Il deadlock è detto anche blocco critico o stallo

24 © CINECA 2006Giovanni Erbacci24 Linguaggi per la programmazione parallela: requisiti Costrutti per dichiarare entit à parallele: moduli di programma che devono essere eseguiti come processi sequenziali distinti pi ù processi possono svolgere lo stesso modulo di programma, operando su dati differenti Costrutti per esprimere la concorrenza strumenti per specificare l'attivazione di un processo (quando deve iniziare l'esecuzione del modulo di programma che corrisponde a quel processo) strumenti per specificare la terminazione di un processo Costrutti per specificere le interazioni dinamiche fra processi - costrutti linguistici per specificare la sincronizzazione e la comunicazione fra i processi che devono cooperare - costrutti linguistici per garantire la mutua esclusione fra processi che competono (per il modello a memoria condivisa)

25 © CINECA 2006Giovanni Erbacci25 Parallelizzazione: Obiettivi e decisioni Obiettivi (ideali) Assicurare lo speed-up e la Scalabilità:  Assegnare a ciascun processo una quantità unica di lavoro  Assegnare a ogni processo i dati necessari per il lavoro da svolgere  Minimizzare la replica dei dati e della computazione  Minimizzare la comunicazione tra i processi  Bilanciare il work load Tenere ben in mente che: - Per un problema esistono diverse soluzioni parallele - La miglior soluzione parallela non sempre deriva dalla miglior soluzione scalare


Scaricare ppt "III corso avanzato di calcolo e grid computing Catania 29 settembre 2009 www.cineca.it Architettura e modelli di programmazione parallela Giovanni Erbacci."

Presentazioni simili


Annunci Google