Párhuzamos programozás (a fork/join és a parbegin/parend technika)

Slides:



Advertisements
Hasonló előadás
Ellenállás mérés Rezonancia módszer Híd módszer
Advertisements

Vezérlő utasítások.
Algoritmusok.
Az elektromos mező feszültsége
Az AUDI AG az általában Audiként ismert német autógyártó cég, melynek székhelye a németországi Ingolstadtban található óta 99,7 %-ban a Volkswagen.
A MÉRŐESZKÖZÖK CSOPORTOSÍTÁSA
A mikroprocesszor 1. rész.
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Az MSZ EN villámvédelmi szabványsorozat 2
Számítógépek felépítése 3. előadás CPU, utasítás ciklus, címzés
A kurzus programja Dátum Témakör ELŐVIZSGA szeptember 15.
Matematika II. 3. előadás Geodézia szakmérnöki szak 2010/2011. tanév Műszaki térinformatika ágazat tavaszi félév.
Szerkezeti leírás Összetevők és beültetésük Összetevők és beültetésük Általános kiosztás (generic map) Általános kiosztás (generic map) Generate parancs.
A korlátozott síkbeli háromtestprobléma
Sztringek.
Gazdaságmatimatika Gyakorló feladatok.
Adatbázis alapú rendszerek
C A C nyelv utasításai.
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
TECHNOLÓGIA & KONSTRUKCIÓ
SZÁMÍTÓGÉP ARCHITEKTÚRÁK
Szállítási probléma - fogalmak
Az entalpia és a gőzök állapotváltozásai
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
Nem determinisztikusság és párhuzamosság. A nem determinisztikusság a párhuzamosságban gyökeredzik. Példa: S par  parbegin x:=0   x:=1   x:=2 parend;
A RobotinoView programozása
HIPERBOLIKUS PROGRAMOZÁS
Bevezetés a C++ programozási nyelvbe
A közömbösségi görbék rendszere
1 Operációs rendszerek Az NT folyamatok kezelése.
Bizonytalanság melletti döntések
A programozás alapjai A számítógép számára a feladat meghatá- rozását programozásnak nevezzük. Ha a processzor utasításait használjuk a feladat meghatározásához,
Kölcsönös kizárás (bináris és nembináris szemaforok)
A négyzetes mátrixok (nxn-es kétdimenziós tömbök)
Hasonlósággal kapcsolatos szerkesztések
ALGORITMUSOK.
Rendezések és szövegkezelő függvények
Ciklusok (iterációk).
3.2. A program készítés folyamata Adatelemzés, adatszerkezetek felépítése Típus, változó, konstans fogalma, szerepe, deklarációja.
Lineáris programozás és a szimplex módszer
2. Házi feladat 1. feladat megoldása
Dh=dq-dw t =dq+v*dpM16/1 dp=0 esetben dh=dq mivel dq =c p (T)dT (ideális gáz esetén c p =c p (T) ) 1 2 dh= 1 2 c p dT h 2 -h 1 =c p (T 2 -T 1 ) h 2 =c.
A SZINTEZÉS A SZINTEZÉS. A SZINTEZÉS A SZINTEZÉS.
A Neumann-elvek 3. ÓRA.
Termelő-fogysztó modell. A probléma absztrakt megfogalmazása: informális leírás. Adott egy N elemű közösen használt tároló, N  1. Adott a folyamatoknak.
Normál feladat megoldása és érzékenységvizsgálata
CUDA C/C++ programozás
Készítette: Horváth Viktória
Módosított normál feladat
Parametrikus programozás
Dr. Bánkuti Gyöngyi Klingné Takács Anna
CUDA C/C++ programozás Atomikus műveletek A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Pipeline példák. Pipe 1. feladat Adott a következő utasítás sorozat i1: R0 MEM [R1+8] i2: R2 R0 * 3 i3: R3 MEM [R1+12] i4: R4 R3 * 5 i5: R0 R2 + R4 A.
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
Adva S  parbegin S 1 ...  S n parend; Párhuzamos programszerkezet két vagy több olyan folyamatot tartalmaz, amelyek egymással közös változó segítségével.
Egy lekérdezés végrehajtása SELECT o1 FROM T1 WHERE o2 = … Hogyan jutnak el a megfelelő sorokból a mező értékei a klienshez?
Kommunikáció és szinkronizáció. 1.) Kommunikáció: Lehetőség arra, hogy egyik folyamat befolyásolja a másik folyamat lefutását. Kommunikáció eszközei: közös.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Programstruktúrák. Program A program utasítások olyan sorozata, amely a számítógépen önállóan képes megoldani egy feladatot. A program háttértáron futtatható.
Programozási nyelvek csoportosítása.
Adatbázis alapú rendszerek
Bevezetés a programozásba Algoritmikus gondolkodás
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Algoritmusok szerkezete
Dr. Fi István Közlekedéstervezés 7. előadás.
Informatikai gyakorlatok 11. évfolyam
Fejlett pipeline megoldások IMSC 2019
Pipeline példák (IMSC, 2019).
Előadás másolata:

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 u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d;

Párhuzamosság, szinkronizálás, konkurencia u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; Bizonyos utasítások csak egymás után (szekvenciálisan) hajthatók végre, pl. u1 és u2, hiszen u2 használja u1 eredményét

Párhuzamosság, szinkronizálás, konkurencia u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; Bizonyos utasítások csak egymás után (szekvenciálisan) hajthatók végre, pl. u1 és u2, hiszen u2 használja u1 eredményét DE: pl. u3 és u4 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! u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d;

Precedenciagráf u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d;

Precedenciagráf u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; u2

Precedenciagráf u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; u2 u3

Precedenciagráf u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; u2 u3 u4

Precedenciagráf u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; u2 u3 u4 u5

Precedenciagráf u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; u2 u6 u3 u4 u5

Precedenciagráf u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; u2 u6 u3 u4 u5 u7

Precedenciagráf ha több él találkozik egy csomópontban: szinkronizálás! u1 u1: x:=12; u2: y:=x/4; u3: a:=x+y; u4: b:=x-y; u5: c:=a*b; u6: d:=x+1; u7: e:=c+d; u2 u6 u3 u4 u5 u7

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ó u1 u2 u3

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ó u1 u1 fork u2 u3 u2 u3

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ó u1 u1; fork L; u2; ... u1 fork u2 u3 L: u3; u2 u3

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 u1 u2 u3

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 u1 u2 u1 u2 join u3 u3

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 u1 u2 száml:=2; u1; goto L; u2; L: join száml; u3; u1 u2 join u3 u3

Fork / join utasításpár fork L; u2; ... fork L: u3; u2 u3 u1 u2 száml:=2; u1; goto L; u2; L: join száml; u3; join u3

Példa a fork/join utasítás használatára

u1; u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u2; u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u2; fork L2; u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u2; fork L2; u3; u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u2; fork L2; u3; goto L3; u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u2; fork L2; u3; goto L3; L2: u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; u1 u2 u6 u3 u4 u5 u7

u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: u1 u2 u6 u3 u4 u5

u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u1 u2

száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u1 u2 u6 u3 u4 u5 u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u5; u1 u2 u6 u3 u4 u5 u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u5; goto L4; u1 u2 u6 u3 u4 u5 u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u5; goto L4; L1: u1 u2 u6 u3 u4 u5 u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u5; goto L4; L1: u6; u1 u2 u6 u3 u4 u5 u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u5; goto L4; L1: u6; L4: u1 u2 u6 u3 u4 u5 u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L2: u4; L3: join száml1; u5; goto L4; L1: u6; L4: join száml2; u1 u2 u6 u3 u4 u5 u7

száml2 := 2; száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L3: join száml1; u5; goto L4; L1: u6; L4: join száml2; u1 u2 u6 u3 u4 u5 u7

száml2 := 2; száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L3: join száml1; u5; goto L4; L1: u6; L4: join száml2; u7; u1 u2 u6 u3 u4 u5 u7

száml2 := 2; száml1 := 2; u1; fork L1; u2; fork L2; u3; goto L3; L3: join száml1; u5; goto L4; L1: u6; L4: join száml2; u7; u1 u2 u6 u3 u4 u5 u7

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 u1; u2; .... parend; Jelentése: u1, u2, .... egymással párhuzamosan végrehajtható utasítások

Példa a parbegin/parend utasítás használatára

u1; u1 u2 u6 u3 u4 u5 u7

u1; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u2; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u2; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u2; u3; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u2; u3; u4; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u2; u3; u4; parend; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u2; u3; u4; parend; u5; u1 u2 u6 u3 u4 u5 u7

u1; parbegin u6; begin u2; u3; u4; parend; u5; end; u1 u2 u6 u3 u4 u5

u1; parbegin u6; begin u2; u3; u4; parend; u5; end; u1 u2 u6 u3 u4 u5

u1; parbegin u6; begin u2; u3; u4; parend; u5; end; u7; u1 u2 u6 u3 u4

u1; parbegin u6; begin u2; u3; u4; parend; u5; end; u7; u1 u2 u6 u3 u4

Parbegin / parend utasításpár A parbegin/parend utasításpár nem univerzális Ez a precedenciagráf nem írható le segítségükkel u1 u2 u3 u4 u5 u6 u7

Parbegin / parend utasításpár A parbegin/parend utasításpár nem univerzális Ez a precedenciagráf nem írható le segítségükkel u1 u2 u3 u4 u5 u6 u7

Szemaforokkal kiegészített PARBEGIN - PAREND

A parbegin / parend általánosítása szemaforokkal 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 u1 u2 u3 u4 u5 u6 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 u2 u3 u4 u5 u6 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 u4 u5 u6 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 s4 u4 u5 u6 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 s4 s63 u4 u5 u6 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 s4 s63 u4 s64 u5 u6 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; begin P(s2); u2; V(s4); end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; begin P(s2); u2; V(s4); end; begin P(s3); u3; V(s63); end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; begin P(s2); u2; V(s4); end; begin P(s3); u3; V(s63); end; begin P(s4); u4; V(s5); V(s64); end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; begin P(s2); u2; V(s4); end; begin P(s3); u3; V(s63); end; begin P(s4); u4; V(s5); V(s64); end; begin P(s5); u5; V(s75); end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; begin P(s2); u2; V(s4); end; begin P(s3); u3; V(s63); end; begin P(s4); u4; V(s5); V(s64); end; begin P(s5); u5; V(s75); end; begin P(s64); P(s63); u6; V(s76); end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; begin P(s2); u2; V(s4); end; begin P(s3); u3; V(s63); end; begin P(s4); u4; V(s5); V(s64); end; begin P(s5); u5; V(s75); end; begin P(s64); P(s63); u6; V(s76); end; begin P(s75); P(s76); u7; end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

A parbegin / parend általánosítása szemaforokkal u1 parbegin begin u1; V(s2); V(s3); end; begin P(s2); u2; V(s4); end; begin P(s3); u3; V(s63); end; begin P(s4); u4; V(s5); V(s64); end; begin P(s5); u5; V(s75); end; begin P(s64); P(s63); u6; V(s76); end; begin P(s75); P(s76); u7; end; parend; s2 s3 u2 u3 s4 s63 u4 s64 s5 u5 u6 s75 s76 u7

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!