Parallelism в .net 4 и vs2010

1,524 views
1,439 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,524
On SlideShare
0
From Embeds
0
Number of Embeds
54
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Проблемы параллелизма свзязаны с дополнительными накладными расходами. Потоки, и многопоточность имеют свою цену. Например есть расходы с созданием, завршением потока, созданием делегата который выполняет работу. Расходы связанные с выполнением и 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

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

    ×