This document summarizes a presentation about using the Task Parallel Library (TPL) for data flow tasks in .NET. It discusses how TPL can be used to parallelize image processing pipelines by modeling the stages as data flow blocks. The key TPL data flow blocks for sources, targets, buffering, transformations, and joins are explained. Code examples are provided for building a skeletal image processing program using these TPL data flow capabilities.
3. Parallel Programming As It Evolves
- Higher level constructs to handle pipeline
scenarios
- Earlier
DevLabs
- CTP
Data Flow Tasks .NET 4.5 Preview 1
Coordination Data Task Parallel Parallel
Structure Library Programming in
.NET 4.0
Threads Till .NET 3.5 to ta
Care of concurrency
requirements
4. Pipelines And Data Flow Networks
- A linear series of producer/consumer stages
- Output of one stage -> Input of another
- Stages of pipeline are supposed to process input in
specified order
- Data Flow networks are more general form of
pipelines
Input Stage1 Stage 2 Stage N Output
5. Image Pipeline – An Example
Input
Image
Load Image
Original Image s
Scale Image
Filter Image
Thumbnails
Filtered Images
Display
Image
This is sequential… How it makes sense in Parallel
World???
7. What type of tasks Stages Can Do?
- Receive an input and process it.
- Receive an input, buffer it and send it to another
stage
- Receive an input, transform the input and send the
output to another stage
- Receive input from multiple stages and join/combine
the inputs to produce the output
8. TPL DataFlow Blocks
IDataFlowBloc
- Stages should be able k
- Handle input
ISourceBlock ITargetBlock
- Produce output
- Buffer data
- Perform Processing
- Stages are modeled as Data Flow Blocks
- Data Flow Blocks can be
- Source Block – Generate data
- Target Block - Accept data
9. TPL DataFlow Blocks(Contd..)
- Built-In Data Flow Blocks
- Buffering Blocks
- BufferedBlock
- BroadCastBlock
- Executor Blocks
- ActionBlock
- TransformBlock
- TransformManyBlock
- Join Blocks
- JoinBlock
- BatchBlock
Let’s Go To The Code….
10. Built In Data Flow Blocks
Input ActionBlock
Task
Input BufferBlock
Original
Task
Input BroadcastBlock Copy
Task Copy
Copy
TransformBlock
Input
Tas
Output
k
Input JoinBlock
1 Tas Output
k
Input
2
12. References
- Parallel Programming with Microsoft Visual C++ by
Colin Campbell and Ade Miller
- Patterns Of Parallel Programming by Stephen Toub
- Introduction To TPL DataFlow by Stepehen Toub
- Samples in http://parallelpatterns.codeplex.com/