Documente Academic
Documente Profesional
Documente Cultură
paralelismului de date
Ciprian Dobre
ciprian.dobre@cs.pub.ro
Programarea concurent n
Java
Process1
Process2
Process
Process
Control
Control Block
Block
Process
Control Block
Code
Code
Code
Code
Data
Data
Data
Data
Stack
Stack
Stack
Stack
Fire de execuie
Firele de execuie
mpart acelai spaiu de
adrese;
au n comun: zonele de cod i
date din memorie, resursele
procesului
zona de stiv reprezint
starea curent a thread-ului i
este proprie thread-ului
Process
Process
Control
Control Block
Block
Code
Code
Data
Data
Thread1
Thread2
Thread
Control Block
Thread
Control Block
Stack
Stack
Process1
Process2
Process
Process
Control
Control Block
Block
Process
Control Block
Code
Code
Process
Process
Control
Control Block
Block
Code
Code
Data
Data
Code
Code
Thread1
Thread2
Data
Data
Data
Data
Thread
Control Block
Thread
Control Block
Stack
Stack
Stack
Stack
Stack
Stack
Execuia thread-urilor
P1
P2
Thread1
Sisteme multiprocesor:
Thread2
execuie n paralel
Sisteme uniprocesor:
planificarea este
t
realizat de ctre
sistemul de operare
politici: divizarea
timpului (time sharing),
prioriti
mbuntirea productivitii
n sistemelor multiprocesor: utilizarea simultan a
procesoarelor
n general: utilizarea simultan a diverselor resurse
De ctre JVM:
Prin intermediul prioritilor: ntre Thread.MIN_PRIORITY
(1) i Thread.MAX_PRIORITY(10)
Scenariu:
instaniemunobiectxde
tipulTestMem
pornimdoufirede
execuie
ntrunfirdeexecuie
apelmx.modific(),
iarncellaltapelm
x.afieaz()
ntrebare:
Putemtiexactcesevaafia
peecran?
Exemplu
Scenariu de execuie
Rezultat
GATA main!
2 a = 0 b =
1 a = 0 b =
1 a = 2 b =
2 a = 3 b =
1 a = 4 b =
2 a = 5 b =
GATA!
GATA!
0
0
1
2
3
4
Dou situaii:
Concuren
Cooperare
Sincronizarea
asigur excluderea mutual un singur fir poate executa la un
moment dat o metod (secven de cod) sincronizat: seciune
critic
Folosete mecanismul de zvor :
Metode:
synchronized:
lock pe obiect
static synchronized:
lock pe clas
20
sau.
Metoda wait()
Notificri
Referine
Aplicaii ale
paralelismului de date
Paralelism de date
Algoritm secvenial:
s[1] := a[1];
fa i := 2 to n ->
s[i] := a[i] + s[i-1]
af
Algoritm paralel:
- derivat din algoritmul sumei elementelor unui vector
procesoarepai
a2
a3
a4
a5
a6
a7
a8
a1
a3
a5
a7
a1
a3
a5
a7
a1
a3
a5
a7
Timp
a1
a5
a6
a7
a8
a1
a3
a5
a7
a1
a3
a5
a7
a1
a3
a5
a7
Timp
var
a: array [1:n] of int;
co suma
(k:1..n)::
fa j := 1 to sup() ->
if k mod 2j = 0 ->
a[k] := a[k-2j-1] + a[k]
fi
barrier
af
a1
a2
a3
a4
oc
a2
a3
a4
a5
a6
Timp
a1
var
a: array [1:n] of int;
co suma(k:1..n)::
fa j := 1 to sup() ->
if k - 2j-1 >= 1 ->
a[k] := a[k-2j-1] + a[k]
a
a
a
fi
barrier
af
oc
1
Eroare de sincronizare
a4
a5
a6
a2
a3
a4
a5
a6
a2
a3
Notaie SIMD
do steps i to j in parallel
step i
...
step j
od
fa i := j to k do in parallel
operaiile lui Pi
af
fa i := r, s, ...t do in paralel
operaiile lui Pi
af
fa i in S do in paralel
operaiile lui Pi
af
a2
a3
a4
a5
a6
Pas 1: P1
Pas 2: P1,
P2
15
15
15
15
15
15
15
15
Soluie
n dou dimensiuni pentru Laplace:
Operaii cu liste
Date
Date
Date
Date
Date
Operaii cu liste
Operaii cu liste
cap
Date
Date
Date
Date
Date
Procesor
End[i]
End[i]
End[i]
End[i]
d=1
d<5
d=2
d<5
d=4
d<5
init
Varianta SIMD
Sumar
ntrebri?