paralelní programování
DESCRIPTION
Paralelní programování. Synchronizační vzory – bariéra. Synchronizační vzory – mutex. kolik semaforů? jaká počáteční hodnota?. Synchronizační vzory – mutex. kritická sekce acquire = wait, release = signal multiplex?. Synchronizační vzory – multiplex. semafor zámek - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/1.jpg)
Paralelní programování
Synchronizační vzory – bariéra
![Page 2: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/2.jpg)
Synchronizační vzory – mutex
• kolik semaforů?• jaká počáteční hodnota?
Mach Šebestováa1 count = count + 1 b1 count = count + 1
![Page 3: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/3.jpg)
Synchronizační vzory – mutex
• kritická sekce• acquire = wait, release = signal• multiplex?
Mach Šebestovámutex(1)
a1 mutex.acquire() b1 mutex.acquire()
a2 count = count + 1 b2 count = count + 1
a3 mutex.release() b3 mutex.release()
![Page 4: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/4.jpg)
Synchronizační vzory – multiplex
• semafor <> zámek• token, místnost, povolenka, permanentka• symetrické
Mach Šebestovámutex(n)
a1 mutex.acquire() b1 mutex.acquire()
a2 count = count + 1 b2 count = count + 1
a3 mutex.release() b3 mutex.release()
![Page 5: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/5.jpg)
Dežo v mutexu
![Page 6: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/6.jpg)
Synchronizační vzory – bariéra• symetrické rendezvous pro libovolný počet
vláken• všechna vlákna musí počkat až projdou bodem
setkání• po příchodu posledního vlákna mohou všichni
pokračovat dál• realizace
• n vláken• poslední vlákno otevře bariéru
![Page 7: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/7.jpg)
Synchronizační vzory – bariéra
mutex.wait()count = count + 1
mutex.signal()
if count == nbarrier.signal()
barrier.wait() kdy funguje?kdy nefunguje?
![Page 8: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/8.jpg)
Bariéra – turniket
mutex.wait()count = count + 1
mutex.signal()
if count == nbarrier.signal()
barrier.wait()barrier.signal()
![Page 9: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/9.jpg)
Synchronizační vzory – bariéra• praktické využití
• pracovní vlákna• po dokončení práce se výsledky spojí• rozdá se nová práce
• spouští se v cyklu• potřebujeme bariéru, kterou lze znovu použít• wait v kritické sekci (uvnitř mutexu) je
nepoužitelný• turniket – bod, kterým vlákna prochází po
jednom, ale bez zdržení
![Page 10: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/10.jpg)
Deadlock - drobná chybka
mutex.wait()count = count + 1if count == n
barrier.signal()barrier.wait()
barrier.signal()mutex.signal()
![Page 11: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/11.jpg)
Bariéra – další (ne)řešení
mutex.wait()count = count + 1
mutex.signal()
if count == nturnstile.signal()
turnstile.wait()turnstile.signal()
mutex.wait()count = count – 1
mutex.signal()
if count == 0turnstile.wait();
problem?
![Page 12: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/12.jpg)
Bariéra – další řešení
mutex.wait()count = count + 1if count == n
turnstile2.wait()turnstile.signal()
mutex.signal()
turnstile.wait()turnstile.signal()/* process */mutex.wait()
count = count – 1if count == 0
turnstile.wait();turnstile2.signal();
mutex.signal()
turnstile2.wait()turnstile2.signal();
počáteční hodnoty?
![Page 13: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/13.jpg)
Bariéra – další řešení
mutex.wait()count = count + 1if count == nturnstile.signal(n)
mutex.signal()
turnstile.wait()/* process */mutex.wait()
count = count – 1if count == 0turnstile2.signal(n);
mutex.signal()
turnstile2.wait()
![Page 14: Paralelní programování](https://reader035.vdocuments.pub/reader035/viewer/2022062222/56816293550346895dd306b6/html5/thumbnails/14.jpg)