'

PARALLELISM В .NET 4.0 И VISUAL STUDIO 2010

Понравилась презентация – покажи это...





Слайд 0

PARALLELISM В .NET 4.0 И VISUAL STUDIO 2010 Калита Роман TaskManagementSoft


Слайд 1

Нововведения в Parallel Computing Parallel Pattern Library Resource Manager Task Scheduler Task Parallel Library Parallel LINQ Threads Native Concurrency Runtime Managed Libraries ThreadPool Data Structures Data Structures Tools Async Agents Library UMS Threads Microsoft Research Visual Studio 2010 Parallel Debugger Windows Profiler Concurrency Analysis Race Detection Fuzzing Axum Visual F# Managed Languages Rx Native Libraries Managed Concurrency Runtime DryadLINQ HPC Server Доклад Operating System Доклад


Слайд 2

Демо - Parallel Sudoku


Слайд 3

Work Накладые расходы при паралелизме Необходимо деление операций Выполнения потоков вызывает лишние накладные расходы Чем больше потоков тем больше лишних расходов Для быстрого запуска/выполнения потоков необходимо уменьшить накладные расходы связанные с этим Overhead Overhead Overhead Overhead Overhead


Слайд 4

Global Queue Рабочий поток N Рабочий поток 1 ThreadPool в .NET 3.5 … Item 7 Item 3 Item 4 Item 5 Item 6 При создании множества потоков все они обращаются в глобальную очередь за потоками – результат накладные расходы И возникает все больше и больше блокировок Item 3.1


Слайд 5

ThreadPool в .NET 4 Lock-Free Global Queue Local Work-Stealing Queue Local Work-Stealing Queue Work Thread 1 Work Thread N … … Item 1 Item 2 Item 3 Item 2.1 Минимизации синхронизации и блокировок Hill-Climbing – определение оптимального числа потоков в пуле в зависимости от нагрузки на CPU


Слайд 6

Task – новый тип для многопоточности ThreadPool.QueueUserWorkItem Хорошо подходит для того чтобы стартовать и «забыть» Но нехватает: Waiting Canceling Continuing Exceptions Debugging Dataflow between operations …


Слайд 7

Демо – Task, Concurrent collection


Слайд 8

Новые примитивы синхронизации 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 Для того чтобы решать большинство задач в многопоточности


Слайд 9

Распараллеливаем циклы 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());


Слайд 10

Легко с LINQ на PLINQ LINQ to Objects: int[] output = arr .Select(x => Foo(x)) .ToArray(); int[] output = arr.AsParallel() .Select(x => Foo(x)) .ToArray(); PLINQ:


Слайд 11

Легко с LINQ на PLINQ PLINQ может выполнить все LINQ запросы Простые запросы – проще выполнить Разбивайте сложные запросы на более простые, так чтобы только та часть которую нужно распралелить была PLINQ: src.Select(x => Foo(x)) .TakeWhile(x => Filter(x)) .AsParallel() .Select(x => Bar(x)) .ToArray();


Слайд 12

Демо – PLINQ


Слайд 13

Отлаживаем параллелизм Concurrency Profiler Parallel Debugger Parallel tasks Parallel stack


Слайд 14

Демо – Profiler views, debugger tools


Слайд 15

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/


Слайд 16

Спасибо за внимание:)


×

HTML:





Ссылка: