Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 14 лет назад пользователемRegfor
1 PARALLELISM В.NET 4.0 И VISUAL STUDIO 2010 Калита Роман TaskManagementSoft
2 Нововведения в Parallel Computing Parallel Pattern Library Resource Manager Task Scheduler Task Parallel Library Parallel LINQ Threads Native Concurrency Runtime Managed Libraries ThreadPool Data Structures Tools Async Agents Library Async Agents Library UMS Threads Microsoft Research Microsoft Research Visual Studio 2010 Parallel Debugger Windows Parallel Debugger Windows Profiler Concurrency Analysis Profiler Concurrency Analysis Race Detection Fuzzing Axum Visual 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
3 Демо - Parallel Sudoku
4 Накладые расходы при паралелизме
5 Global Queue Рабочий поток N Рабочий поток 1 ThreadPool в.NET 3.5 Program Thread Item 7 Item 3 Item 4 Item 5 Item 6 При создании множества потоков все они обращаются в глобальную очередь за потоками – результат накладные расходы И возникает все больше и больше блокировок Item 3.1
6 Program Thread ThreadPool в.NET 4 Lock-Free Global Queue Lock-Free Global Queue Local Work- Stealing 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
7 Task – новый тип для многопоточности
8 Демо – Task, Concurrent collection
9 Новые примитивы синхронизации Использованы при разработке PLINQ и TPL Для того чтобы решать большинство задач в многопоточности
10 for (int i = 0; i < n; i++) { work(i); } for (int i = 0; i < n; i++) { work(i); } foreach(var item in data) { work(item); } foreach(var item in data) { work(item); } StatementA(); StatementB; StatementC(); StatementA(); StatementB; StatementC(); Parallel.For(0, n, i=> { work(i); }); Parallel.For(0, n, i=> { work(i); }); Parallel.ForEach(data, item=> { work(item); }); Parallel.ForEach(data, item=> { work(item); }); Parallel.Invoke( () => StatementA(), () => StatementB, () => StatementC()); Parallel.Invoke( () => StatementA(), () => StatementB, () => StatementC());
11 Легко с LINQ на PLINQ > LINQ to Objects: int[] output = arr.Select(x => Foo(x)).ToArray(); int[] output = arr.Select(x => Foo(x)).ToArray(); int[] output = arr.AsParallel().Select(x => Foo(x)).ToArray(); int[] output = arr.AsParallel().Select(x => Foo(x)).ToArray(); > PLINQ:
12 Легко с LINQ на PLINQ src.Select(x => Foo(x)).TakeWhile(x => Filter(x)).AsParallel().Select(x => Bar(x)).ToArray(); src.Select(x => Foo(x)).TakeWhile(x => Filter(x)).AsParallel().Select(x => Bar(x)).ToArray();
13 Демо – PLINQ
14 Отлаживаем параллелизм
15 Демо – Profiler views, debugger tools
16 Cсылки и источники
17 Спасибо за внимание:)
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.