Paralelní rozšíření - Parallel Extensions

Paralelní rozšíření byl název vývoje pro a podařilo se konkurence knihovna vyvinutý na základě spolupráce mezi Microsoft Research a CLR tým v Microsoft. Knihovna byla vydána ve verzi 4.0 .NET Framework.[1] Skládá se ze dvou částí: Paralelní LINQ (PLINQ) a Knihovna paralelních úloh (TPL).[2][3] Skládá se také ze sady koordinační datové struktury (CDS) - sady datové struktury slouží k synchronizaci a koordinaci provádění souběžných úkolů.[4]
Paralelní LINQ
PLINQnebo Paralelní LINQ, paralelizace provádění dotazů na objekty (LINQ to Objects) a data XML (LINQ to XML). PLINQ je určen k vystavení paralelnost dat pomocí dotazů.[2] PLINQ může paralelizovat jakýkoli výpočet na objektech, který byl implementován jako dotazy. Objekty však musí implementovat IParallelEnumerable
rozhraní, které je definováno samotným PLINQ. Interně používá TPL k provedení.[4][5]
Knihovna paralelních úloh
The Knihovna paralelních úloh (TPL) je paralelismus úkolů součást paralelních rozšíření na .NET.[6] Vystavuje paralelní konstrukce jako paralelní Pro
a Pro každého
smyčky pomocí běžných volání metod a delegáti, tedy konstrukty lze použít z libovolného Jazyky CLI. Úloha rozmnožení a ukončení vlákna, stejně jako škálování počtu vláken podle počtu dostupných procesorů, provádí samotná knihovna,[3] používat kradení prací plánovač.[7]
TPL zahrnuje také další konstrukty jako Úkol a Budoucnost. A Úkol je akce, kterou lze provést nezávisle na zbytku programu. V tomto smyslu je sémanticky ekvivalentní vláknu, kromě toho, že se jedná o lehčí objekt a přichází bez režie vytváření vlákna OS. Úkoly jsou ve frontě a Správce úloh objekt a je naplánováno jejich spuštění na více podprocesech OS v fond vláken až přijde řada na nich.
Budoucnost je úkol, který vrací výsledek. Výsledek se počítá v podprocesu na pozadí zapouzdřeném pomocí Budoucnost objekt a výsledek se ukládá do mezipaměti, dokud se nenačte.[3] Pokud dojde k pokusu o načtení výsledku dříve, než byl vypočítán, bude žádající vlákno blokováno, dokud nebude k dispozici výsledek.[6]
Druhým konstruktem TPL je Paralelní class.TPL poskytuje základní formu strukturovaného paralelismu pomocí tří statických metod ve třídě Parallel:
- Parallel.Invoke
- Provede paralelně řadu delegátů akce a pak čeká na jejich dokončení
- Paralelní
- Paralelní ekvivalent C # pro smyčku
- Parallel.ForEach
- Paralelní ekvivalent C # foreach smyčka
Architektura
Hlavní koncept v Parallel Extensions to .NET je a Úkol
, což je malá jednotka kódu, obvykle reprezentovaná jako funkce lambda, které lze provést samostatně. PLINQ i TPL API poskytuje metody pro vytvoření Úkolů - PLINQ rozdělí dotaz na menší Úkoly a Paralelní
, Parallel.ForEach
a Parallel.Invoke
metody rozdělují smyčku na Úkoly.
PFX zahrnuje a Správce úloh
objekt, který naplánuje provedení úkolů. Správce úloh obsahuje globální fronta úloh, které jsou poté provedeny. Také zapouzdřuje více vlákna na které jsou Úkoly prováděny. Ve výchozím nastavení je vytvořeno tolik vláken, kolik je v systému procesorů (nebo procesorových jader), i když toto číslo lze ručně upravit. Každé vlákno je přidruženo k vláknové frontě úloh. Při nečinnosti každé vlákno vyzvedne dávku Úkolů a umístí je do své místní fronty, kde jsou poté po jednom provedeny. Pokud je globální fronta prázdná, vlákno vyhledá Úkoly ve frontách svých vrstevníků a vezme úkoly, které byly ve frontě nejdelší (krádež úkolu). Při provádění budou Úkoly prováděny nezávisle, se změnou stavu jednoho úkolu nezávisle na ostatních. Výsledkem je, že pokud používají sdílený prostředek, musí být stále synchronizovány ručně pomocí zámků nebo jiných konstrukcí.
Viz také
- Runtime souběžnosti a koordinace
- Připojí
- Cilk /Cilk Plus - srovnatelná technologie pro C a C ++
- Grand Central Dispatch srovnatelná technologie v Mac OS X 10.6 vyvinutý uživatelem Jablko.
- Souběžnost Java srovnatelná technologie v Jáva (také známý jako JSR 166 ).
- Navlékání stavebních bloků (TBB) - srovnatelná technologie pro C ++ dostupná pro mnoho systémů vytvořených původně společností Intel (také open source)
- Vzor fondu vláken
- Paralelnost úkolů
Reference
- ^ „Co je nového v .NET Framework 4“. Citováno 21. září 2011.
- ^ A b „Programování ve věku souběžnosti: souběžné programování s PFX“. Citováno 16. října 2007.
- ^ A b C „MSDN Magazine: Task Parallel Library“. Archivovány od originál dne 14. října 2007. Citováno 16. října 2007.
- ^ A b „Červen 2008 CTP - paralelní rozšíření .NET FX“. Citováno 6. srpna 2008.
- ^ „Silnější agregace v PLINQ“. Citováno 6. srpna 2008.
- ^ A b Duffy, Joe (2009). Souběžné programování ve Windows. str. „887–929“. ISBN 978-0321434821.
- ^ Leijen, Daan; Schulte, Wolfram; Burckhardt, Sebastian (2009). "Návrh paralelní knihovny úkolů". Oznámení ACM SIGPLAN. 44 (10): 227. CiteSeerX 10.1.1.146.4197. doi:10.1145/1639949.1640106.