Expressing Parallel Patterns in Modern C++

48
Expressing Parallel Patterns in Modern C++ Rahul V. Patil Microsoft C++ Parallel Computing Team Note: this is a simplified version of the deck used in the video

description

Expressing Parallel Patterns in Modern C++. Rahul V. Patil Microsoft C++ Parallel Computing Team. Note: this is a simplified version of the deck used in the video. Agenda. Patterns (70%) Infrastructure (9%) Coordination Data Structures (1%) Tooling (20%). Data Flow. Fork-Join. - PowerPoint PPT Presentation

Transcript of Expressing Parallel Patterns in Modern C++

Page 1: Expressing Parallel Patterns in Modern C++

Expressing Parallel Patterns in Modern C++

Rahul V. PatilMicrosoft

C++ Parallel Computing Team

Note: this is a simplified version of the deck used in the video

Page 2: Expressing Parallel Patterns in Modern C++

Agenda• Patterns (70%)• Infrastructure (9%)• Coordination Data Structures (1%)• Tooling (20%)

Page 3: Expressing Parallel Patterns in Modern C++

Asynchrony

Data Flow

Fork-Join

Page 4: Expressing Parallel Patterns in Modern C++

Asynchrony

Data Flow

Fork-Join

Page 5: Expressing Parallel Patterns in Modern C++
Page 6: Expressing Parallel Patterns in Modern C++
Page 7: Expressing Parallel Patterns in Modern C++
Page 8: Expressing Parallel Patterns in Modern C++
Page 9: Expressing Parallel Patterns in Modern C++
Page 10: Expressing Parallel Patterns in Modern C++
Page 11: Expressing Parallel Patterns in Modern C++
Page 12: Expressing Parallel Patterns in Modern C++
Page 13: Expressing Parallel Patterns in Modern C++
Page 14: Expressing Parallel Patterns in Modern C++
Page 15: Expressing Parallel Patterns in Modern C++
Page 16: Expressing Parallel Patterns in Modern C++
Page 17: Expressing Parallel Patterns in Modern C++

Fork-Join

Data Parallel Reduction Cancelation Nested fork-join Recursive fork-join

parallel_for parallel_for_eachparallel_invokeparallel_for fixedparallel_for simpleparallel_transformparallel_reduceparallel_sortparallel_radixsortparallel_buffered_sort

task_group.run(), .wait(), .cancel(), .run_and_wait()

Constructs

Patterns

Page 18: Expressing Parallel Patterns in Modern C++

Asynchrony

Data Flow

Fork-Join

Page 19: Expressing Parallel Patterns in Modern C++
Page 20: Expressing Parallel Patterns in Modern C++
Page 21: Expressing Parallel Patterns in Modern C++
Page 22: Expressing Parallel Patterns in Modern C++
Page 23: Expressing Parallel Patterns in Modern C++
Page 24: Expressing Parallel Patterns in Modern C++
Page 25: Expressing Parallel Patterns in Modern C++
Page 26: Expressing Parallel Patterns in Modern C++
Page 27: Expressing Parallel Patterns in Modern C++

Asynchrony

Speculative background work If you block, you break Dynamic continuation graphs

std::future<t>std::async, std::promise<t>task<t>

.then,

.wait,

.get,

.cancelwhen_all, when_any

task_completion_event<t>.set

Constructs

Patterns

Page 28: Expressing Parallel Patterns in Modern C++

Asynchrony

Data Flow

Fork-Join

Page 29: Expressing Parallel Patterns in Modern C++
Page 30: Expressing Parallel Patterns in Modern C++
Page 31: Expressing Parallel Patterns in Modern C++

Data Flow

Producer-Consumer Pipelines

Blocks and operationscall<t>transformer<t>join, multitype_join<…>choice<…>unbounded_bufferoverwrite_buffersingle_assignmenttimer

Constructs

Patterns

Page 32: Expressing Parallel Patterns in Modern C++

RecapFork-Join

• Sequential code that needs to go faster

• Well defined input, transformation and output

Data-Flow• Either transformative or

reactive • Natural to express

computation in phases• Streaming inputs• Order matters

Async • If you block you break• Speculative background

work• Reactive• Continuations

Page 33: Expressing Parallel Patterns in Modern C++

Infrastructure• Composable• Scalable• Efficient

Page 34: Expressing Parallel Patterns in Modern C++

Conccurrent Data Structuresconcurrent_vector<t>concurrent_queue<t>concurrent_unordered_map<key,t>concurrent_unordered_multimap<key,t>concurrent_unordered_set<key,t>concurrent_unordered_multiset<key,t>concurrent_priority_queue<t>

Page 35: Expressing Parallel Patterns in Modern C++

Tooling

Page 36: Expressing Parallel Patterns in Modern C++

Intel Advisor

Page 37: Expressing Parallel Patterns in Modern C++

Identify hot loops

Page 38: Expressing Parallel Patterns in Modern C++
Page 39: Expressing Parallel Patterns in Modern C++

Intel correctness tool

Identify Write race when parallelizing inner loop

Page 40: Expressing Parallel Patterns in Modern C++

Add PPL tasks code

Page 41: Expressing Parallel Patterns in Modern C++

Add Synchronization

Page 42: Expressing Parallel Patterns in Modern C++

Launch Concurrency Visualizer

Page 43: Expressing Parallel Patterns in Modern C++
Page 44: Expressing Parallel Patterns in Modern C++
Page 45: Expressing Parallel Patterns in Modern C++

Add parallelism to middle loop

Page 46: Expressing Parallel Patterns in Modern C++
Page 47: Expressing Parallel Patterns in Modern C++
Page 48: Expressing Parallel Patterns in Modern C++

Q&A

• Blog Posts: C++ PPL and AMP blog• Questions on PPL: Native parallelism forum

Email me at:[r_ a_ h_ u_ l d o t p_ a_ t_ i_ l a t m_ i_ c_ r_ o_ s_ o_ f_ t_ . c_ o_ m (delete all underscores and spaces; replace d o t with the character ".“; at with @ ).]