Paralelismus úkolů - Task parallelism
Rovnoběžnost úloh (také známý jako funkce rovnoběžnosti a řídicí rovnoběžnosti ) je forma paralelizace z počítačového kódu přes více procesorů v paralelních výpočetních prostředích. Paralelismus úkolů se zaměřuje na distribuci úkolů - souběžně prováděných procesy nebo vlákny - napříč různými procesory. Na rozdíl od paralelismu dat, který zahrnuje spuštění stejné úlohy na různých složkách dat, se paralelnost úloh odlišuje spuštěním mnoha různých úkolů současně na stejná data. Běžným typem paralelismu úkolů je pipelining, 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 pracovního postupu .
Jako jednoduchý příklad, pokud v systému běží kód na 2procesorovém systému ( CPU „a“ & „b“) v paralelním prostředí a chceme provádět úkoly „A“ a „B“, je možné říct CPU „a“ provádí úlohu „A“ a CPU „b“ provádí úlohu „B“ současně, čímž zkracuje dobu běhu provádění. Úkoly lze přiřadit pomocí podmíněných příkazů, jak je popsáno níže.
Paralelismus úloh zdůrazňuje distribuovanou (paralelizovanou) povahu zpracování (tj. Vláken), na rozdíl od dat ( datový paralelismus ). Většina skutečných programů spadá někam na kontinuum mezi paralelismem úkolů a datovým paralelismem.
Paralelismus na úrovni vláken ( TLP ) je paralelismus vlastní aplikaci, která spouští více vláken najednou. Tento typ paralelismu se vyskytuje převážně v aplikacích napsaných pro komerční 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 také začalo pronikat na trh desktopů s příchodem vícejádrových mikroprocesorů. 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, bude nutné navrhnout 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
Níže uvedený pseudokód ilustruje paralelismus úlohy:
program: ... if CPU = "a" then do task "A" else if CPU="b" then do task "B" end if ... end program
Cílem programu je provést 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 systému SPMD (jeden program, více dat) provede kód oba procesory .
- 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.
- Nyní oba procesory současně provádějí samostatné bloky kódu a provádějí různé úkoly současně.
Kód provedený CPU "a":
program: ... do task "A" ... end program
Kód provedený CPU "b":
program: ... do task "B" ... end program
Tento koncept lze nyní zobecnit na libovolný počet procesorů.
Jazyková podpora
Paralelnost úkolů může být podporována v obecných jazycích buď vestavěným zařízením, nebo knihovnami. Pozoruhodné příklady zahrnují:
- Ada: Úkoly (integrované)
- C ++ (Intel): Threading Building Blocks
- C ++ (Intel): Cilk Plus
- C ++ (Open Source / Apache 2.0): RaftLib
- C, C ++, Objective-C, Swift (Apple): Grand Central Dispatch
- D: úkoly a vlákna
- Delphi (System.Threading.TParallel)
- Go: goroutines
- Java: Souběžnost Java
- .NET: paralelní knihovna úloh
Příklady jemnozrnných paralelních jazyků úloh najdete v oblasti hardwarových jazyků, jako jsou Verilog a VHDL .