Sei sulla pagina 1di 49

Calcolo Parallelo e Distribuito

a.a. 2019-2020

Somma di N numeri
Su architetture MIMD

Docente: Prof. L. Marcellino


Tutor: Dott. P. De Luca
Overview

2
 Dalla prossima settimana faremo lezione dalle
14:00 alle 15:30 sempre il mercoledì e il giovedì

 Organizzazione del laboratorio: ognuno di voi


dovrebbe poter utilizzare un pc col sistema
operativo linux (su cui è istallato il compilatore gcc)

 Proveremo a vedere insieme come usare la


piattaforma AWS (Amazon Web Service)
3
PROBLEMA:
Calcolo della somma di N
numeri

a0+a1+…+aN-1

su un calcolatore parallelo
tipo MIMD

4
MIMD
Calcolatori MIMD a Calcolatori MIMD a
memoria condivisa memoria distribuita
(shared-memory) (distributed-memory)

CPU
CPU CPU
CPU CPU
CPU MEM MEM MEM
11 22 N
N

CPU CPU CPU


1 2 N

MEMORIA
MEMORIA

5
Somma di N numeri
Su un calcolatore monoprocessore la somma è
calcolata eseguendo le N-1 addizioni una per volta
secondo un ordine prestabilito

sumtot := a0
sumtot := sumtot + a1
sumtot := sumtot + a2

sumtot := sumtot + aN-1

6
Somma di N numeri
Su un calcolatore monoprocessore la somma è
calcolata eseguendo le N-1 addizioni una per volta
secondo un ordine prestabilito
begin
sumtot:= a0;
for i=1 to N-1 do
sumtot:= sumtot+ai ;
endfor
end

Qual è
l’ALGORITMO PARALLELO?
7
CALCOLO PARALLELO
Decomporre un problema di dimensione N
in P sottoproblemi di dimensione N/P
e risolverli contemporaneamente
su più calcolatori

N/P N/P

N
N/P N/P

8
Esempio: N=16, p=4
a0 +…+ a3 + a4 +…+ a7 + a8 +…+ a11 + ..a15

s0 s1 s2 s3

s0+s1+s2+s3

9
PROBLEMA:
Calcolo della somma di N
numeri
a0+a1+…+aN-1

su un calcolatore
parallelo MEM MEM MEM

tipo MIMD con p


processori CPU CPU CPU
1 2 N
A MEMORIA
DISTRIBUITA 10
IDEA
Suddividere la somma in somme parziali
ed assegnare ciascuna somma parziale
ad un processore
Somma totale
s0 s1 s2 s3

s0 s1 s2 s3

Somme parziali
11
IDEA
Le somme parziali devono poi essere
combinate in modo opportuno per
ottenere la somma totale
Somma totale
s0 s1 s2 s3

s0 s1 s2 s3

Somme parziali

12
Somma - MIMD Distributed Memory

Esempio: N=16, p=4

a0 a4 a8 a12
a1 a5 a9 a13 Memoria
a2 a6 a10 a14 locale
a3 a7 a11 a15

CPU CPU CPU CPU


P0 P1 P2 P3

Distribuzione degli addendi fra i processori.


13
Somma - MIMD Distributed Memory
Esempio: N=16, p=4

a0 a4 a8 a12
a1 a5 a9 a13 Memoria
a2 a6 a10 a14 locale
a3 a7 a11 a15

CPU CPU CPU CPU


P0 P1 P2 P3

Concorrentemente tutti i processori


Calcolano le somme parziali
14
Somma - MIMD Distributed Memory

Esempio: N=16, p=4

a0 a4 a8 a12
a1 a5 a9 a13 Memoria
Somme
a2 a6 a10 a14
parziali a3 a7 a11 a15
locale
s0 s1 s2 s3

CPU CPU CPU CPU


P0 P1 P2 P3

Come calcolare la somma totale?


15
I strategia p=4 Calcolo
somme
P0 P1 P2 P3
parziali
s0 s1 s2 s3

I passo
P1 spedisce s1 a P0
sumtot=s0 + s1

II passo
P2 spedisce s1 a P0
sumtot=sumtot + s2

III passo
P3 spedisce s3 a P0
sumtot=sumtot + s3

16
I strategia

Ogni processore
•calcola la propria somma parziale

Ad ogni passo
• ciascun processore invia tale valore ad un unico
processore prestabilito

Tale processore contiene la somma totale.


Operazioni concorrenti

17
Calcolo
II strategia p=4 somme
P0 P1 P2 P3 parziali
s0 s1 s2 s3

I passo

s01 s23

II passo

s0123

Il numero di “passi” è 2

18
II strategia

Ogni processore
•calcola la propria somma parziale.
Ad ogni passo,
• coppie distinte di processori comunicano contemporaneamente
• in ogni coppia, un processore invia all’altro la propria
somma parziale che provvede all’aggiornamento della somma

Il risultato è in un unico processore prestabilito

Operazioni
Operazioni concorrenti
quasi
concorrenti
19
III strategia p=4 Calcolo
somme
P0 P1 P2 P3
parziali
s0 s1 s2 s3

I passo

s01 s01 s23 s23

II passo

s0123 s0123 s0123 s0123

Il numero di “passi” è 2

20
III strategia

Ogni processore
•calcola la propria somma parziale .
Ad ogni passo
•coppie distinte di processori
comunicano contemporaneamente:
•in ogni coppia i processori
si scambiano le proprie somme parziali

Il risultato è in tutti i processori

Operazioni concorrenti

21
I, II, III strategia
Ogni processore calcola la sua somma parziale
ed invia tale valore agli altri processori in
modo da ottenere la somma totale
PARALLELISMO

COMUNICAZIONE
TRA I PROCESSORI

22
Algoritmo per la somma di N=kp numeri su
MIMD-Distribuited Memory
I Strategia
begin
forall Pi , 0 i p-1 do
sumi := 0
h := i * (n/p)
for j = h to h+(n/p)-1 do
sumi := sumi + aj
endfor
endforall
if P0 then
sumtot:= sum0
for k = 1 to p-1 do
recv(sumk , Pk )
sumtot:=sumtot+sumk
endfor
else if Pi then
send(sumi, P0)
endif
endif
end 23
Uno strumento software per lo sviluppo di
algoritmi in ambiente di calcolo
MIMD-Distribuited Memory

Message Passing Interface


MPI

http://aws.amazon.com/

Cercheremo di fare un esempio di uso con la piattaforma virtualizzata di amazon!

24
PROBLEMA

Calcolo della somma di N numeri

a0+a1+…+aN-1

CPU
CPU CPU
CPU CPU
CPU
su un calcolatore 11 22 N
N
parallelo
tipo MIMD
A MEMORIA MEMORIA
MEMORIA

CONDIVISA
25
IDEA DI ALGORITMO PARALLELO

Suddividere la somma in somme parziali ed assegnare


ciascuna somma parziale ad un core

Somma totale
s0 s1 s2 s3

s0 s1 s2 s3

Somme parziali

26
IDEA DI ALGORITMO PARALLELO

Le somme parziali devono poi essere combinate in modo


opportuno per ottenere la somma totale

Somma totale
s0 s1 s2 s3

s0 s1 s2 s3

Somme parziali

27
Shared vs Distribuited
Calcolatori MIMD a Calcolatori MIMD a
memoria condivisa memoria distribuita
(shared-memory) (distributed-memory)
Necessità di
Possibilità di organizzare le
CPU
CPU CPU
utilizzare
CPU i dati CPU
CPU MEM comunicazioni tra i MEM
MEM
11 22 distribuirli
senza N
N processi

CPU CPU CPU


1 2 N
MEMORIA
MEMORIA

28
Schema Calcolatori
MIMD a memoria condivisa
(shared-memory)

CPU
CPU CPU
CPU CPU
CPU
1
1 22 N
N

MEMORIA
MEMORIA

29
Shared Memory: Multicore

MEMORIA

Cosa cambia rispetto

CHIP
CORE CORE CORE
ad un parallelismo
distribuited-memory?
30
Somma - MIMD Shared Memory
 Esempio: N=16, p=4
a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale

CORE CORE CORE CORE

C0 C1 C2 C3
13
Somma - MIMD Shared Memory
I core possono accedere
simultaneamente alla memoria

 Esempio: N=16, p=4 globale su dati differenti

a0 a1 a2 a3
a4 a5 a6 a7
Lettura Memoria
a8 a9 a10 a11
a12 a13 a14 a15 globale

CORE CORE CORE CORE

C0 C1 C2 C3
32
Somma - MIMD Shared Memory
 Esempio: N=16, p=4
a0 a1 a2 a3
Calcolo somme a4 a5 a6 a7
parziali a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale

CORE CORE CORE CORE

C0 C1 C2 C3
s0=a0+a4+a8+a12 s1=a1+a5+a9+a13 s2=a2+a6+a10+a14 s3=a3+a7+a11+a15
33
Somma - MIMD Shared Memory
I core possono accedere
simultaneamente alla memoria globale
 Esempio: N=16, p=4 su dati differenti

Scrittura a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
s0 s1 s2 s3

CORE CORE CORE CORE

C0 C1 C2 C3
34
Somma - MIMD Shared Memory

Come calcolare
la somma totale?

35
Somma - MIMD Shared Memory

Ogni core Ci,


calcolata la sua somma parziale si,
deve addizionare tale valore ad una variabile
(ad es. sumtot) che conterrà la somma finale.
I core devono accedere a sumtot
uno alla volta.

36
Esempio: Somma

Affinchè il valore di sumtot sia correttamente aggiornato


è necessario che ciascun core abbia accesso esclusivo
a tale variabile durante il suo aggiornamento

Sincronizzazione
degli accessi in memoria

37
Esempio: Somma 1strategia
 Esempio: N=16, p=4
a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
s0 s1 s2 s3

sumtot

sumtot=sumtot+s0

Calcolo
CORE CORE CORE CORE

Scrittura C0 C1 C2 C3
38
Esempio: Somma 1strategia

 Esempio: N=16, p=4


a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
s0 s1 s2 s3

sumtot

sumtot=sumtot+s1
Calcolo
CORE CORE CORE CORE

Scrittura
C0 C1 C2 C3
39
Esempio: Somma 1strategia

 Esempio: N=16, p=4


a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
s0 s1 s2 s3
sumtot

sumtot=sumtot+s2

Calcolo
CORE CORE CORE CORE

Scrittura
C0 C1 C2 C3
40
Esempio: Somma 1strategia

 Esempio: N=16, p=4


a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
s0 s1 s2 s3
sumtot

sumtot=sumtot+s3

Calcolo
CORE CORE CORE CORE

Scrittura C0 C1 C2 C3
41
Esempio: Somma 1strategia

 Esempio: N=16, p=4


a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
15
sumtot   ai sumtot
i 0

CORE CORE CORE CORE

C0 C1 C2 C3
42
I strategia (MIMD-SM)

Ogni core
•calcola la propria somma parziale

Ad ogni passo
• ciascun core aggiunge la propria somma parziale ad
ad un unico valore prestabilito

Il valore finale si trova nell’unica memoria


condivisa.
Operazioni concorrenti
43
Somma (II strategia MIMD-SM)
 Esempio: N=16, p=4
a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
s0 s1 s2 s3

s01 s23

s23 = s2 + s3
s01 = s0 + s1
Calcolo CORE CORE CORE CORE

Scrittura C0 C1 C2 C3
44
Somma (II strategia MIMD-SM)
 Esempio: N=16, p=4
a0 a1 a2 a3
a4 a5 a6 a7
a8 a9 a10 a11 Memoria
a12 a13 a14 a15 globale
s0 s1 s2 s3

sumtot = s01 + s23 s01 s23


sumtot

Calcolo

CORE CORE CORE CORE

Scrittura
C0 C1 C2 C3
45
II strategia (MIMD-SM)

Ogni core
•calcola la propria somma parziale.
Ad ogni passo,
• la metà dei core (rispetto al passo precedente) calcola un
contributo della somma parziale.

Il valore finale si trova


nell’unica memoria condivisa.
Operazioni
Operazioni concorrenti
quasi
concorrenti
46
Somma - MIMD Shared Memory

Non esiste una III strategia!


Non sorge la necessità di
progettarla, perché il risultato
è sempre contenuto nell’unica
memoria condivisa!

47
Esistono diversi strumenti per lo
sviluppo di software in ambiente di
calcolo MIMD-Shared Memory

OpenMp, Pthreads,
Windows threads…

48
Fine Lezione

49

Potrebbero piacerti anche