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í:

Příklady jemnozrnných paralelních jazyků úloh najdete v oblasti hardwarových jazyků, jako jsou Verilog a VHDL .

Viz také

Reference