14
Parallel Computing in .NET James Rapp

Parallel Computing in .NET

Embed Size (px)

DESCRIPTION

Have you ever had to endure the pain of manually creating threads? This talk introduces enhancements in Visual Studio and .NET that make developing high-throughput, asynchronous, and low-latency applications attainable.

Citation preview

Page 1: Parallel Computing in .NET

Parallel Computing in .NETJames Rapp

Page 2: Parallel Computing in .NET

TOPICS

• Task Parallel Library• Parallel Debugging• Parallel Profiling

Page 3: Parallel Computing in .NET

TYPES OF PARALLELISM

Data ParallelismOccurs when you carry out the same operation on multiple subsets of the data simultaneously and independently.

Examples:• Matrix multiplication• Jacobi Relaxation• Ray Tracing

Page 4: Parallel Computing in .NET

TYPES OF PARALLELISMTask ParallelismOne or more independent tasks running concurrently

Examples:• Sorting• Dataflow Networks• Asynchrony

Page 5: Parallel Computing in .NET

WHY IS PARALLELISM RELEVANT?• Moore’s law: Transistor count doubles every two years• We’ve reached the physical limits of clock speed• Solution: Scale horizontally, not vertically• The free lunch is over: We now must right parallel code if we want to

benefit from better hardware

Page 6: Parallel Computing in .NET

TASK PARALLEL LIBRARYImplementing Thread-Based Parallelism• Tedious and error-prone• Difficult to read• Threads are heavyweight• Wrong abstraction levelTPL• Simplifies parallel programming• Raises the level of abstraction• Encapsulates common patterns• Enables fine-grained control

Page 7: Parallel Computing in .NET

Tasks (System.Threading.Tasks)

Task – A lightweight schedulable unit of work.• Represents an asynchronous operation• Higher level of abstraction than a ThreadPool work item

Purpose of Tasks• Simplifies low-level details such as cancellation or exception handling.• More control – rich APIs for continuations, custom scheduling, etc.

Page 8: Parallel Computing in .NET

.NET PARALLELISM OVERVIEW

Operating SystemThreads

Concurrency Runtime

ThreadPool

Task Scheduler

Resource Manager

Developer Tools

Parallel Debugger

Concurrency Visualizer

Programming Models PLINQ

Task Parallel Library

Page 9: Parallel Computing in .NET

A NOTE ON CHILD TASKS

Behavior Detached Attached

Parent waits for child to complete

No Yes

Parent propagates exceptions thrown by child

No Yes

Status of parent depends on status of child

No Yes

Page 10: Parallel Computing in .NET

CONCURRENT COLLECTIONS (System.Collections.Concurrent)

Class Description

ConcurrentDictionary Collection of key/value pairs that can be accessed by safely by multiple threads

ConcurrentQueue Thread-safe FIFO collection

ConcurrentStack Thread-safe LIFO collection

Partitioner Provides common partitioning strategies for arrays, lists, and enumerables

ConcurrentBag Thread-safe, unordered collection of objects

BlockingCollection Provides blocking and bounding capabilities for thread-safe collections that implement IProducerConsumerCollection<T>

Etc.

• Thread-safe collection classes – Optimized for performance– Should be used instead of System.Collections and System.Collections.Generic

Page 11: Parallel Computing in .NET

TPA DATAFLOW (System.Threading.Tasks.Dataflow)

• Meant for course-grained dataflow or pipeline tasks• Useful for processing data as it becomes available (e.g. red eye reduction

on a web cam)

Page 12: Parallel Computing in .NET

.NET ASYNC• Symplifies asynchronous programming• Improves UI responsiveness and performance

async Task<int> AccessTheWebAsync() {

HttpClient client = new HttpClient();Task<string> getStringTask = client.GetStringAsync(“www.geneca.com");

//Work that doesn’t rely on getStringTaskDoIndependentWork();

string urlContents = await getStringTask;

return urlContents.Length; }

Page 13: Parallel Computing in .NET

NOT COVERED (Suggestions for Further Research)• Other Parallel Programming Models in .NET

– PLINQ

• Native Concurrency– Parallel Patterns Library

• Data Parallelism on the GPU– C++ AMP

Page 14: Parallel Computing in .NET