1. Principi di parallelismo
Giovanni Erbacci - g.erbacci@cineca.it
Gruppo Supercalcolo - Dipartimento Sistemi e Tecnologie
1°edizione 7 - 18 luglio 2008 2°edizione 8 – 19 settembre 2008
Principi di parallelismo
Elaborazione
Parallela Elaborazione sequenziale
Pipelining
Elaborazione parallela
Giovanni Erbacci 1
53
2. Principi di parallelismo
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.
Giovanni Erbacci 2
Principi di parallelismo
Calcolatori Paralleli
P M
Giovanni Erbacci 3
54
3. Principi di parallelismo
M M P P
P P M
P P
P
N P
M
M
P P
M M
P P
M
P P
Giovanni Erbacci 4
Principi di parallelismo
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)
Giovanni Erbacci 5
55
4. Principi di parallelismo
Paradigma Message Passing
A B
Giovanni Erbacci 6
Principi di parallelismo
Paradigma Shared Memory
…
…
Giovanni Erbacci 7
56
5. Principi di parallelismo
Esempio: Sort di n numeri
Input: una sequenza di n numeri <a1, a2, a3, … an>
Output: una permutazione <a’1, a’2, a’3, … a’n> degli elementi,
tale che a’1 a’2, a’3 … a’n
#define SWAP(a,b) { int t; t=a; a=b; b=t; }
void SORT( int a[], int n )
{
int i, j;
for(i=0;in;i++)
{
for(j=1;j(n-i);j++)
{
if( a[j-1]a[j] ) SWAP(a[j-1],a[j]);
}
}
}
Giovanni Erbacci 8
Principi di parallelismo
Sort di n numeri / 1
Idea: - si potrebbe dividere il vettore da ordinare in due vettori di n/2
elementi ciascuno,
- ordiare 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])
Giovanni Erbacci 9
57
6. Principi di parallelismo
Complessità
L’ algoritmo di sort richiede n-1 passi:
ogni passo pone un elemento nella sua corretta posizione
il passo imo fa n-I confronti e scambi.
Complessità: O(n2) .
L’ algoritmo di merge opera la fusione facendo n confronti:
Complessità: O(n) .
Giovanni Erbacci 10
Principi di parallelismo
Complessità / 1
10000 (n **2 )/ 2
9000 (n **2 )/ 4 + n
8000 (n **2 )/ 8 + n
n **2
7000
6000
5000
4000
3000
2000
1000
0
0 10 20 30 40 50 60 70 80 90 100
La procedura di sort nella versione modificata viene richiamata 2 volte e
ogni volta ordina n/2 elementi mentre la procedura merge è richiamata
una sola volta ed esegue n confronti.
2
n
2 n2
Nella versione modificata vengono eseguiti 2 +n= + n confronti.
2 4
Giovanni Erbacci 11
58
7. Principi di parallelismo
Sort su k Processori
P0 P1 P2 …….. Pk-1
Giovanni Erbacci 12
Principi di parallelismo
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
Giovanni Erbacci 13
59
8. Principi di parallelismo
Indirizzamento Locale o Globale
s ∑ ∑m
Giovanni Erbacci 14
Principi di parallelismo
Indirizzamento Globale
P0
P1
P2
P3
Giovanni Erbacci 15
60
9. Principi di parallelismo
Indirizzamento Locale
P0
P1
P2
P3
??
Giovanni Erbacci 16
Principi di parallelismo
Filosofia Master Slave e SPMD
main (int argc, char **argv)
{
if (process is to become a controller process)
{
Controller (/* Arguments /*);
}
else
{ PROGRAM
Worker (/* Arguments /*); IF (process is to become a controller process)
} THEN
} CALL Controller (/* Arguments /*)
ELSE
CALL Worker (/* Arguments /*)
ENDIF
END
Giovanni Erbacci 17
61
10. Principi di parallelismo
Paradigmi di Programmazione
Paralela
Linguaggi Procedurali sequenziali (Fortran 90,C,C++)
- Parallelism is not visible to the programmer
- Compiler responsible for parallelism
- Easy to do
- Small improvements in performance
Esplicito
– Parallelism is visible to the programmer
– Difficult to do (right)
– Large improvements in performance
Giovanni Erbacci 18
Principi di parallelismo
Modelli di Parallelismo
Parallelismo sui Dati
Giovanni Erbacci 19
62
11. Principi di parallelismo
Modelli di Parallelismo
Giovanni Erbacci 20
Principi di parallelismo
Gestione del contorno
Parallelismo sui Dati
Giovanni Erbacci 21
63
13. Principi di parallelismo
Functional or Data Parallelism?
Partition by task (functional parallelism)
o each process performs a different function
o identify functions, then data requirements
o commonly programmed with message-passing
Partition by data (data parallelism)
o each process does the same work on a unique piece of data
o data placement is critical
o more scalable than functional parallelism
Giovanni Erbacci 24
Principi di parallelismo
Concetto di Processo
Algoritmo
procedimento logico che occorre seguire per risolvere un determinato
problema
Programma
descrizione dell'algoritmo, mediante un opportuno formalismo (il
linguaggio di programmazione) in modo da poterlo eseguire su di un
particolare elaboratore
Processo sequenziale
sequenza di eventi (esecuzione di operazioni) cui dà luogo l'elaboratore
quando opera sotto il controllo di un particolare programma
entità astratta che identifica l'attività dell'elaboratore relativa all'esecuzione
del programma
Giovanni Erbacci 25
65
14. Principi di parallelismo
Grafo di Precedenza
INIZIO
2*4=8
3+6=9
4-2=2
9*2 = 18
8+18=26
FINE
Giovanni Erbacci 26
Principi di parallelismo
Processi concorrenti
INIZIO
2 * 4 =8 3+6=9 4-2=2
9*2 = 18
8+18=26
FINE
Giovanni Erbacci 27
66
15. Principi di parallelismo
Processi indipendenti
P1 Pi Pj Pn
e 11 e i1 e j1 e n1
e 12 e i2 e j2 e n2
e 13 e i3 e j3 e n3
. . . .
. .. . . . . . . . . .
. . . .
e 1m e im e jm e nm
Giovanni Erbacci 28
Principi di parallelismo
Processi interagenti
Se i processi sono indipendenti non esiste alcuna relazione tra un
generico evento eik del processo Pi ed un evento ejl del processo Pj
(Algoritmi imbarazzantemente paralleli)
Le attivit rappresentate dai processi comunque non sono sempre tra
loro completamente indipendenti, ma si influenzano a vicenda
Spesso i processi durante la loro evoluzione cooperano e interagiscono
scambiandosi informazioni
Fra eventi di processi diversi esistono quindi dei vincoli di precedenza
che occorre rispettare
Nel grafo un vincolo di precedenza viene rappresentato attraverso un
arco che collega un nodo di un processo con un nodo di un processo
diverso
Giovanni Erbacci 29
67
16. Principi di parallelismo
Processi Interagenti
P1 Pi Pj Pn
Un arco dal nodo eij al nodo ekl
significa che il task eij deve e 11 e i1 e j1 e n1
esses completato prima che
inizi il task ekl. Si dice che il task
e 12 e i2 e j2 e n2
ekl dipende dal task eij
I vincoli di precedenza sono e 13 e i3
e j3 e n3
detti vincoli di sincronizzazione
poich indicano che i processi, . . . .
quando arrivano ad un punto di . . . . . . . . . . . .
. . . .
interazione devono
sincronizzarsi cio ordinare i
loro eventi come specificato dal e 1m e im e jm e nm
grafo di precedenza e quindi
dalla logica dell'algoritmo
Giovanni Erbacci 30
Principi di parallelismo
L’accesso concorrente in lettura a una stessa
locazione di memoria non causa problemi.
Tale operazione è ben definita: P1 P2
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 X := X + 1
cioè quando più processi scrivono
simultaneamente sulla stessa locazione di
memoria.
Qual'è il valore
finale di x ?
Giovanni Erbacci 31
68
17. Principi di parallelismo
Il non-determinismo è causato dalle race conditions.
Una race condition avviene quando due istruzioni in tasks concorrenti
accedono la stessa locazione di memoria, almeno una delle quali in
scrittura. Non c’è un un ordine di esecuzione garantito tra gli accessi.
Il problema del non determinismo può essere risolto sincronizzando
l’utilizzo dei dati condivisi.
– Infatti se x=x+1 e x=x+2 sono mutuamente esclusivi allora il valore finale
della variabile x sarà sempre 3.
Le porzini di un programma paralello che richiedono sincronizzazione per
evitare il non determinismo sono chiamate sezioni critiche.
Giovanni Erbacci 32
Principi di parallelismo
Nella programmazione a memoria condivisa occorrono
costrutti per accedere in modo mutualmente esclusivo a
sezioni critiche.
Processor 1: Processor 2:
LOCK (X) LOCK (X)
X=X+1 X=X+2
UNLOCK (X) UNLOCK (X)
Giovanni Erbacci 33
69
18. Principi di parallelismo
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 (x1, P1 ) receive (x2, P0)
……. …….
send (x2, P1) send(x1,P0)
Giovanni Erbacci 34
Principi di parallelismo
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)
Giovanni Erbacci 35
70
19. Principi di parallelismo
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
Giovanni Erbacci 36
71