Jakub Čermák jakub@jcermak.cz, 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<T> - 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<DetRot_StepsCnt; ++DetRotAngleId) { //nějaký výpočet } 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--130- parallel_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.