1 / 20

Paralelní programování

Paralelní programování. Synchronizace. Synchronizace. nejen provedení dvou operací ve stejný čas jakákoliv forma časové koordinace více procesů nebo u dálostí synchronizační pravidla / omezení – dané požadovanou činností, dané aplikací, musí se vymyslet

galena
Download Presentation

Paralelní programování

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Paralelní programování Synchronizace

  2. Synchronizace • nejen provedení dvou operací ve stejný čas • jakákoliv forma časové koordinace více procesů nebo událostí • synchronizační pravidla / omezení – dané požadovanou činností, dané aplikací, musí se vymyslet • v běžném životě se synchronizujeme pomocí času • v PC je většinou nepoužitelný

  3. PC čas • kvůli preemptivnímu multitaskingu je čas nespojitý • musel by se měřit čas každé instrukce • IO operace, takže je čas provedení instrukce v podstatě nezjistitelný • stejně vzhledem k rychlosti provádění instrukcí jsou hodiny procesoru málo přesné • rozlišení na mikrosekundy, ale záleží na taktovací frekvenci procesoru, která se může měnit dynamicky • a i tak je to stejně málo • stejně je to jedno

  4. PC čas • neznáme přesný čas instrukce / operace • měření by bylo brutálně náročné • musíme použít jiné synchronizační nástroje • inkrementální počítaní času nefunguje • hlavně kvůli přeplánování • základní problémy: • serializace • vzájemné vyloučení (mutual exclusion) • na tyto se dá všecko ostatní redukovat • jedním kódem může procházet více vláken

  5. Serializace • zajištění posloupnosti událostí • události se provedou sekvenčně, pokud je zaručeno pořadí jejich provedení • události se provedou souběžně, pokud se mohou provést ve stejný čas nebo v různém pořadí • souběžně se provádí něco o čem z kódu nedokážeme říct, který řádek se provede dřív • nedeterministické • procesy se mohou přeplánovat • každé spuštění může dopadnout jinak • experiment je k ničemu, je nutné prokázat správnost teoreticky

  6. Serializace • Mach musí obědvat dříve než Šebestová • Execution Path • Mach musí dát Šebestové vědět, že obědval

  7. Serializace • a4 a b3 probíhá sekvenčně • a5 a b4 a b5 probíhá souběžně

  8. Globální data • nutnost synchronizace není vždy zřejmá • závislá na prostředí, kompilátoru, … • jakákoliv práce se sdílenou proměnnou vyžaduje maximální opatrnost • atomičnost – špatně viditelná

  9. Globální data • většinou bude fungovat • jaké situace mohou nastat? • globální data mohou být sdílená • musíme vždy předpokládat, že jsou

  10. Vzájemné vyloučení • Je jedno kdo obědvá dříve, ale nesmí obědvat současně • Mutual exclusion

  11. Vzájemné vyloučení

  12. Semafor • programová struktura, která se hodí pro synchronizaci • strukturované, přenosné, univerzální • alternativy: komplexnější struktury • semafor = integer • při vytvoření se nastaví počáteční hodnota • při průchodu se sníží o 1 • pokud je hodnota záporná pak se vlákno uspí (will block) • pokud se hodnota semaforu zvýší na 0, pak je některé ze spících vláken probuzeno (wake-up)

  13. Semafor • u standardního semaforu nevíme, které vlákno bude probuzeno • může existovat „férový“ semafor, který probudí nejstarší vlákno • zabraňuje stárnutí • u pracovních vláken není moc žádoucí • aktuální hodnotu semaforu nelze zjistit – stav semaforu je „neurčitý“ • semafor je atomický • vlákno buď projde nebo neprojde • hodnota semaforu = počet propustek • binární semafor = jedna propustka = mutex

  14. Semafor • průchod semaforem • wait() = acquire() = decrement() • signal() = release() = increment() • existují různá rozšíření: • fair semaphore • tryacquire() • semafory se kombinují do složitějších struktur • experiment je k ničemu • synchronizační vzory

  15. Testování • testování není příliš účinné • to, že něco funguje neznamená, že to funguje vždy • lepší je dokázat, že to fungovat musí (nebo nemůže) • ale pomáhá to http://akela.mendelu.cz/~xpopelka/cs/pp/paralelni.zip • Python 2.7 + Swampy • python lib\swampy\Sync.py sync_code\test.py • slovo Threadoznačuje začátek kódu ve vláknu • před prvním Threadje společná část • komentáře se považují za prováděný řádek

  16. Testování • vytvoření semaforu: • semafor = Semaphore(1) • metody: • semafor.wait(), semafor.signal() • proměnné, print(), • podmínky • if něco: něco • nebo s odsazením • funkce num_threads()

  17. Synchronizační vzory – signalizace • semafor prácehotova(0) • binární semafor • řeší serializaci

  18. Synchronizační vzory – setkání • ani jeden nesmí pokračovat pokud nedorazil ten druhý • setkání = rendezvous

  19. Synchronizační vzory – setkání • varianty?

  20. Synchronizační vzory – setkání • uváznutí – deadlock • varianty?

More Related