Data parallelism¶
Category: Parallelism · Status: stub · Lessons: chapter 07, Parallelism
One line: The same operation applied to many pieces of data at once, each piece on its own core or vector lane.
How it connects¶
flowchart LR
n_data_parallelism["Data parallelism"]
n_gpu_computing["GPU computing"]
n_map_reduce["Map-reduce"]
n_parallel_iterators["Parallel iterators and streams"]
n_parallel_prefix_sum["Parallel prefix sum"]
n_parallelism["Parallelism"]
n_simd["SIMD"]
n_task_parallelism["Task parallelism"]
n_data_parallelism ---|vs| n_task_parallelism
n_data_parallelism -->|is a| n_parallelism
n_gpu_computing -->|is a| n_data_parallelism
n_map_reduce -->|is a| n_data_parallelism
n_parallel_iterators -->|is a| n_data_parallelism
n_parallel_prefix_sum -->|is a| n_data_parallelism
n_simd -->|is a| n_data_parallelism
classDef center stroke-width:3px
class n_data_parallelism center
classDef outside stroke-dasharray: 4 3
class n_gpu_computing,n_map_reduce,n_parallel_iterators,n_parallel_prefix_sum,n_parallelism,n_simd,n_task_parallelism outside
- Is a kind of: Parallelism
- Kinds: GPU computing, Map-reduce, Parallel iterators and streams, Parallel prefix sum, SIMD
- Often confused with: Task parallelism
- See also: Concurrency models, Parallel algorithms
In each language¶
| Rust | Rayon's parallel iterators ↗; the standard library offers only thread::scope ↗ |
| C++ | std::execution::par ↗ (C++17) on a standard algorithm, or par_unseq to allow vectorization as well |
| Java | Parallel streams ↗ |
| Python | multiprocessing.Pool.map ↗ |
| C# | Data parallelism ↗ with Parallel.For and Parallel.ForEach |
| Swift | DispatchQueue.concurrentPerform ↗ runs a block the given number of times, balanced across cores |
| Haskell | parMap ↗ in the parallel package |
Where to read more¶
- In this library: Splitting a sum across workers
- In a sibling library: Go: Fan-out, fan-in ↗
- In the books: Data Parallel C++, James Reinders, Ben Ashbaugh, James Brodman, Michael Kinsner, John Pennycook, Xinmin Tian — ch. 4, 'Expressing Parallelism'
- In the books: Learning Concurrent Programming in Scala, Aleksandar Prokopec — ch. 5, 'Data-Parallel Collections'
- In the books: Parallel and Concurrent Programming in Haskell, Simon Marlow — ch. 4, 'Dataflow Parallelism: The Par Monad'
- In the books: Concurrency in .NET, Riccardo Terrell — ch. 4, 'The basics of processing big data: data parallelism, part 1'
- In the books: Seven Concurrency Models in Seven Weeks, Paul Butcher — ch. 7, 'Data Parallelism'
- In the books: C++ Concurrency in Action, Anthony Williams — ch. 10, 'Parallel algorithms' → 'Parallelizing the standard library algorithms'
- In the books: An Introduction to Parallel Programming, Peter S. Pacheco, Matthew Malensek — ch. 1, 'Why parallel computing'
- Reference: Wikipedia: Data parallelism ↗