Paralelnost úkolů - Task parallelism
![]() | Tento článek obsahuje seznam obecných Reference, ale zůstává z velké části neověřený, protože postrádá dostatečné odpovídající vložené citace.Květen 2011) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Paralelnost úkolů (také známý jako paralelismus funkce a řídit paralelismus) je forma paralelizace z počítačový kód napříč více procesory v paralelní výpočty prostředí. Paralelismus úkolů se zaměřuje na distribuci úkoly —Současně provádí procesy nebo vlákna — Napříč různými procesory. Na rozdíl od paralelnost dat který zahrnuje spuštění stejné úlohy na různých složkách dat, paralelnost úloh se vyznačuje spuštěním mnoha různých úkolů současně na stejných datech.[1] Běžným typem paralelismu úkolů je potrubí který spočívá v přesunu jedné sady dat prostřednictvím řady samostatných úkolů, kde každý úkol lze provádět nezávisle na ostatních.
Popis
V systému s více procesory je paralelismus úkolů dosažen, když každý procesor provádí různé vlákno (nebo proces) na stejných nebo odlišných datech. Vlákna mohou provádět stejný nebo odlišný kód. Obecně platí, že různá podprocesy spouštění spolu komunikují, jak fungují, ale to není požadavek. Komunikace obvykle probíhá předáváním dat z jednoho vlákna do druhého jako součást a Pracovní postup.[2]
Jako jednoduchý příklad, pokud v systému běží kód na systému se dvěma procesory (CPU „a“ & „b“) v a paralelní prostředí a přejeme si dělat úkoly „A“ a „B“, je možné říci CPU „a“, aby provádělo úkol „A“ a CPU „b“, aby prováděly úkol „B“ současně, čímž se sníží doba běhu exekuce. Úkoly lze přiřadit pomocí podmíněné příkazy jak je popsáno níže.
Paralelismus úkolů zdůrazňuje distribuovanou (paralelizovanou) povahu zpracování (tj. Vláken), na rozdíl od dat (paralelnost dat ). Většina skutečných programů spadá někam na kontinuum mezi paralelismem úkolů a datovým paralelismem.[3]
Paralelnost na úrovni vlákna (TLP) je rovnoběžnost inherentní aplikaci, která běží více vlákna najednou. Tento typ paralelismu se vyskytuje převážně v aplikacích psaných pro komerční použití servery jako jsou databáze. Spuštěním mnoha podprocesů najednou jsou tyto aplikace schopny tolerovat velké množství I / O a latence paměťového systému, které mohou nastat jejich pracovní zátěže - zatímco jedno vlákno je zpožděno a čeká na přístup k paměti nebo disku, ostatní podprocesy mohou dělat užitečnou práci.
Využívání paralelismu na úrovni vláken začalo také s příchodem internetu pronikat na trh desktopů vícejádrový mikroprocesory. K tomu došlo, protože z různých důvodů je stále nepraktičtější zvyšovat buď rychlost hodin nebo instrukce na hodiny jednoho jádra. Pokud bude tento trend pokračovat, budou muset být navrženy nové aplikace, které budou využívat více vláken, aby mohly těžit ze zvýšení potenciálního výpočetního výkonu. To kontrastuje s předchozími inovacemi mikroprocesorů, ve kterých byl stávající kód automaticky zrychlen spuštěním na novějším / rychlejším počítači.
Příklad
The pseudo kód níže ilustruje paralelismus úkolů:
program: ... if CPU = "a" then do task "A" else if CPU = "b" then do task "B" end if ... end program
Cílem programu je udělat nějaký celkový čistý úkol („A + B“). Pokud napíšeme kód, jak je uvedeno výše, a spustíme jej na 2procesorovém systému, běhové prostředí jej provede následujícím způsobem.
- V SPMD (jeden program, více dat) systém, oba CPU provede kód.
- V paralelním prostředí budou mít oba přístup ke stejným datům.
- Klauzule „if“ rozlišuje mezi CPU. CPU "a" bude číst true na "if" a CPU "b" bude číst true na "else if", takže má svůj vlastní úkol.
- Oba procesory nyní provádějí samostatné bloky kódu současně a současně provádějí různé úkoly.
Kód spuštěný CPU "a":
program: ... udělat úkol "A" ... ukončit program
Kód provedený CPU "b":
program: ... udělat úkol "B" ... ukončit program
Tento koncept lze nyní zobecnit na libovolný počet procesorů.
Jazyková podpora
Paralelismus úkolů lze podporovat v jazycích pro obecné účely, ať už vestavěných zařízeních nebo knihovnách. Pozoruhodné příklady zahrnují:
- Ada: Úkoly (integrované)
- C ++ (Intel): Navlékání stavebních bloků
- C ++ (Intel): Cilk Plus
- C ++ (Open Source / Apache 2.0): RaftLib
- C, C ++, Objective-C (Apple): Grand Central Dispatch
- D: úkoly a vlákna
- Jít: goroutiny
- Jáva: Souběžnost Java
- .SÍŤ: Knihovna paralelních úloh
- Delphi (System.Threading.TParallel)
Příklady jemnozrnných paralelních jazyků úloh lze nalézt v oblasti Hardware Popis Jazyky jako Verilog a VHDL.
Viz také
Reference
- ^ Reinders, James (10. září 2007). "Pochopení paralelismu úkolů a dat | ZDNet". ZDNet. Citováno 8. května 2017.
- ^ Quinn, Michael J. (2007). Paralelní programování v C s MPI a openMP (Tata McGraw-Hill ed.). Nové Dillí: Pub Tata McGraw-Hill. ISBN 978-0070582019.
- ^ Hicks, Michael. „Základy souběžnosti“ (PDF). University of Maryland: Department of Computer Science. Citováno 8. května 2017.