parallel extensions a glimpse into the parallel universe eric de carufel...
TRANSCRIPT
Parallel Extensions
A glimpse into the parallel universe
Eric De [email protected]
[email protected]://blog.decarufel.net
Core Expertise• Online retail and distribution
– Overture Solutions
• Enterprise Portals and ECM– Content Management, Collaboration, (Intranet)– Office Business Solutions – Partners Service Portals (Extranet)– Customer Service Portals (Internet)
• Business Process Automation– EAI, SOA, ESB
• Search– Fast ESP (A Microsoft Subsidiary)– SharePoint Server 2007 Search– Endeca IAP (Information Access Platform)
• Dynamics CRM 4.0– Sales Force Automation– xRM applications
Search platforms
E-Commerce platform
Enterprise platform
Integration platform
Business platforms
PartnersStrategic Partners
Technology Partners
Consulting Partners
Clients
Who am’I?
• Eric De Carufel is solution architect at Orckestra• Over 15 years experience in software development
– Bell Canada, Centre de Recherceh d’emploi St-Denis, Fédération Québécoise de Karaté, AXA Canada Tech, Provigo (5 projects), Metro-Richelieu (2 projects), Imagina, be@com, Unipage, APLC, Viasystems, Montreal Jewish Hospital, AGTI, CCQ, Ogilvy Renault, Ivanhoé Cambridge, Microcell (Fido), Cirque du Soleil, TELUS, PSP Investment, CGI, Deutsche Bank, Orckestra, Sobeys, Jean-Coutu, Xtranormal
• Started with an ADAM computer by Coleco• Working with .NET since version 1.0
Agenda
• Introduction• Overview• Library Core• TPL (Task Parallel Library)• Parallel Linq (PLINQ)• Parallel Data Structures• Questions
Introduction
• Why do we have to bother?– Moore’s law is over, no more free lunch
• The Power Wall• The Complexity Wall (Instruction-Level
Parallelism)• The Memory Wall• The Reliability Wall
– Multi cores systems will be more and more available
Introduction
• Type of Parallelism– Asynchronous operation (better user experience)– Data parallelism– Task parallelism
• Options– Manual treading
• Thread, ThreadPool, BackgroundWorkerThread
– Asynchronous calls– Event driven
• Problems– Resource sharing– Locking– Non-deterministic sequence of execution– Hard to debug
Overview
Core
Task
Future<T>Task<T>
TaskManager
TPL
Parallel
LazyInit<T>
WriteOnce<T>
SpinLock
SpinWait
CountDownEvent
PLINQ
AsParallel
AsOrderred
AsUnorderred
Data Structures
ConcurrentQueue
ConcurrentStack
BlockingCollection
Task Parallel Library (TPL)
• Lightweight task framework (Task)– Create(Action<T>) factory method– Wait, WaitAll, WaitAny to catch
exception– ContinueWith to chain Tasks together
• Lazy function call– Future<T>
• Task scheduler and manager– TaskManager
DEMOTask Parallel Library (Task, Future, TaskManager)
Parallel API
• Parallel Loops – Parallel.For– Parallel.ForEach
• Lazy Initialisation – LazyInit<T>
• Locking– SpinWait– SpinLock
• CountdownEvent
Parallel API
• Standard for loop– for (int i = 0; i < N; i++){ a[i] = Compute(i);}
• Parallel for loop– Parallel.For(0, N, i =>{ a[i] = Compute(i);});
DEMOParallel API (Parallel.For, Parallel.ForEach)
Parallel Linq (PLINQ)
• Parallel Query – AsParallel()
• Return to sequential execution– AsSequential()
• Preserve order– AsOrdered()
• Order doesn’t matter– AsUnordered()
Parallel Linq (PLINQ)
• var query = from c in Customers
where c.Name = “Smith” select c;
• var query = from c in
Customers.AsParallel() where c.Name = “Smith” select c;
DEMOParallel Linq (PLINQ)
Parallel Data Structures
• IConcurrent Collection– Add(T item)– Remove(out T item)
• ConcurrentStack– Push(T item)– TryPop(out T item)
• ConcurrentQueue– Enqueue(T item)– TryDequeue(out T item)
• BlockingCollection– Add(T item), – Remove(out T item)– TryAdd(T item), – TryRemove(out T item)
DEMOParallel Structure (IConcurrentCllection, BlockingCollection, …)
CLR Thread Pool: Work-Stealing
Worker Thread 1
Worker Thread p
…
Program Thread
User Mode Scheduler For Tasks
GlobalQueue
LocalQueue
LocalQueue
…
Task 1Task 2Task 3
Task 5Task 4Task 6
MORE DEMOContinueWith, Lambda, LazyInit
What’s next
• Visual Studio 2010• .NET Framework 4.0• New multi cores computer (4, 16, 32,
64, …)
• Think parallel!– Thread safety will save your life
Call to action
• Parallel FX Team blog– http://blogs.msdn.com/pfxteam/
• Visual Studio 2010– Look for the next release
• Eric De Carufel– http://web.decarufel.net/contact