Parallelism в .net 4 и vs2010
Upcoming SlideShare
Loading in...5
×
 

Parallelism в .net 4 и vs2010

on

  • 1,912 views

 

Statistics

Views

Total Views
1,912
Views on SlideShare
1,863
Embed Views
49

Actions

Likes
0
Downloads
12
Comments
0

4 Embeds 49

http://msug.vn.ua 36
http://www.linkedin.com 6
http://vinproga.at.ua 4
http://www.slideshare.net 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Проблемы параллелизма свзязаны с дополнительными накладными расходами. Потоки, и многопоточность имеют свою цену. Например есть расходы с созданием, завршением потока, созданием делегата который выполняет работу. Расходы связанные с выполнением и conceptional overhead.Предположим есть какая-то задача, если это цельная задача, она будет использовать один поток.Для того чтобы выполнить эту задачу в 4 потока необхожимо ее разделить на 4 части
  • Попробую расказать коротко про тредпул в 3.5. Основная идея – треды управляются системой и это потому что треды относительно дорогоие, дорогоие для создание и для уничтожения, дорого создавать много потоков и дорого переключатся между ними. И как результат мы старались выполнять работу как можно меньшим числом потоков. И на самом деле это касается не только тредпула но и любых других потоков.Блокировки замедляют выполнение задач так как тредам приходится ждать ресурсов.Это также как и в реальном мире. На примере комманды разработчиков. Например задача может быть сделана двумя разработчикам достаточно эффективно. Мы хотим увеличить производительность и уменьшить время. Добавляя новых разработчиков к комманде мы достигаем этого но требуется все больше накладных расходов на совещания и прочее.
  • Lock-free queue – removed lock to reduce contention, instead used interlocked operationsLocal queue – LIFO order because cache locality, may be data cached by CPU(L1, L2, L3 caches)When work thread has no data it asks first local queue that global, and then it steals most old items from local queue of another thread

Parallelism в .net 4 и vs2010 Parallelism в .net 4 и vs2010 Presentation Transcript

  • PARALLELISM В .NET 4.0ИVISUAL STUDIO 2010
    Калита Роман
    TaskManagementSoft
  • Нововведения в Parallel Computing
    Managed Languages
    Tools
    Axum
    Visual F#
    Visual Studio 2010
    Доклад
    Parallel
    Debugger Windows
    Native Libraries
    Managed Libraries
    DryadLINQ
    Rx
    Async
    AgentsLibrary
    Parallel Pattern Library
    Profiler Concurrency
    Analysis
    Parallel LINQ
    Доклад
    Task ParallelLibrary
    Data Structures
    Data Structures
    Microsoft
    Research
    Native Concurrency Runtime
    Task Scheduler
    Race Detection
    Managed Concurrency Runtime
    Resource Manager
    ThreadPool
    Fuzzing
    Operating System
    HPC Server
    UMS Threads
    Threads
    Windows 7 / Server 2008 R2
    Research / Incubation
    Visual Studio 2010 / .NET 4
    Легенда:
  • Демо - Parallel Sudoku
  • Накладые расходы при паралелизме
    Необходимо деление операций
    Выполнения потоков вызывает лишние накладные расходы
    Чем больше потоков тем больше лишних расходов
    Для быстрого запуска/выполнения потоков необходимо уменьшить накладные расходы связанные с этим
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Work
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
    Overhead
  • ThreadPoolв .NET 3.5
    Item 5
    Global Queue
    Item 6
    Рабочий поток 1
    Рабочий поток N
    Item 3.1

    Item 3
    Item 4
    Program Thread
    Item 7
    • При создании множества потоков все они обращаются в глобальную очередь за потоками – результат накладные расходы
    • И возникает все больше и больше блокировок
  • ThreadPoolв .NET 4
    Item 3
    Local
    Work-Stealing Queue
    Local Work-Stealing Queue
    Item 2.1
    Lock-Free
    Global Queue

    Work Thread 1
    Work Thread N

    Item 1
    Item 2
    Program Thread
    • Минимизации синхронизации и блокировок
    • Hill-Climbing – определение оптимального числа потоков в пуле в зависимости от нагрузки на CPU
  • Task – новый тип для многопоточности
    ThreadPool.QueueUserWorkItem
    Хорошо подходит для того чтобы стартовать и «забыть»
    Но нехватает:
    Waiting
    Canceling
    Continuing
    Exceptions
    Debugging
    Dataflow between operations

  • Демо – Task, Concurrent collection
  • Новые примитивы синхронизации
    Использованы при разработке PLINQ и TPL
    Для того чтобы решать большинство задач в многопоточности
    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}
  • Распараллеливаем циклы
    Control flow is a primary source of work
    Распаралеливаем если итерации независимы
    «Синхронное» поведение, поток выполнения не пройдет пока цикл не выполнится
    Возможности
    Cancelation, breaking, task-local state, scheduling, degree of parallelism
    Поддержка профайлера Visual Studio 2010 (как у PLINQ)
    foreach(var item in data)
    {
    work(item);
    }
    for (int i = 0; i < n; i++)
    {
    work(i);
    }
    StatementA();
    StatementB;
    StatementC();
    Parallel.ForEach(data, item=>
    {
    work(item);
    });
    Parallel.For(0, n, i=>
    {
    work(i);
    });
    Parallel.Invoke(
    () => StatementA(),
    () => StatementB,
    () => StatementC());
  • Легко с LINQ на PLINQ
    LINQ to Objects:
    int[] output = arr
    .Select(x => Foo(x))
    .ToArray();
    • PLINQ:
    int[] output = arr.AsParallel()
    .Select(x => Foo(x))
    .ToArray();
  • Легко с LINQ на PLINQ
    PLINQ может выполнить все LINQ запросы
    Простые запросы – проще выполнить
    Разбивайте сложные запросы на более простые, так чтобы только та часть которую нужно распралелить была PLINQ:
    src.Select(x => Foo(x))
    .TakeWhile(x => Filter(x))
    .AsParallel()
    .Select(x => Bar(x))
    .ToArray();
  • Демо – PLINQ
  • Отлаживаем параллелизм
    Concurrency Profiler
    Parallel Debugger
    Parallel tasks
    Parallel stack
  • Демо – Profiler views, debugger tools
  • 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/
  • Спасибо за внимание:)