Parallel Programming with the .NET Framework 4 and Visual Studio 2010 Introducing

Parallel Programming with the .NET Framework 4 and Visual Studio 2010 Introducing

Introducing Parallel Programming with the .NET Framework 4 and Visual Studio 2010 Igor Ostrovsky Software Engineer Microsoft Corporation Agenda Why What Managed APIs/runtime (.NET 4) Tools (in the VS2010 IDE) Why The Manycore Shift Why Problem and Goals Free lunch is over How much will you pay? Multithreaded programming is hard today Goals Developer productivity Performance Agenda Checkpoint Why What Managed APIs/runtime (.NET 4) a.k.a. Parallel Extensions to .NET Tools (in the VS2010 IDE) Parallel Extensions to .NET Overview Pure .NET libraries Feature areas Task Parallel Library (TPL) Parallel LINQ (PLINQ) Thread-safe data structures and synchronization primitives Enhanced ThreadPool Task Parallel Library (TPL) Loops for (int i = 0; i < N; i++) { Compute(i); } foreach (T e in data) Compute(e); Parallel.For(0, N, i => { Compute(i); }); Parallel.ForEach(data, e => Compute(e)); Task Parallel Library (TPL) Loops DEMO: Raytracer Task Parallel Library (TPL) Regions A(); B(); C(); ParallelOptions pops = new ParallelOptions() { MaxDegreeOfParallelism = 2, CancellationToken = myToken }; Parallel.Invoke(pops, () => A(), () => B(), () => C()); Task Parallel Library (TPL) Tasks DEMO: Task examples DEMO: Reversi Parallel LINQ (PLINQ) Language Integrated Query (LINQ) Overview Visual Basic C# Others… .NET Standard Query Operators LINQ-enabled data sources LINQ LINQ LINQ To Objects To XML To … Parallel LINQ (PLINQ) LINQ-To-Objects Parallelized var results = from i in arrayOfIntegers where i % 2 == 0 select i; var results = from i in arrayOfIntegers.AsParallel() where i % 2 == 0 select i; .AsParallel().WithDegreeOfParallelism(4) .WithCancellation(myToken) .WithMergeOptions(ParallelMergeOptions.NotBuffered) .WithExecutionMode(ParallelExecutionMode.ForceParallelism) Parallel LINQ (PLINQ) Supported Operators In .NET 4, ~50 operators w/ ~175 overloads Aggregate(3) GroupBy(8) SequenceEqual(2) All(1) GroupJoin(2) Single(2) Any(2) Intersect(2) SingleOrDefault(2) AsEnumerable(1) Join(2) Skip(1) Average(20) Last(2) SkipWhile(2) Cast(1) LastOrDefault(2) Sum(20) Concat(1) LongCount(2) Take(1) Contains(2) Max(22) TakeWhile(2) Count(2) Min(22) ThenBy(2) DefaultIfEmpty(2) OfType(1) ThenByDescending(2) Distinct(2) OrderBy(2) ToArray(1) ElementAt(1) OrderByDescending(2) ToDictionary(4) ElementAtOrDefault(1) Range(1) ToList(1) Empty(1) Repeat(1) ToLookup(4) Except(2) Reverse(1) Union(2) First(2) Select(2) Where(2) FirstOrDefault(2) SelectMany(4) Zip(1) Parallel LINQ (PLINQ) DEMO: Baby Names Thread-safe Data Structures and Sync Primitives Thread-safe, scalable collections Initialization IProducerConsumerCollection<T> Lazy<T> ConcurrentQueue<T> ConcurrentStack<T> ThreadLocal<T> ConcurrentBag<T> ConcurrentDictionary<TKey, TValue> Locks ManualResetEventSlim Phases and work exchange Barrier SemaphoreSlim BlockingCollection<T> SpinLock CountdownEvent SpinWait Partitioning Cancellation {Orderable}Partitioner<T> Partitioner.Create(…) CancellationTokenSource CancellationToken ThreadPool in .NET 3.5 Global Queue Worker Worker Work Item 3 … Thread 0 Thread N OtherWork Threads Item 21 ThreadPool in .NET 4 Local Local Work- Work- Lock-free Stealing Stealing Global Queue Queue Queue Worker Worker WorkWork ItemItem 453 … Thread 0 Thread N OtherWork Threads Item 21 Agenda Checkpoint Why What Managed APIs/runtime (.NET 4) a.k.a. Parallel Extensions to .NET Tools (in the VS2010 IDE) Debugging: Parallel Tasks and Parallel Stacks Concurrency Visualizer Tools Parallel Debugging Two new debugger toolwindows “Parallel Tasks” “Parallel Stacks” Tools “Parallel Tasks” What threads are executing my Tasks? Where are my Tasks running (location, call stack)? What is the status of my Tasks? Tools “Parallel Stacks” Zoom Bird’s eye view control Multiple call stacks in a single view Easy navigation to any executing method Rich UI (zooming, panning, tooltips, etc.) Tools Concurrency Visualizer Tools Concurrency Visualizer: CPU Utilization View Other Processes Number Idle of cores Time Your Process Tools Concurrency Visualizer: Threads View Measure time Hide for interesting Uninteresting segments threads Active Legend Call Usage Stacks Hints Tools Concurrency Visualizer: Cores View Color per thread Migration visualization Related Content Dev Center: http://msdn.microsoft.com/concurrency Forum: http://social.msdn.microsoft.com/Forums/en-US/parallelextensions/threads Blog: http://blogs.msdn.com/pfxteam/ © 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. .

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    27 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us