Možnosti programování se sdílenými proměnnými. Týden 6 Programování se sdílenými proměnnými (Shared Variables, SV) Procesy a vlákna.

Podobné dokumenty
Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Procesy a vlákna (Processes and Threads)

Principy operačních systémů. Lekce 6: Synchronizace procesů

Procesy a vlákna - synchronizace

Operační systémy. Přednáška 4: Komunikace mezi procesy

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Paralelní programování

Paralelní programování

Paralelní programování

Paralelní programování

Vývoj aplikačních programů pro systémy DAQ Možnosti vývoje aplikačního SW Jazyk C/C++ Pokročilé techniky programování Vícevláknové aplikace

Paralelní programování

Virtuální přístroje. Použitá literatura. Operační systémy, vývoj aplikačních programů, speciální techniky programování

Architektury paralelních počítačů II.

Pavel Procházka. 3. prosince 2014

Architektura a koncepce OS OS a HW (archos_hw) Architektura a koncepce OS Jádro OS (archos_kernel) Architektura a koncepce OS Typy OS (archos_typy)

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 11. březen, 2011

03. Synchronizace procesů. ZOS 2006, L. Pešička

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, / 23

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

Management procesu I Mgr. Josef Horálek

Principy počítačů a operačních systémů

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

Virtuální přístroje. Operační systémy, vývoj aplikačních programů, speciální techniky programování

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Synchronizace vjj 1

Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

Operační systémy. Přednáška 1: Úvod

Vícevláknové programování na CPU: POSIX vlákna a OpenMP I. Šimeček

Vláknové programování část I

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Téma 3. Procesy a vlákna

Konzistentnost. Přednášky z distribuovaných systémů

OPS Paralelní systémy, seznam pojmů, klasifikace

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

Vzájemné vyloučení procesů

Operační systémy. Přednáška 2: Procesy a vlákna

Principy operačních systémů. Lekce 1: Úvod

Principy operačních systémů. Lekce 4: Správa procesů

Synchronizace Mgr. Josef Horálek

Přidělování zdrojů (prostředků)

Paralelní programování

Procesy a vlákna Mgr. Josef Horálek

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ

C++ a vnitřní svět. David Bednárek Jakub Yaghob Filip Zavoral

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Stavy procesů. Požadavky na OS při práci s procesy

Procesy a vlákna. A3B33OSD (J. Lažanský) verze: Jaro 2014

Vlákna Co je to vlákno?

Procesy a vlákna IPC Komunikace mezi procesy (IPC = Inter-Process Communication)

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Základní úrovně: Moorův zákon: multi-core mikroprocesory (CPU) hypertherading pipeline many-core Paralelní systém Instrukce iterace procedura Proces

2010/2011 ZS. Operační systém. procesy a vlákna. interakce a synchronizace

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

30. Vlákna, jejich atributy, metody, organizace a stavy. Možnosti synchronizace. (A7B36PVJ)

Stavy procesů. Požadavky na OS při práci s procesy

ČÁST 1. Základy 32bitového programování ve Windows

Von Neumannovo schéma

Vícevláknové aplikace

IB109 Návrh a implementace paralelních systémů. Organizace kurzu a úvod. RNDr. Jiří Barnat, Ph.D.

09. Memory management. ZOS 2006, L.Pešička

Služba ve Windows. Služba (service) je program

Cvičení č. 6. Synchronizace ve Windows. 3 Body

ZOS. Verze 2010-srpen-31, v3 L. Pešička

Distribuovaný systém je takový systém propojení množiny nezávislých počítačů, který poskytuje uživateli dojem jednotného systému.

Management procesu II Mgr. Josef Horálek

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Operační systémy. Tomáš Vojnar IOS 2009/2010. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Přidělování paměti II Mgr. Josef Horálek

Architektury paralelních počítačů I.

Teoretická informatika Tomáš Foltýnek Paralelní programování

ÚVOD DO OPERAČNÍCH SYSTÉMŮ

Principy operačních systémů

Přehled paralelních architektur. Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur

Téma 3 Procesy a vlákna

Pojem Výpočetní proces. Požadavky na OS při práci s procesy. Stavy procesů

Windows a real-time. Windows Embedded

Přednáška 11. Historie MS Windows. Architektura Windows XP. Grafické a znakové rozhraní. Úlohy, procesy a vlákna.

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Matematika v programovacích

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Operační systémy. Přednáška 5: Komunikace mezi procesy

Paralelní a distribuované výpočty (B4B36PDV)

Ukázka zkouškové písemka OSY

Synchronizace procesů

Využijte plný výkon procesorů s více jádry v LabVIEW 8.5

Poslední aktualizace: 21. května 2015

Úvod do OpenMP. Jiří Fürst

Synchronizace procesů

Transakce a zamykání Jiří Tomeš

Stavba operačního systému

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Ústav technické matematiky FS ( Ústav technické matematiky FS ) / 35

Systém adresace paměti

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Transkript:

Možnosti programování se sdílenými proměnnými Týden 6 Programování se sdílenými proměnnými (Shared Variables, SV). Sekvenční jazyk + paralelizující kompilátor = zatím málo efektivní (implicitní paralelismus). Sekvenční jazyk + knihovní programy (nízká úroveň) (programování s vlákny Pthreads, Solaris, Java,...) 3. Paralelní programovací jazyky (např. SGI Power C, C//,...) 4. Sekvenční jazyk + OpenMP API, standard nezávislý na platformě: - direktivy pro kompilátor (pragma), - i knihovní programy. 5. Zasílání zpráv (MPI, PVM) a datově paralelní programování (HPF) lze použít i na systémech se sdílenou pamětí (SMP). Procesy Procesy a vlákna hromada kód descriptory souborů tabulky pro správu paměti deskriptor procesu Procesy těžké váhy - úplně separátní programy s vlastními proměnnými, em a alokací v paměti (adresovým prostorem). O.K. pro OS. Vytvoření procesu v Unixu může trvat stovky tisíc taktů CPU! Vytvoření vláken je mnohem rychlejší. 3 data hromada descriptory souborů deskriptor procesu vlákno vlákno kód tabulky pro správu paměti Vlákno = +, myid, priorita, registry, privátní paměť. Proces startuje jako základní vlákno. Vlákno může vytvořit další vlákna za pomoci kernelu nebo uživatelské knihovny. Proces tak může mít mnoho vláken; všechna sdílejí týž adres. prostor. Vlákna jsou lehká = málo alokované paměti, málo kopírování, menší. 4 Proč používat vlákna? Příklad: Win3 Threads Pro reprezentaci souběžných entit (systémové programování a uživatelská rozhraní) Komerční Thread Libraries Win3 threads (Windows NT and Windows 95). Pthreads (Portable Operating System Interface, POSIX Thread Interface). (SGI IRIX, Sun Solaris, HP-UX, IBM AIX, Linux, atd.). Solaris threads (SunOS 5.x). Multiprocessing kvůli výkonnosti -Souběžnost je pod kontrolou programátora. - Programy by mohly být napsány sekvenčně. - Toto multivláknové programování je snadnější. 5 Thread Management: CreateThread(), SuspendThread(), ResumeThread(), ExitThread(), TerminateThread(), WaitForSingleObject(), WaitForMultipleObjects(), CloseHandle() Critical Sections: InitializeCriticalSection(), DeleteCriticalSection(), EnterCriticalSection(), LeaveCriticalSection() Mutexes: CreateMutex(), OpenMutex(), WaitForSingleObject(), WaitForMultipleObjects(), ReleaseMutex(), CloseHandle() Semaphores: CreateSemaphore(), WaitForSingleObject(), WaitForMultipleObjects() ReleaseSemaphore(), CloseHandle() Events: CreateEvent(), SetEvent(), ResetEvent(), PulseEvent(), WaitForSingleObject(), WaitForMultipleObjects(), CloseHandle() Interlocked Operations: InterlockedIncrement(), InterlockedDecrement(), InterlockedExchange() Thread Priorities: SetThreadPriority(), GetThreadPriority() 6

Model zpracování vláken: klíčové body Soubor procesorů, soubor vláken. Vlákna mezi sebou jsou na stejné úrovni. Dynamické vytváření vláken (fork - join, thread_create,...) Může být mnohem víc vláken než procesorů. Vlákna se dynamicky přepínají mezi procesory. Vlákna sdílejí přístup do paměti. Vlákna je třeba synchronizovat. Podpora procesů, vláken, přepínání kontextu, zámků, bariér: HW, SW (multiprocesorový kernel, knihovny). Volání systému nebo knihovní programy se nazývají bezpečné k vláknům (thread-safe), když mohou být volány z více vláken současně a výsledky jsou vždy správné. 7 Úloha synchronizace a komunikace Paralelní počítač je kolekce procesorů, které kooperují a komunikují, aby řešily velké problémy rychle. Každá komunikace přes sdílenou paměť s privátními cache generuje výpadek a vyžaduje synchronizaci; časová = (výpadek zápisu) + doba zápisu + synchronizační + výpadek čtení + doba čtení umělá komunikace vlivem - omezené kapacity pamětí cache - falešného sdílení ( první procesor píše, druhý čte z téhož bloku, každý užívá jinou adresu) Podmínky pro paralelní čtení a zápisy ve společném adresovém prostoru (AP) I k = množina paměťových míst čtená procesem P k O h = množina paměťových míst modifikovaná procesem P h I O (Bernsteinovy) I O postačující podmínky: O O Příklad: Procesy id = 0,,..., P- nesmí obsahovat příkazy typu sum = sum + mypart [id] # jedině v kritické sekci! x = n; x = m; a = b; c = a; 9 Komunikace pp se synchronizací pomocí obyčejných proměnných p p a = 3.45; flag = ; while (flag==) ; print a ; a = b; inc(count,); check(count,); c = a; a = 3.45; set(flag); check(flag); print a; a = b; inc(count,); check(count,); c = a; Zápis do A a do flagu nelze přehodit Čtení A a flagu nelze přehodit moderní procesory ale často pořadí přístupů do paměti mění! Flag a count musí být proto označeny (deklarovány) jako synchronizační proměnné. Příklad špatné synchronizace Skupinová komunikace AAS přes SM p lock (L) a= ; b = 3.45 unlock (L) p lock (L)... = a;... = b; unlock (L) Muselo by být jasné, že p zamkne lock první! Jinak nebude fungovat. p p p3 odk =.; odk =.3; od3k = 0.34; odk3 = 3.45; odk3 = 4.5; od3k =.67; bar (aas, 3) bar (aas, 3) bar (aas, 3) = odk; = odk; = odk3; = od3k; = od3k; = odk3; # direktiva dělej multivláknově: acquire(lock); a = b; release(lock); acquire(lock); c = a; release(lock); Zápisy musí dokončit před bar Čtení musí začít po bar

Synchronizace přístupů ke sdílené proměnné Paralelní zpracování si lze představit jako prolnutí atomických akcí jednotlivých procesů. Při interakci procesů ne všechna prolnutí jsou přijatelná. Synchronizace má zabránit nežádoucím prolnutím: Thread : Thread :...... EnterCS; EnterCS; sum = sum + f(x); sum = sum + f(y); LeaveCS; LeaveCS;...... LD ADD LD ADD ST ST LD ADD ST LD ADD ST Zde místo CS stačí atomické FA (Fetch&Add) 3 Synchronizační mechanizmy 0. Atomicita znamená spojení atomických akcí jednotlivých instrukcí v nějaké sekvenci do jedné atomické sekvence (transakce). Umožňuje paralelismus (paralelní transakce). Nejčastěji se realizuje vzájemným vyloučením, ale není to jediný nebo nejlepší způsob.. Vzájemné vyloučení znamená, že v určitém okamžiku může být v kritické sekci (CS) programu pouze jeden proces CS se provádí atomicky a vynucuje si sekvenční zpracování. Nejčastěji se implementuje pomocí binární sdílené proměnné zámku (též mutex od mutual exclusion).. Podmínková sychronizace. Jeden proces nastaví boolovskou podmínku, další proces(y) ji testují a čekají na její nastavení. (= zpoždění akce až nastane podmínka). Sem patří bariéra, events (int), flags (bool). 4 Vlastnosti vzájemného vyloučení Nástroje pro řešení vzájemného vyloučení 0. V daném okamžiku provádí CS nejvýš jeden proces.. Je vyloučen deadlock, z procesů čekajících na vstup do CS musí být nakonec jeden úspěšný.. Žádný proces nevyhladoví, dostane se na každého. 3. Proces nesmí v CS skončit, být přerušen nebo vyřazen ze zpracování. 4. Chce-li vstoupit do CS jen jeden proces, nebude zbytečně zdržován. 5. Holý stroj, jen atomické čtení a zápis do sdílené paměti: Dekkerův algoritmus pro procesy (3 sdílené proměnné). pro N procesů: pořadové lístky.. HW podpora: atomické instrukce test&set, fetch&inc, swap nebo dvojice instrukcí LL,SC (Load Locked, Store Conditional). Sdílená proměnná lock = 0 (nikdo není v CS), jinak (obsazeno). Procesy cyklicky testují proměnnou lock ve smyčce (spinning), CPU zaměstnána (busy-waiting). Zámek může uvolnit jen proces, který jej užívá. 3. Semafory: vyší úroveň, nestrukturované. Nezáporné int s manipulované atomickými operacemi P a V. Kernel udržuje frontu procesů čekajících na semafor a přiděluje jej spravedlivě. Odpadá busy-waiting, nicméně zůstává kernelu. Binární nebo obecný semafor, ovládání z libovolného procesu. 4. Monitory: více strukturované než semafory. 6 Kritická sekce s pořadovými lístky Kritická sekce se zámkem test&set (TS) int ticket =, next = ; /*sdílené proměnné*/ process CS[i = to n] int myturn; Deklarace procesů, obdoba while (true) PLACED PAR i = FOR n myturn = FA(ticket,); SEQ CS while (myturn!= next) skip; Nebo zpoždění úměrné next++; /*nemusí atomicky*/ rozdílu myturn - next non Algoritmus s pořadovými lístky Sdílené proměnné ticket, next. Zajišťuje spravedlivý (FIFO) přístup k zámku. 7 bool lock = false; /*shared lock */ process CS[i = to n] while (true) while (TS(lock)) skip; lock = false; non Pokud zámek obsazený, (lock = ), čekej Nevýhoda: špatná výkonnost, TS chce soustavně zapisovat do bloku paměti cache, kopie téhož bloku v ostatních cache musí být proto pokaždé zneplatněny nebo aktualizovány. Soupeření o paměť, proměnná zámku je horké místo. 8 3

Kritická sekce se zámkem test a test&set Podmínková synchronizace bool lock = false; /*shared lock */ process CS[i = to n] while (true) while (lock) skip; /* cekej na lock=0 */ while (TS(lock)) /* pokud je 0, nastav */ while (lock) skip; /*jinak znovu cekej na 0*/ lock = false; non Testování v lokálních cache, soupeření o sběrnici odpadá. Po uvolnění zámku několik nebo všechny procesory zase budou chtít čerstvou kopii a budou soupeřit o sběrnici. 9 Návěští (flags) signalizují splnění nějaké synchronizační podmínky. Jako návěští lze použít normální proměnné a cyklicky je testovat (busy-waiting, CPU zaměstnána). Kvůli velká časové režii cyklického testování globálních proměnných se zavádějí podmínkové proměnné (též events) a operace nad nimi: wait (cond_var) -- čekej na splnění podmínky signal (cond_var) -- signalizuj splnění podmínky signal_all (cond_var) -- rozhlaš splnění podmínky všem čekajícím procesům status (cond_var) -- vrací počet procesů čekajících na splnění podmínky Příkaz wait nezaměstnává CPU, frontu procesů (vláken) čekajících na cond_var udržuje systém. 0 Interakce procesů se sdíleným AP Otázky výkonnosti multivláknování Jde o komunikaci spojenou se synchronizací. Analogie ke skupinovým komunikacím u zasílání zpráv. Spíše pro OS.. Asynchronní komunikace s jednomístným buferem (jednou sdílenou proměnnou): producent - konzument, pipeline.. Několik producentů, několik konzumentů, mnohomístný (kruhový) buffer (sdílená fronta). 3. Producenti specifickým konzumentům (křížový přepínač). 4. Čtenáři a písaři sdílené datové struktury (seznamu, tabulky, souboru, databáze apod.) -písař má exkluzivní přístup do sdílených dat - když žádný písař sdílená data nepoužívá, čtenáři je mohou souběžně číst (exkluzivní přístup: buď písař nebo čtenáři). 5. Stolující filozofové - procesy žádají současný přístup více než k jednomu prostředku. Režie spojená s udržováním vláken. Vyrovnání zátěže. Granularita (velikost úseků kódu do synchronizace) Soupeření o paměť. Algoritmus úlohy. Režie vytváření a rušení vláken. Režie plánování vláken. Režie synchronizace vláken. Režie vytvoření, rušení a synchronizace vláken Opakované řešení n úloh: par nebo bar? Ideál Realita Ideální bariéra Reálná bariéra par i bar čekají až dokončí všech n úloh: while (true) proces Worker[i= to n] par [i= to n] while (true) kód úlohy i kód úlohy i rap bar(n) vytvoření/ ukončení sekvenčního nastartování/ vypnutí příchodů odchodů Krajně neefektivní, je mohem dražší vytvářet a rušit procesy než je synchronizovat! Bariérová synchronizace 3 4 4

Režie plánování vláken Multivláknová výkonnost a granularita Vlákna mojou být buď připravená (běžet) nebo být pozastavená. Zásady plánování: procesory vlákna připravená k běhu nahrazují pozastavená; připravená vlákna vysoké priority předbíhají připravená vlákna nízké priority stojící připravená vlákna nahrazují běžící vlákna (preemption) Přepnutí vlákna stojí jistý čas. Nové naplnění cache stojí čas. Granularita = měřítko objemu výpočtů mezi operacemi s vlákny a synchronizačními operacemi. Jemná granularita = málo výpočtů mezi operacemi Hrubá granularita = mnoho výpočtů mezi operacemi Jetřeba zajistit rovnováhu mezi: příliš jemnou granularitou = příliš mnoho s vlákny. příliš hrubou granularitou = špatné rozdělení zátěže. 5 6 Vyrovnávání zátěže více vláken Multivláknová výkonnost: soupeření o paměť Vyrovnávání zátěže = všem procesorům stále přisunovat práci. Velký počet malých, stejně velkých vláken znamená lepší vyrovnání zátěže. Zvol dostatek vláken, aby se dala dobře vyrovnat zátěž. čas 9 vláken 8 vláken čas Výpadky cache jsou velmi drahé - mohou způsobit soupeření o paměť. Přepište program aby se zvýšila lokalita přístupů do paměti. Optimalizace sekvenčního chování cache bude minimalizovat soupeření o paměť při multivláknování. Toto je velká výhoda metodologie vývoje multivláknových programů jako sekvenčních. Pozor na past falešného sdílení. procesor procesor 7 8 Falešné sdílení Multivláknová výkonnost: použitý algoritmus hlavní paměť blok cache Řešení: Data modifikovaná dvěma procesy by neměla být v jednom bloku cache. Při zápisu jedním procesorem bude kopie bloku druhého procesoru zneplatněna nebo aktualizována, i když jej zapsaná položka nezajímá. CPU CPU Sekvenční složka α % omezuje zrychlení na S =/ α (Amdahlův zákon). Multivláknový algoritmus může být méně efektivní než nejlepší sekvenční algoritmus. Problém rozkladu může zvýšit celkovou zátěž (např. algoritmus PSRS). Problém rozkladu může snížit celkovou zátěž (např. při diskrétní optimalizaci). Problém rozkladu změní chování cache - často k lepšímu. 9 30 5