Jakub Čermák
[email protected], http://www.jcermak.cz Microsoft Student Partner
Co paralelizace přinese? Jak paralelizovat? Jak si ušetřit práci? Jak nedělat běžné paralelizační chyby? Race condition, deadlocky
Jak efektivně debugovat paralelní aplikace?
Task Parallel Library a Parallel LINQ – novinky v .NETu 4.0 Doplňuje stávající podporu vláken v .NETu, nenahrazuje ji (!) Neřeší synchronizaci vláken, race-condition, locky, … „Pouze“ zjednodušuje některé případy paralelizace, kdy klasický (třída Thread) přístup není „názorný“ Neřeší clusterování (MPI, DRYAD)
Task Parallel Library (TPL) Imperativní paralelismus Základní primitiva – Task „vyšší“ funkcionalita – Parallel …. Thread-safe kontejnery v Systém.Threading.Collections
Parallel LINQ (PLINQ) Rozšíření klasického LINQu o práci s více vlákny Což díky jeho funkcionálním rysům jde pěkně Deklarativní paralelismus
5
Vyšší úroveň abstrakce 3 statické (přetížené funkce) For – paralelní varianta For cyklu ForEach – paralelní varianta foreach Invoke – spuštění několika nezávislých fcí najednou
Čeká na ukončení všech iterací Díky λ-výrazům vizuální podobnost k klasickými for/foreach cykly Thread-local úložiště
Nižší úroveň abstrakce Reprezentuje asynchronně vykonávaný úkol Základ pro „vyšší“ třídy (Parallel,…) Agregace výjimek Přerušení výpočtu a čekání na něj Cancellation
Stromové uspořádání (rodič-potomek)) Může vracet výsledek – výpočty na pozadí
„měkké“ ukončení tasku (X Abort u vláken) Změněno v β2 Původně Task.Current.IsCancellationRequested, Task.Current.AcknowledgeCancellation() a Task::Cancel()
Vytvoření CancellationTokenSource cts Předání cts.Token do konstruktoru Tasku Kontrola: if (token.IsCancellationRequested) throw new OperationCanceledException(token) Nebo token.ThrowIfCancellationRequested
LINQ – Language Integrated Query Přidává do .NETu způsob pro dotazování nad daty (IEnumerable, SQL2LINQ, XML, …)
PLINQ – rozšíření původních LINQovských rozhraní o paralelní přístup k datům Hodně LINQ metod jde jednoduše paralelizovat Sum, Min, Select a Where (většinou)…
Některé špatně (např. závislost na minulé iteraci) First, Last, Take, Skip, TakeWhile, SkipWhile, Concat, ElementAt, Zip
AsParallel() – extension metoda pro IEnumerable<>, vrací ParallelQuery, což je „paralelní“ IenumerableAsOrdered – zachování pořadí AsOrdered – zachování pořadí AsSequential – z paralelní do sekvenční
Vynucení paralelizace Závislosti mezi iteracema -> horší možnost paralelizace, např TakeWhile WithExecutionMode(ParallelExecutionMode.Force Parallelism)
Max počet vláken – MaxDegreeOfParalelism Bufferování - WithMergeOptions
var r = from i in Enumerable.Range(0, 12345) where IndecisiveMethod(i) select i;
var r = from i in Enumerable.Range(0, 12345).AsParallel() where IndecisiveMethod(i) select i;
Thread-safe kontejnery ConcurrentBag (neuspořádaná kolekce) ConcurrentDictonary ConcurrentQueue ConcurrentStack … ThreadLocal
- thread local storage
VS 2010, C++0x Podobné TPL, využití λ Parallel_for, parallel_for_each, parallel_invoke Task_group, structured_task_group Timery, locky, kritické sekce Thread-safe containers Podpora pro zprávy (C++ zprávy, ne Win32) …
Cross-platform rozšíření kompilátoru C/C++ Podpora ve Visual Studiu, gcc, Intel C Compiler, … Ovládaná pomocí #pragma direktiv + API funkce pro nastavování, lockování, … Obsahuje funkcionalitu ekviv. Parallel.For, Task + synchronizační primitiva a pomocné fce Lepší podpora sdílení proměnných Vyžaduje podporu v kompilátoru … #pragma omp parallel for schedule(static) reduction(+:MonteCarloPoints) shared(pValues) for(int DetRotAngleId=0; DetRotAngleId
18
Parallel Stacks Graf stack traců pro všechny vlákna
Zobrazování Parallel Tasks Concurrency visualizer (screenshoty) Sledování aktivit vláken, čekání apod.
Common Patterns for Poorly-Behaved Multithreaded Applications http://msdn.microsoft.com/enus/library/ee329530%28VS.100%29.aspx
Prezentace a dema na stažení na http://www.jcermak.cz/Prednasky.aspx
Článek o TPL a PLINQ: http://vbnet.cz/clanek--130parallel_extensions_for_net.aspx http://blogs.msdn.com/pfxteam/ http://blogs.msdn.com/nativeconcurrency/ - PPL www.msdn.com …
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.