Parallelism в .net 4 и vs2010
-
Upload
roman-kalita -
Category
Technology
-
view
1.396 -
download
2
Transcript of Parallelism в .net 4 и vs2010
![Page 1: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/1.jpg)
PARALLELISM В .NET 4.0 И VISUAL STUDIO 2010
Калита РоманTaskManagementSoft
![Page 2: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/2.jpg)
Нововведения в Parallel Computing
Parallel Pattern Library
Resource Manager
Task Scheduler
Task Parallel Library
Parallel LINQ
Threads
Native Concurrency Runtime
Managed Libraries
ThreadPool
Data Structures D
ata
Stru
ctur
es
Tools
AsyncAgentsLibrary
UMS Threads
MicrosoftResearch
Visual Studio 2010
ParallelDebugger Windows
Profiler Concurrency
Analysis
Race Detection
Fuzzing
AxumVisual F#
Managed Languages
Rx
Native Libraries
Managed Concurrency Runtime
DryadLINQ
Легенда: Research / Incubation Visual Studio 2010 / .NET 4 Windows 7 / Server 2008 R2
HPC Server
Доклад
Operating System
Доклад
![Page 3: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/3.jpg)
Демо - Parallel Sudoku
![Page 4: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/4.jpg)
Work
Накладые расходы при паралелизме> Необходимо деление операций> Выполнения потоков вызывает лишние накладные
расходы> Чем больше потоков тем больше лишних расходов> Для быстрого запуска/выполнения потоков
необходимо уменьшить накладные расходы связанные с этим
Overhead Overhead
Overhead
Overhead
Overhead
OverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverheadOverhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
Overhead
![Page 5: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/5.jpg)
Global Queue
Рабочий поток N
Рабочий поток 1
ThreadPool в .NET 3.5
…
Program Thread
Item 7
Item 3 Item 4
Item 5
Item 6
• При создании множества потоков все они обращаются в глобальную очередь за потоками – результат накладные расходы
• И возникает все больше и больше блокировок
Item 3.1
![Page 6: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/6.jpg)
Program Thread
ThreadPool в .NET 4
Lock-FreeGlobal Queue
LocalWork-
Stealing Queue
Local Work-
Stealing Queue
Work Thread 1
Work Thread N
…
…
Item 1Item 2
Item 3
Item 2.1
• Минимизации синхронизации и блокировок• Hill-Climbing – определение оптимального числа потоков в пуле в
зависимости от нагрузки на CPU
![Page 7: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/7.jpg)
Task – новый тип для многопоточности
> ThreadPool.QueueUserWorkItem> Хорошо подходит для того чтобы стартовать и
«забыть»> Но нехватает:
> Waiting> Canceling> Continuing> Exceptions> Debugging> Dataflow between operations> …
![Page 8: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/8.jpg)
Демо – Task, Concurrent collection
![Page 9: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/9.jpg)
Новые примитивы синхронизации
> Thread-safe, scalable collections> IProducerConsumerCollection<T>
> ConcurrentQueue<T>> ConcurrentStack<T>> ConcurrentBag<T>
> ConcurrentDictionary<TKey,TValue>
> Phases and work exchange> Barrier > BlockingCollection<T>> CountdownEvent
> Partitioning> {Orderable}Partitioner<T>
> Partitioner.Create
> Exception handling
> AggregateException> Initialization
> Lazy<T>> LazyInitializer.EnsureInitialized<T>
> ThreadLocal<T>
> Locks> ManualResetEventSlim> SemaphoreSlim> SpinLock> SpinWait
> Cancellation> CancellationToken{Source}
Использованы при разработке PLINQ и TPLДля того чтобы решать большинство задач в многопоточности
![Page 10: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/10.jpg)
Распараллеливаем циклы
> Control flow is a primary source of work
> Распаралеливаем если итерации независимы
> «Синхронное» поведение, поток выполнения не пройдет пока цикл не выполнится
> Возможности> Cancelation, breaking, task-local state, scheduling, degree of parallelism
> Поддержка профайлера Visual Studio 2010 (как у PLINQ)
for (int i = 0; i < n; i++) { work(i);}
foreach(var item in data) { work(item);}
StatementA();StatementB;StatementC();
Parallel.For(0, n, i=> { work(i);});
Parallel.ForEach(data, item=>{ work(item);});
Parallel.Invoke( () => StatementA(), () => StatementB, () => StatementC());
![Page 11: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/11.jpg)
Легко с LINQ на PLINQ
> LINQ to Objects:int[] output = arr .Select(x => Foo(x)) .ToArray();
int[] output = arr.AsParallel() .Select(x => Foo(x)) .ToArray();
>PLINQ:
![Page 12: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/12.jpg)
Легко с LINQ на PLINQ> PLINQ может выполнить все LINQ запросы> Простые запросы – проще выполнить> Разбивайте сложные запросы на более простые,
так чтобы только та часть которую нужно распралелить была PLINQ: src.Select(x => Foo(x)) .TakeWhile(x => Filter(x)) .AsParallel() .Select(x => Bar(x)) .ToArray();
![Page 13: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/13.jpg)
Демо – PLINQ
![Page 14: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/14.jpg)
Отлаживаем параллелизм
> Concurrency Profiler> Parallel Debugger
> Parallel tasks> Parallel stack
![Page 15: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/15.jpg)
Демо – Profiler views, debugger tools
![Page 16: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/16.jpg)
Cсылки и источники> DevCenter
> http://msdn.com/concurrency> Исходные коды примеров
> http://code.msdn.microsoft.com/ParExtExamples> Блоги
> http://blogs.msdn.com/pfxteam>> Parallel stack
> Доклады, видео> http://channel9.msdn.com/learn > http://microsoftpdc.com/
![Page 17: Parallelism в .net 4 и vs2010](https://reader036.fdocument.pub/reader036/viewer/2022062307/557f001fd8b42ac0728b47ac/html5/thumbnails/17.jpg)
Спасибо за внимание:)