parallelism в .net 4 и vs2010

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

Upload: roman-kalita

Post on 15-Jun-2015

1.396 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Parallelism в .net 4 и vs2010

PARALLELISM В .NET 4.0 И VISUAL STUDIO 2010

Калита РоманTaskManagementSoft

Page 2: Parallelism в .net 4 и vs2010

Нововведения в 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

Демо - Parallel Sudoku

Page 4: Parallelism в .net 4 и vs2010

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

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

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

Task – новый тип для многопоточности

> ThreadPool.QueueUserWorkItem> Хорошо подходит для того чтобы стартовать и

«забыть»> Но нехватает:

> Waiting> Canceling> Continuing> Exceptions> Debugging> Dataflow between operations> …

Page 8: Parallelism в .net 4 и vs2010

Демо – Task, Concurrent collection

Page 9: Parallelism в .net 4 и vs2010

Новые примитивы синхронизации

> 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

Распараллеливаем циклы

> 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

Легко с 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

Легко с 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

Демо – PLINQ

Page 14: Parallelism в .net 4 и vs2010

Отлаживаем параллелизм

> Concurrency Profiler> Parallel Debugger

> Parallel tasks> Parallel stack

Page 15: Parallelism в .net 4 и vs2010

Демо – Profiler views, debugger tools

Page 16: Parallelism в .net 4 и vs2010

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

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