Párhuzamos programozás több szállal

Hasonló dokumentumok
Párhuzamos programozás több szállal

Párhuzamos programozás több szállal

Párhuzamos algoritmusok tervezési lehetőségei és módszerei

Bevezetés. Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar

Párhuzamos algoritmusok tervezésének alapjai

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Kereső algoritmusok a diszkrét optimalizálás problémájához

Párhuzamos programozási platformok

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Számítógép architektúra

Grafikus csővezeték 1 / 44

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Párhuzamos és Grid rendszerek

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

Kereső algoritmusok a diszkrét optimalizálás problémájához

LabView Academy. 4. óra párhuzamos programozás

egy szisztolikus példa

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

Párhuzamos programozási platformok

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

Kereső algoritmusok a diszkrét optimalizálás problémájához

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Párhuzamos és Grid rendszerek

Előadás_# Az első ZH megírása

Operációs rendszerek MINB240

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Operációkutatás példatár

Operációs rendszerek. Az NT folyamatok kezelése

Programozás alapjai. 10. előadás

Objektumorientált Programozás III.

Bevezetés a párhuzamos programozási koncepciókba

Dinamikus programozás - Szerelőszalag ütemezése

Számítógépek felépítése

alkalmazásfejlesztő környezete

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Operációs rendszerek III.

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Képfeldolgozás és párhuzamosíthatóság

Occam 1. Készítette: Szabó Éva

PÁRHUZAMOS SZÁMÍTÁSTECHNIKA MODUL AZ ÚJ TECHNOLÓGIÁKHOZ KAPCSOLÓDÓ MEGKÖZELÍTÉSBEN

Párhuzamos algoritmusok tervezésének alapjai

A LabVIEW 8.5 támogatja a többmagos processzorok lehetőségeinek kihasználását

Párhuzamos programok futásának kiértékelése Scalasca profiler segítségével

TÖBBSZÁLÚ/TÖBBMAGOS PROCESSZORARCHITEKTÚRÁK PROGRAMOZÁSA

Alkalmazások típusai Szoftverismeretek

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Folyamatok. 6. előadás

Párhuzamos programozási modellek

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

OPERÁCIÓS RENDSZEREK I. BEVEZETÉS Koczka Ferenc -

Operációs Rendszerek II.

Utolsó módosítás:

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Operációs rendszerek. Az NT memóriakezelése

Számítógép Architektúrák

I.3 ELOSZTOTT FOLYAMATSZINTÉZIS BERTÓK BOTOND. Témavezetői beszámoló

Operációs rendszerek Folyamatok 1.1

Konkurens TCP Szerver

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Csoportos üzenetszórás optimalizálása klaszter rendszerekben

Függvények növekedési korlátainak jellemzése

Dr. habil. Maróti György

Párhuzamosítás adatbáziskezelő rendszerekben

Programozási módszertan. Dinamikus programozás: szerelőszalag ütemezése Mátrixok véges sorozatainak szorzása

Adatok ábrázolása, adattípusok

9. MPI

Ütemezési problémák. Kis Tamás 1. ELTE Problémamegoldó Szeminárium, ősz 1 MTA SZTAKI. valamint ELTE, Operációkutatási Tanszék

Operációs rendszerek. UNIX fájlrendszer

Osztott jáva programok automatikus tesztelése. Matkó Imre BBTE, Kolozsvár Informatika szak, IV. Év 2007 január

Számítógép architektúrák záróvizsga-kérdések február

Bevezetés az informatikába

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

Programozási segédlet

Előadás_#02. Előadás_02-1 -

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

III. Alapfogalmak és tervezési módszertan SystemC-ben

Osztálytervezés és implementációs ajánlások

Operációs rendszerek. Folyamatok ütemezése

Osztálytervezés és implementációs ajánlások

SzA19. Az elágazások vizsgálata

Párhuzamosság a modern operációs rendszerekben

Operációs Rendszerek II.

Dinamikus programozás párhuzamosítási lehetőségekkel

Informatika Rendszerek Alapjai

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

Programtervezés. Dr. Iványi Péter

1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Keresés képi jellemzők alapján. Dr. Balázs Péter SZTE, Képfeldolgozás és Számítógépes Grafika Tanszék

11. előadás. Párhuzamosság. Több szálon futó algoritmusok, logikai párhuzamosság. Adatszerkezetek és algoritmusok előadás április 30.

Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor

Hálózati Folyamok Alkalmazásai. Mályusz Levente BME Építéskivitelezési és Szervezési Tanszék

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Webprogramozás szakkör

Átírás:

Párhuzamos programozás több szállal Alapvető fogalmak és koncepció A slide-sorozat az Intel Multi-Core Programming for Windows és az Inroduction to Parallel Programming oktatási anyaga alapján készült

Tartalom Bevezetés és alapfogalmak Tervezési szempontok Programhelyességi szempontok Teljesítménynövelési szempontok 2

Cél A szálakon alapuló párhuzamos programozás alapfogalmainak megismerése Mi a párhuzamos programozás? Próbálkozás egy adott feladat megoldásának gyorsítására 1. a feladat részekre bontásával 2. a részfeladatok szimultán futtatásával többprocesszoros rendszeren A sikeres próbálkozáshoz szükséges megismerni, hogy hol lehet eredményes a párhuzamosítás hogyan lehet tervezni és implementálni ilyen megoldást 3

A Multi-Core technológia kifejlődése Single-threading: Egy feladat (process) fut egy időben. Multitasking és Multithreading: Két vagy több feladat fut egy időben (content switching) HT: Két szál fut egy időben ugyanazon a processzoron. Multi-core: Egy alkalmazás számítási feladatai meg- és szétosztottak több számítási egységet használva. Single Core Processors Thread Level Parallelism Instructional Level Parallelism Data Level Parallelism Hyper Threading Dual-Core Processors Multi-Core Processors 4

Hyper-Threading vs. Dual Core Both threads without Hyper-Threading Technology: Both threads with Hyper-Threading Technology: Both threads with Dual Core processors: Time saved Time saved Time 5

Mi a szál? A szál (thread): A programon belül a vezérlés egyszerű szekvenciális lefutása Futtatandó utasítások sorozata Ütemezési egység (Windows) 2 x 2 x A programon (processen) belül egy szál fut Több szálas futás 6

Független programok Párhuzamos program Application Application Application Application Application Application Threads Process Switch Thread Switch A szálak lehetővé teszik, hogy egy program akár több processzort használjanak 7

Miért használunk szálakat? Szálak alkalmazásának előnyei: Megnövelt teljesítmény Jobb erőforrás kihasználás Hatékony adatmegosztás Szálak használatának negatív vonzatai: Verenyhelyzet Holtpont lehetősége Kód komplexitás Portábilitási problémák Nehéz tesztelés és debuggolás 8

Mi a folyamat? A modern operációs rendszerek a programot folyamatként töltik be. Az operációs rendszer felé kettős szerepel rendelkezik: Erőforrást birtokol (memória, utasításszámláló regiszter (IP), fájl mutató) Futtatási egység (szál) Definíció: A folyamat (process) rendelkezik egy főszállal, amely inicializálja a folyamatot és elkezdi futtatni az utasításokat 2 x Folyamat Többszálas program 9

Folyamatok és szálak Szálak és folyamat kapcsolata: A folyamat fő szála inicializálja a folyamatot és elkezdi futtatni az utasításokat A folyamaton belül minden szál készíthet további szálakat Minden szálnak saját verme van A folyamaton belül minden szál megosztja a kód- és adatszegmenst (közös adattéren dolgoznak) thread2() Stack IP Process Data Code thread1() Stack IP threadn() Stack IP Ellenben az elosztott címzést használó párhuzamossággal: Message Passing Interface (MPI) Szálak a folyamatban 10

Szálkezelés Szálak létrehozása és megszüntetése, végrehajtásuk vezérlése Egyidejűleg több szál állapotának nyilvántartása, kezelése Kontextusváltás a szálak között 11

Folyamatok és szálak Különbségek a folyamatok és a szálak között: Kategória Memóriaterület Interaktivitás Folyamat A folyamat saját memóriaterülettel rendelkezik, amely elszigetelődik. A folyamatok közötti egyszerű kommunikációra nincs lehetőség. system kernel. Szál A folyamaton belüli szálak megosztják a memóriaterületet. A program szálai az adott programnyelv, vagy szoftverkönyvtár megfelelő elemeinek használatával kommunikálhat a folyamat megosztott memóriaterületén. Kontextusváltás Nehézkes kontextus váltás, mert a teljes folyamatállapotot meg kell őrizni. Az aktuális regiszterállapotot kell menteni + a szálak mikroállapotát. 12

Process / Thread Management Example Soros-, többfeladatos-, és többszálú programozás elve Soros prog. Többfeladatos programozás Többszálú programozás P1 exec() P2 P1 fork() P2 fork() P3 T1 P1 CreateThread() Create Process() T2 T3 P2 T4 T5 exec() P3 join() T6 Forrás: Dr. Sima Dezső előadása 13

Konkurencia Konkurencia akkor fordul elő, amikor két vagy több szál szimultán van jelen Egyetlen processzoron is előfordulhat konkurens működés Thread 1 Thread 2 Thread 1 Thread 1 Thread 1 Thread 2 Thread 2 Thread 1 Thread 2 Thread 2 Konkurencia többszálas folyamatban 14

Párhuzamosság Párhuzamosságról akkor beszélünk, amikor több szál szimultán fut Párhuzamos szálak több processzoron futnak Thread 1 Thread 1 Thread 1 Thread 2 Thread 2 Thread 2 Párhuzamos működés a folyamaton belül 15

1. rész Tervezési szempontok Többszálú működés célja A funkcionalitás bővítése A teljesítmény (átbocsátás) növelése Minimális végrehajtási idő elérése Maximális végrehajtási teljesítmény elérése Dekompozíció Feladat felbontása kisebb egységekre Adatok felbontása kisebb egységekre Programhelyességi szempontok Teljesítménynövelési szempontok 16

Többszálú működés A funkcionalitás bővítése Az alkalmazás által végzett különböző feladatokhoz egy-egy külön szálat rendelünk Ez a legegyszerűbb módszer, mivel az átfedés valószínűsége kicsi Egyszerű kontrollálni a konkurens funkciókat Példa: házépítés Kőműves, ács, tetőfedő, vízvezetékszerelő 17

Többszálú működés A teljesítmény (átbocsátás) növelése Cél: a végrehajtási idő csökkentése (vagy a teljesítmény növelése) Példák: Autógyár futószalagja Minden dolgozónak külön feladata van Eltűnt személy keresése Az átfésülendő terület felosztása Posta Postahivatalok, levélszortírozó gépek, kézbesítők 18

Többszálú működés Minimális végrehajtási idő elérése Cél: egyetlen feladat végrehajtása a lehető legrövidebb idő alatt Példa: Vacsoraasztal megterítése Egy ember felteszi a tányérokat Egy ember hajtogatja és elhelyezi a szalvétákat Egy ember elhelyezi az evőeszközöket Kanál, villa, kés Egy ember kihelyezi a poharakat 19

Többszálú működés Maximális végrehajtási teljesítmény elérése Cél: a lehető legtöbb munka elvégzése a rendelkezésre álló idő alatt Példa: Asztalterítés banketthez Minden asztalt több pincér terít meg külön-külön Tányérokra, poharakra, evőeszközökre stb. szakosodott pincérek 20

Dekompozíció A dekompozíció önálló részekre történő logikai szétbontást jelent, ahol az egyes részek közötti kapcsolódásokat is azonosítjuk Dekompozíciós módszerek, tervezési stratégiák és implementációs területek: Adat Dekompozíció Tervezés Megjegyzés Feladat Pipelining (speciális feladat dekompozíció) Különböző szálak ugyanazt a feladatot oldják meg, de más adaton Különböző feladatok különböző szálakhoz rendelése Különböző adathalmazokon Hang és képfeldolgozás, tudományos számítások Olyan alkalmazásokra jellemző, amely számos független funkcióból épül fel Gyakran hardveres Azonos idejű állapotok 21

Dekompozíció Adatok felbontása kisebb egységekre Nagy adathalmazokon dolgozunk, amelyek elemei egymástól függetlenül számíthatók ki Adatok és a hozzájuk rendelt számítások elosztása a szálak között Példa: Zárthelyi dolgozatok javítása Több javító dolgozik, mindenkinél van egy javítókulcs de mi történik, ha több különböző javítókulcsra van szükség? 22

Dekompozíció Feladat felbontása kisebb egységekre A számítási feladatot egymástól független, természetesen adódó alfeladatokra bontjuk Minden alfeladat szükség szerint kapja az adatokat 3 Példa: Számozott színmezők kifestése Egy adott színnel történő festés egy alfeladat 5 5 5 5 5 8 6 Alfeladatok száma = színek száma 3 3 3 3 3 5 5 5 5 5 3 3 Ha két festő 3 dolgozik a munkán, egyikük festheti 9 a páros, másikuk a páratlan mezőket 3 3 6 4 5 5 10 11 4 4 5 5 6 7 9 7 8 4 8 8 3 3 3 1 2 1 1 2 1 23

Adat dekompozíció Első részfeladat: miként lehet az adatokat felosztani (a szálak között) Második részfeladat: ugyanazt a feladatot hajtják végre a szálak Példa: két nagyméretű vektor összeadása 24

Adat dekompozíció Tömb legnagyobb elemének megkeresése 25

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 26

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 27

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 28

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 29

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 30

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 31

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 32

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 33

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 34

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 35

Adat dekompozíció Tömb legnagyobb elemének megkeresése Szál 0 Szál 1 Szál 2 Szál 3 36

Feladat (funkció) dekompozíció Első részfeladat: a feladatokat szétosztjuk (a szálak között) Második részfeladat: annak eldöntése, hogy az egyes adatelemeket mely szálak használják (olvassák/írják) 37

Feladat dekompozíció f() g() h() q() r() s() 38

Feladat dekompozíció Szál 1 Szál 0 f() g() h() Szál 2 q() r() s() 39

Feladat dekompozíció Szál 1 Szál 0 f() g() h() Szál 2 q() r() s() 40

Feladat dekompozíció Szál 1 Szál 0 f() g() h() Szál 2 q() r() s() 41

Feladat dekompozíció Szál 1 Szál 0 f() g() h() Szál 2 q() r() s() 42

Feladat dekompozíció Szál 1 Szál 0 f() g() h() Szál 2 q() r() s() 43

Pipelining Speciális feladat dekompozíció Fútószalag párhuzamosság Példa: 3D renderelés grafikában Modellezés Vetítés Vágás Raszterizálás Input Output 44

Egy adathalmaz feldolgozása (1. lépés) Modellezés Vetítés Vágás Raszterizálás 45

Egy adathalmaz feldolgozása (2. lépés) Modellezés Vetítés Vágás Raszterizálás 46

Egy adathalmaz feldolgozása (3. lépés) Modellezés Vetítés Vágás Raszterizálás 47

Egy adathalmaz feldolgozása (4. lépés) Modellezés Vetítés Vágás Raszterizálás pipeline 1 adathalmazt 4 lépésben dolgoz fel 48

Két adathalmaz feldolgozása (1. lépés) Modellezés Vetítés Vágás Raszterizálás 49

Két adathalmaz feldolgozása (2. időpont) Modellezés Vetítés Vágás Raszterizálás 50

Két adathalmaz feldolgozása (3. lépés) Modellezés Vetítés Vágás Raszterizálás 51

Két adathalmaz feldolgozása (4. lépés) Modellezés Vetítés Vágás Raszterizálás 52

Két adathalmaz feldolgozása (5. lépés) Modellezés Vetítés Vágás Raszterizálás A pipeline 2 adathalmazt 5 lépésben dolgoz fel 53

Öt adathalmaz feldolgozása (1. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 54

Öt adathalmaz feldolgozása (2. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 55

Öt adathalmaz feldolgozása (3. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 56

Öt adathalmaz feldolgozása (4. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 57

Öt adathalmaz feldolgozása (5. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 58

Öt adathalmaz feldolgozása (6. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 59

Öt adathalmaz feldolgozása (7. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 60

Öt adathalmaz feldolgozása (8. lépés) Data set 0 Szál 0 Szál 1 Szál 2 Szál 3 Data set 1 Data set 2 Data set 3 Data set 4 61

Függőségi gráf Gráf = (csomópontok, irányított élek) Csomópont lehet: Változó hozzárendelés (kivétel index) Konstans Operátor, vagy függvényhívás Az élek a változók vagy a konstansok használatát jelölik: Adat folyamokban (adat függőség: egyik adat új értéke, a másik adattól) Vezérlési folyamatban (vezérlés függőség: if (a < b) a = b; ) 62

Függőségi gráf 1. példa for (i = 0; i < 3; i++) a[i] = b[i] / 2.0; b[0] 2 b[1] 2 b[2] 2 / / / a[0] a[1] a[2] 63

Függőségi gráf 1. példa for (i = 0; i < 3; i++) a[i] = b[i] / 2.0; Lehetséges adat dekompozíció b[0] 2 b[1] 2 b[2] 2 / / / a[0] a[1] a[2] 64

Függőségi gráf 2. példa for (i = 1; i < 4; i++) a[i] = a[i-1] * b[i]; a[0] b[1] b[2] b[3] * * * a[1] a[2] a[3] 65

Függőségi gráf 2. példa for (i = 1; i < 4; i++) a[i] = a[i-1] * b[i]; Nincs adat dekompozíció a[0] b[1] b[2] b[3] * * * a[1] a[2] a[3] 66

Függőségi gráf 3. példa a = f(x, y, z); b = g(w, x); t = a + b; c = h(z); s = t / c; w x y z g f h b a c t / s 67

Függőségi gráf 3. példa a = f(x, y, z); b = g(w, x); t = a + b; c = h(z); s = t / c; w x y z g f h Feladat dekompozíció 3 szálra b t a / c s 68

Függőségi gráf 4. példa for (i = 0; i < 3; i++) a[i] = a[i] / 2.0; a[0] 2 a[1] 2 a[2] 2 / / / a[0] a[1] a[2] 69

Függőségi gráf 4. példa for (i = 0; i < 3; i++) a[i] = a[i] / 2.0; Adat dekompozíció a[0] 2 a[1] 2 a[2] 2 / / / a[0] a[1] a[2] 70

Függőségi gráf 5. példa for (i = 0; i < 3; i++) { a[i] = a[i] / 2.0; if (a[i] < 1.0) break; } a[0] 2 a[1] 2 a[2] 2 / 1 / 1 / a[0] < a[1] < a[2] 71

2. rész Tervezési szempontok Programhelyességi szempontok Versenyhelyzet és szinkronizáció Holtpont Teljesítménynövelési szempontok 72

Versenyhelyzet A szálak egymással versenyeznek az erőforrásokért A végrehajtás sorrendjét feltételezzük, de garantálni nem tudjuk Leggyakoribb eset: versengés a tárhelyért Több szál egyszerre kíván azonos memóriacímhez hozzáférni Ezek közül legalább egy írási céllal Példa: Székfoglaló játék 73

Kölcsönös kizárás Kritikus szakasz (régió) Olyan kódrészlet, amely megosztva használt változókhoz fér hozzá (olvasási és írási műveletek) Kölcsönös kizárás Biztosítja, hogy a kritikus szakaszba egyszerre csak egy szál léphessen be Szemantikailag helyes programozási struktúrát biztosít a versenyhelyzetek elkerüléséhez Példa: Banki széf Az ügyintézők gondoskodnak a kölcsönös kizárásról 74

Szinkronizáció kölcsönös kizárással Kölcsönös kizárás biztosítására használt szinkronizációs objektumok típusai és használatuk Zár (lock), szemafor (semaphore), kritikus szakasz (critical section), feltételváltozó (condition variable), esemény (event), atomi végrehajtás (atomic/interlocked) Egy szál magánál tartja a szinkronizációs objektumot, a többi szál kénytelen várakozni Amikor elkészült a feladatával, a fenti szál elengedi az objektumot, amelyet az egyik várakozó szál kaphat meg Példa: Könyvtári kölcsönzés Könyvtártag kikölcsönöz egy könyvet A többieknek meg kell várniuk, amíg visszahozza 75

Szinkronizáció adott végrehajtási ponton (randevú) A szálak a végrehajtás adott pontján bevárják egymást A várakozó szálak nem végeznek hasznos munkát veszteség Amikor minden szál megérkezett a randevú helyszínére, mindegyikük továbbléphet Példa: Rajtvonal, pl. futóversenyen 9 76

Holtpont A szálak olyan eseményre (vagy feltételre) várnak, amely sosem következik be Példa: Forgalmi dugó kereszteződésben Egyik kocsi sem tud be- vagy visszafordulni Élőpont Példa: A szálak egymásra reagálva oda-vissza váltanak állapotot Malomjátékban a csiki-csuki lépés Két harcos küzd egymással 77

3. rész Tervezési szempontok Programhelyességi szempontok Teljesítménynövelési szempontok Gyorsulás és hatékonyságnövekedés Szemcsézettség és terheléskiegyenlítés 78

Gyorsulás (egyszerű eset) Annak mértéke, hogy a számítás mennyivel gyorsabb az elképzelhető leggyorsabb soros végrehajtású kódnál Soros végrehajtás ideje / párhuzamos végrehajtás ideje Példa: Léckerítés lefestése 30 perc előkészület (soros) Egy léc lefestése 1 percet igényel 30 perc takarítás (soros) Eszerint 300 léc lefestése 360 percig tart (soros végrehajtás esetén) 79

Gyorsulás kiszámítása Festők száma Időszükséglet Gyorsulás 1 30 + 300 + 30 = 360 1.0X 2 30 + 150 + 30 = 210 1.7X 10 30 + 30 + 30 = 90 4.0X 100 30 + 3 + 30 = 63 5.7X Végtelen 30 + 0 + 30 = 60 6.0X Amdahl törvénye: A gyorsítási lehetőséget a soros szakasz ideje határolja be 80

Amdahl törvény A párhuzamos végrehajtás gyorsításának határát írja le T serial (1-P) n = 2 0.5 + 0.25 0.0 (1-P) P P/2 P/ T parallel = {(1-P) + P/n} T serial n = number of processors Speedup = T serial / T 1.0/0.5 1.0/0.75 = = 2.0 1.33 parallel A soros rész határozza meg a gyorsíthatóság mértékét 81

Maximális gyorsítás Amdahl t S (a) Egy processzor pt S Soros (1 p)t S Párhuzamosítható (b) Több processzor n processzor t P (1 p)t S /n 82

Amdahl törvénye (1967) Adott részszámítás felgyorsításának eredő gyorsító hatása: 1 1 P P S ahol P: a számítás felgyorsított szakasza S: P gyorsulásának mértéke Speciális eset (párhuzamosítás): F 1 F 1 N ahol F: a számítás soros szakasza N: processzorok száma 83

Gyorsítás a processzorok számának függvényében 20 p = 0% Gyorsítás 16 12 8 4 p = 5% p = 10% p = 20% 4 8 12 16 20 Processzorok száma 84

Maximális gyorsítás Maximális gyorsítás n, ha a processzorok száma n (lineáris gyorsítás) Ha gyorsítás nagyobb mint n, akkor szuper lineáris gyorsításnak nevezzük. 85

Szuper lineáris gyorsítás (a) Keresés minden altérben sorosan Start idő t S t S / n altér keresés Dt x t S / n Itt van a keresett elem x. altér 86

(b) Párhuzamos keresés minden altérben Dt megoldás 87

Gyorsulás kiszámítása Festők száma Időszükséglet Gyorsulás 1 30 + 300 + 30 = 360 1.0X 2 30 + 150 + 30 = 210 1.7X 10 30 + 30 + 30 = 90 4.0X 100 30 + 3 + 30 = 63 5.7X végtelen 30 + 0 + 30 = 60 6.0X Amdahl törvénye A gyorsítási lehetőséget a soros szakasz ideje határolja be Mi lenne, ha a tulajdonos szórópisztollyal egy óra alatt lefestené a 300 lécet? Hatékonyabb soros algoritmus Ha a többi munkásnak nincs szórópisztolya, legfeljebb mekkora gyorsulás érhető el a párhuzamosítással? 88

Hatékonyság Annak mértéke, hogy a számítási erőforrások (szálak) milyen arányban végeznek hasznos tevékenységet Gyorsulás / szálak száma [%] A hasznos tevékenység idejének százalékában szokás kifejezni Festők száma Időszükséglet Gyorsulás Hatékonyság 1 360 1.0X 100% 2 30 + 150 + 30 = 210 1.7X 85% 10 30 + 30 + 30 = 90 4.0X 40% 100 30 + 3 + 30 = 63 5.7X 5.7% végtelen 30 + 0 + 30 = 60 6.0X igen rossz 89

Szemcsézettség Gondoskodni kell arról, hogy minden szálnak jusson elég munka A túl kevés munka és a túl sok szál kezelése egyaránt rontja a teljesítményt Két ember fel tudja osztani egymás között a fűnyírást És három? Négy? Tíz? 90

Terheléskiegyenlítés A felosztás akkor a leghatékonyabb, ha a szálak mindegyike egyenlő mennyiségű munkát végez A feladatukat már elvégzett szálak tétlenül várakoznak A szálaknak tehát célszerű közel egyidőben befejezni a munkát Példa: Felszolgálás, ill. asztalbontás bankettnél Legjobb, ha minden pincérhez kb. ugyanannyi asztal tartozik 91

Összefoglaló A szál egymással kapcsolatban álló utasítások diszkrét sorozata, párhuzamos végrehajtási egység, függetlenül fut. A programon belül az ütemezés alapegysége (Windowsnál) A szálak használatának előnye a növekvő teljesítmény, a jobb erőforrás kihasználás és a hatékony adatmegosztás lehetősége A szálak használatából adódó lehetséges problémák: versenyhelyzet, holtpont, a kód komplexitás növekedése, portábilitási problémák, tesztelési és debuggolási nehézségek Minden folyamat legalább egy szálat birtokol, amely a főszál. Ez inicializálja a folyamatot és elkezdi futtatni az utasításokat A folyamaton belül minden szál megosztja a kód- és az adatszegmenst Konkurens szálak egy magon is futhatnak, párhuzamossághoz több mag szükséges 92

Összefoglaló (folytatás) A párhuzamos működés célja lehet egy feladat leggyorsabb végrehajtása, vagy az időegység alatt elvégzendő feladatok mennyiségének maximalizálása A program dekompozíciónak azt a módját, amely a futtatandó funkciók típusán és számán alapszik funkcionális dekompozíciónak nevezzük Nagy adathalmazok szétvágásával és a részek független kezelésével, azaz külön szálakhoz történő rendelésével végzett számítást adat dekompozíciónak nevezzük a többszálú alkalmazásban Azon alkalmazásokat, amelyek számos független funkcióból épülnek fel általában funkcionális dekompozícióval célszerű párhuzamosítani, míg a független adatokkal skálázható alkalmazásokat adat dekompozícióval Versenyhelyzet akkor alakulhat ki, amikor a programozó feltételezi a futás valamilyen sorrendjét, de nem biztosít ehhez megfelelő szinkronizációt 93

Összefoglaló (folytatás) Az élőpont olyan helyzetre utal, amikor a szálak nem tudnak előrelépni a számításban, de nem várakoznak valamilyen esemény bekövetkezésére A gyorsítás azt jellemzi, hogy a párhuzamos számítás relatíve mennyivel gyorsabb a megvalósítható leggyorsabb szoroshoz képest A párhuzamos hatékonyság annak a mértéke, hogy a szálak mennyire tevékenyek (mennyire végeznek munkát) a párhuzamos számítások során A szemcsézettség a számítások és a szinkronizációk arányát jellemzi A terheléskiegyenlítés a munka olyan megosztását jelenti a szálak között, hogy hozzávetőlegesen ugyanannyi feladatot oldjanak meg 94

Irodalom S. Akhter, J. Roberts: Multi-Core Programming (Increasing Performance through Software Multi-threading), Intel Press, 2006 A. Grama, A. Gupta, G. Karypis, V. Kumar: Introduction to Parallel Computing, 2nd edition Addison-Wesley, 2003, ISBN 0-201-64865-2 Iványi A.: Párhuzamos algoritmusok, ELTE Eötvös Kiadó, Budapest, 2005 http://elek.inf.elte.hu/parhuzamos Introduction to Parallel Computing https://computing.llnl.gov/tutorials/parallel_comp/ Albert I. (szerk.): A.NET Framework és programozása, Szak Kiadó, Budapest, 2004 J. Albahari: Threading in C#, http://www.albahari.com/threading/ F. Rasheed: Programmer's Heaven C# School Book (ingyenes és szabad felhasználású) http://www.programmersheaven.com/2/csharpbook 95