Parallel extensions in .Net 4.0

Preview:

Citation preview

Parallel Extensions in .Net 4.0

Dmytro Maleev for Lviv .Net User Group

Agenda

Куда катится мир? Hello, Parallel Extensions! Parallel vs Multithreading Parallel Loops Tasks PLINQ CDS & Thread Enchantments References Q&A

Куда катится мир

1998 Intel 80486

80Mhz1 Core

2000Celeron 400Mhz

1 Core

2003Athlon XP 1.6+GHz

1 Core

2007Core 2 Duo 2.13 GHz

2 Core

2010Intel i5 3.3GHz

2 Core 4 Threads

?

Forget about CPU frequency increase!

There are a lot of issues with this, which will be

fixed in future!

Куда катится мир

For now…ENLARGE YOUR…

CPU CORE COUNT!PENPEN

Hello, Parallel Extensions!

Parallel Extensions, previously known as the Parallel Framework Extensions or PFX, is a managed concurrency library being developed by a collaboration between Microsoft Research and the CLR team at Microsoft. It is composed of two parts: Parallel LINQ (PLINQ) andTask Parallel Library (TPL).It also consists of a set of coordination data structures (CDS) – sets of data structures used to synchronize and co-ordinate the execution of concurrent tasks.The library was released as a CTP on November 29, 2007 and refreshed again in December 2007 and June 2008. Microsoft has announced that the Parallel Extensions to .NET will release as part of the .NET 4.0 Framework release.

©Wikipedia

Hello, Parallel Extensions!

Visual Studio Debugging and profiling support

Task Scheduler

PLINQ

Task Parallel Library

CDS

Parallel Extensions

Parallel vs Multithreading

Multithreaded!=parallelization

“ If on a single core machine you are using threads and it makes perfect sense for your scenario, then you are not "doing parallelism", you are just doing multithreading”

”On a single core you can use threads and you can have concurrency, but to achieve

parallelism on a multi-core box you have to identify in your code the exploitable

concurrency: the portions of your code that can truly run at the same time.”

Daniel Moth

Parallel vs Multithreading

Dark Side of Paprallelization and Multithreading

1. Race conditionshttp://en.wikipedia.org/wiki/Race_condition

2. Deadlockshttp://en.wikipedia.org/wiki/Deadlockhttp://en.wikipedia.org/wiki/Dining_philosophers_problem

3. Thread starvation4. Difficult to code and debug5. Environmental

Народная мудрость!

Parallel Loops

Parallel.For() Parallel.For(0, 100, i => { Console.WriteLine("This is I-I-I-I-I-I: {0}", i); });

Parallel.ForEach()Parallel.ForEach(ThisIsCollection, collectionItem =>

{collectionItem.Hello();

});

Parallel Options Parallel.Invoke()

Parallel Loops. Use Force wisely!

Parallelization Can Hurt Performance

http://msdn.microsoft.com/en-us/library/dd560853(VS.100).aspxhttp://en.wikipedia.org/wiki/Context_switch

DEMO

AntiSocial Robots

Task - Task Scheduler

Task is a new class that represents the work you want completed. There are methods to create, schedule, and synchronize tasks in your application.

Tasks are controlled by task scheduler. Tasks scheduler works with thread pool.

Task In Deep

Tasks can: Task can be created Task can wait! Task can simply Wait(), WaitAll() or

WaitAny(). Task knows when it is completed ( IsCompleted

property) Task can ContinueWith() Task can return value Task has Options and Status

Demo

Strassen algorithm

PLINQ

PLINQ is just parallelized version of LINQ

Not parallelized: LINQ-to-SQL & LINQ-to-Entity.

LINQ:var query = from s in someCollectionlet result = CoolService.CallService(s)select result;

PLINQ:var query = from s in someCollection.AsParallel()let result = CoolService.CallService(s)select result;

PLINQ. How it works?

PLINQ. Overview

Ordering Results AsOrdered()

ForAll Operator() AsSequential() WithMergeOptions Parallel Performance Analyzer. Just

for rich

DEMO

Baby Names

CDS & Thread Enchantments

Thread Enchantments: Thread.Yield() Monitor.Enter()

Concurrent Collections ConcurrentStack (LIFO) ConcurrentQueue (FIFO) ConcurrentDictionary ConcurrentBag BlockingCollection

Synchronization Primitives

Barrier“Let’s meet near monument and then go

to have a beer” Cancellation Tokens CountDownEvent ManualResetEventSlim and

SemaphoreSlim SpinLock ThreadLocal<T>

References

Parallel Programming with .NEThttp://blogs.msdn.com/b/pfxteam/

Wikihttp://

en.wikipedia.org/wiki/Parallel_Extensions Introducing .NET 4.0

http://www.amazon.com/Introducing-NET-4-0-Visual-Experts/dp/143022455X

Lviv .Net User Grouphttp://dotnetug-lviv.blogspot.com/

Q&A

?

If you still have a questions

Mail me:diwingless@gmail.com

Skype me:hmmidma

Twitter:dimko1

Recommended