Prhuzamos programozs a forkjoin s a parbeginparend technika
Párhuzamos programozás (a fork/join és a parbegin/parend technika) • Többfeladatos rendszereknél, ahol párhuzamosan több folyamat végrehajtására is lehetőség van (pl. többprocesszoros, vagy elosztott architektúra), a rendszerprogramozóknak, illetve az alkalmazások íróinak a klasszikus lineáris programozási technikát túl kell lépniük, párhuzamos programozást kell alkalmazniuk. • Az alábbiakban a párhuzamos programozási technika egy alacsonyabb és egy magasabb szintű nyelvhez illeszkedő módszerét ismerhetik meg: – Fork-join utasítás pár – Parbegin-parend utasítás pár
FORK - JOIN
Párhuzamosság, szinkronizálás, konkurencia u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d;
Párhuzamosság, szinkronizálás, konkurencia u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; Bizonyos utasítások csak egymás után (szekvenciálisan) hajthatók végre, pl. u 1 és u 2, hiszen u 2 használja u 1 eredményét
Párhuzamosság, szinkronizálás, konkurencia u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; Bizonyos utasítások csak egymás után (szekvenciálisan) hajthatók végre, pl. u 1 és u 2, hiszen u 2 használja u 1 eredményét DE: pl. u 3 és u 4 egyszerre, egymással párhuzamosan is végrehajtható, hiszen nem függenek egymástól
Precedenciagráf • Csomópontok: UTASÍTÁSOK • Élek: Abban a csomópontban lévõ utasítás, ahonnan egy él indul, MEG KELL, HOGY ELÕZZE azt az utasítást, amely abban a csomópontban található, ahová az él mutat
Szerkesszük meg a precedenciagráfot! u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d;
Precedenciagráf u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1
Precedenciagráf u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1 u 2
Precedenciagráf u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1 u 2 u 3
Precedenciagráf u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1 u 2 u 3 u 4
Precedenciagráf u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1 u 2 u 3 u 4 u 5
Precedenciagráf u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1 u 2 u 3 u 4 u 5 u 6
Precedenciagráf u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1 u 2 u 3 u 6 u 4 u 5 u 7
Precedenciagráf ha több él találkozik egy csomópontban: szinkronizálás! u 1: u 2: u 3: u 4: u 5: u 6: u 7: x: =12; y: =x/4; a: =x+y; b: =x-y; c: =a*b; d: =x+1; e: =c+d; u 1 u 2 u 3 u 6 u 4 u 5 u 7
• A precedenciagráfok szemléletesen tükrözik a párhuzamosítási lehetõségeket, de programozásra közvetlenül nem használhatók • 1. megoldás: fork / join utasításpár • 2. megoldás: parbegin/parend utasításpár
Fork / join utasításpár • fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található
Fork / join utasításpár • fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található u 1 u 2 u 3
Fork / join utasításpár • fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található u 1 fork u 2 u 3
Fork / join utasításpár • fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található u 1 fork u 2 u 3 L: u 1; fork u 2; . . . u 3; L;
Fork / join utasításpár • join utasítás: két vagy több ág egyesítése; – az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal” – az egyesítendõ ágak számát egy számláló mutatja
Fork / join utasításpár • join utasítás: két vagy több ág egyesítése; – az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal” – az egyesítendõ ágak számát egy számláló mutatja u 1 u 2 u 3
Fork / join utasításpár • join utasítás: két vagy több ág egyesítése; – az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal” – az egyesítendõ ágak számát egy számláló mutatja u 1 u 2 join u 3
Fork / join utasításpár • join utasítás: két vagy több ág egyesítése; – az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal” – az egyesítendõ ágak számát egy számláló mutatja u 1 u 2 join u 3 száml: =2; u 1; goto L; u 2; L: join száml; u 3;
Fork / join utasításpár u 1 fork u 2 u 3 u 1 u 2 join u 3 L: u 1; fork u 2; . . . u 3; L; száml: =2; u 1; goto L; u 2; L: join száml; u 3;
Példa a fork/join utasítás használatára u 1 u 2 u 3 u 6 u 4 u 5 u 7
u 1 u 1; u 2 u 3 u 6 u 4 u 5 u 7
u 1 u 1; fork L 1; u 2 u 3 u 6 u 4 u 5 u 7
u 1 u 1; fork L 1; u 2; u 2 u 3 u 6 u 4 u 5 u 7
u 1 u 1; fork L 1; u 2; fork L 2; u 2 u 3 u 6 u 4 u 5 u 7
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; fork L 1; u 2; fork L 2; u 3;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; fork L 1; u 2; fork L 2; u 3; goto L 3;
u 1 u 2 u 3 u 6 u 4 L 2: u 5 u 7 u 1; fork L 1; u 2; fork L 2; u 3; goto L 3;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3:
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4; L 1:
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4; L 1: u 6;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4; L 1: u 6; L 4:
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4; L 1: u 6; L 4: join száml 2;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 2 : = 2; száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4; L 1: u 6; L 4: join száml 2;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 2 : = 2; száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4; L 1: u 6; L 4: join száml 2; u 7;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 száml 2 : = 2; száml 1 : = 2; u 1; fork L 1; u 2; fork L 2; u 3; goto L 3; L 2: u 4; L 3: join száml 1; u 5; goto L 4; L 1: u 6; L 4: join száml 2; u 7;
PARBEGIN - PAREND
Parbegin / parend utasításpár • A fork / join utasítások használatával áttekinthetetlen programstruktúra jön létre, a sok “goto” utasítás miatt • Megoldás: parbegin / parend utasítások • parbegin u 1; u 2; . . parend; • Jelentése: u 1, u 2, . . egymással párhuzamosan végrehajtható utasítások
Példa a parbegin/parend utasítás használatára u 1 u 2 u 3 u 6 u 4 u 5 u 7
• u 1; u 1 u 2 u 3 u 6 u 4 u 5 u 7
u 1; u 1 u 2 u 3 u 6 u 4 u 5 u 7
u 1; parbegin u 1 u 2 u 3 u 6 u 4 u 5 u 7
u 1; parbegin u 6; u 1 u 2 u 3 u 6 u 4 u 5 u 7
u 1; parbegin u 6; begin u 1 u 2 u 3 u 6 u 4 u 5 u 7
u 1; parbegin u 6; begin u 2; u 1 u 2 u 3 u 6 u 4 u 5 u 7
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3; u 4;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3; u 4; parend;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3; u 4; parend; u 5;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3; u 4; parend; u 5; end;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3; u 4; parend; u 5; end; parend;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3; u 4; parend; u 5; end; parend; u 7;
u 1 u 2 u 3 u 6 u 4 u 5 u 7 u 1; parbegin u 6; begin u 2; parbegin u 3; u 4; parend; u 5; end; parend; u 7;
Parbegin / parend utasításpár u 1 u 2 u 3 u 4 u 5 u 6 u 7 • A parbegin/parend utasításpár nem univerzális • Ez a precedenciagráf nem írható le segítségükkel
Parbegin / parend utasításpár u 1 u 2 u 3 u 4 u 5 u 6 u 7 • A parbegin/parend utasításpár nem univerzális • Ez a precedenciagráf nem írható le segítségükkel
Szemaforokkal kiegészített PARBEGIN - PAREND
A parbegin / parend általánosítása szemaforokkal u 1 u 2 u 3 u 4 u 5 u 6 u 7 • Tisztán parbegin/parend utasításokkal nem írható le • Rendeljünk minden élhez egy-egy átmenetet engedélyezõ szemafort • E szemaforok kezdeti értéke “foglalt” kell legyen
A parbegin / parend általánosítása szemaforokkal u 1 s 2 u 3 u 4 u 5 u 6 u 7
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 u 4 u 5 u 6 u 7
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 u 5 u 6 u 7
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 s 63 u 4 u 5 u 6 u 7
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 s 63 u 4 u 5 s 64 u 6 u 7
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 s 63 u 4 s 5 u 5 s 64 u 6 u 7
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 s 63 u 4 s 5 u 5 s 64 u 6 s 75 u 7
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 s 63 u 4 s 5 u 5 s 64 u 6 s 75 u 7 s 76
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 s 63 u 4 s 5 u 5 s 64 u 6 s 75 u 7 s 76
A parbegin / parend általánosítása szemaforokkal u 1 s 2 parbegin s 3 u 2 u 3 s 4 s 63 u 4 s 5 u 5 s 64 u 6 s 75 u 7 s 76 parend;
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 parbegin u 1; V(s 2); V(s 3); end; s 63 u 4 s 5 u 5 s 64 u 6 s 75 u 7 s 76 parend;
A parbegin / parend általánosítása szemaforokkal u 1 s 2 s 3 u 2 u 3 s 4 parbegin u 1; V(s 2); V(s 3); end; begin P(s 2); u 2; V(s 4); end; s 63 u 4 s 5 u 5 s 64 u 6 s 75 u 7 s 76 parend;
A parbegin / parend általánosítása szemaforokkal u 1 s 2 parbegin u 1; V(s 2); V(s 3); end; u 3 begin P(s 2); u 2; V(s 4); end; s 63 begin P(s 3); u 3; V(s 63); end; s 3 u 2 s 4 u 4 s 5 u 5 s 64 u 6 s 75 u 7 s 76 parend;
A parbegin / parend általánosítása szemaforokkal u 1 s 2 parbegin u 1; V(s 2); V(s 3); end; u 3 begin P(s 2); u 2; V(s 4); end; s 63 begin P(s 3); u 3; V(s 63); end; begin P(s 4); u 4; V(s 5); V(s 64); end; s 3 u 2 s 4 u 4 s 5 u 5 s 64 u 6 s 75 u 7 s 76 parend;
A parbegin / parend általánosítása szemaforokkal u 1 s 2 u 2 s 4 u 4 s 5 u 5 parbegin u 1; V(s 2); V(s 3); end; u 3 begin P(s 2); u 2; V(s 4); end; s 63 begin P(s 3); u 3; V(s 63); end; begin P(s 4); u 4; V(s 5); V(s 64); end; begin P(s 5); u 5; V(s 75); end; s 3 s 64 u 6 s 75 u 7 s 76 parend;
A parbegin / parend általánosítása szemaforokkal u 1 s 2 u 2 s 4 u 4 s 5 u 5 s 64 u 6 s 75 u 7 parbegin u 1; V(s 2); V(s 3); end; u 3 begin P(s 2); u 2; V(s 4); end; s 63 begin P(s 3); u 3; V(s 63); end; begin P(s 4); u 4; V(s 5); V(s 64); end; begin P(s 5); u 5; V(s 75); end; begin P(s 64); P(s 63); u 6; V(s 76); end; s 3 s 76 parend;
A parbegin / parend általánosítása szemaforokkal u 1 s 2 u 2 s 4 u 4 s 5 u 5 s 64 u 6 s 75 u 7 parbegin u 1; V(s 2); V(s 3); end; u 3 begin P(s 2); u 2; V(s 4); end; s 63 begin P(s 3); u 3; V(s 63); end; begin P(s 4); u 4; V(s 5); V(s 64); end; begin P(s 5); u 5; V(s 75); end; begin P(s 64); P(s 63); u 6; V(s 76); end; begin P(s 75); P(s 76); u 7; end; parend; s 3 s 76
A parbegin / parend általánosítása szemaforokkal u 1 s 2 u 2 s 4 u 4 s 5 u 5 s 64 u 6 s 75 u 7 parbegin u 1; V(s 2); V(s 3); end; u 3 begin P(s 2); u 2; V(s 4); end; s 63 begin P(s 3); u 3; V(s 63); end; begin P(s 4); u 4; V(s 5); V(s 64); end; begin P(s 5); u 5; V(s 75); end; begin P(s 64); P(s 63); u 6; V(s 76); end; begin P(s 75); P(s 76); u 7; end; parend; s 3 s 76
A parbegin / parend általánosítása szemaforokkal • A szemaforokkal kiegészített megoldás lassabb mint a tisztán parbegin/parend utasításokat tartalmazó megoldás, ezért csak akkor használjuk, ha feltétlen szükséges!
- Slides: 87