Description
You'll learn the fundamentals of parallel programming, from task parallelism to data parallelism, in this course. You'll notice, in particular, how many familiar ideas from functional programming map perfectly to the data parallel paradigm. We'll start with the nuts and bolts of parallelizing familiar collections operations and work our way up to parallel collections, a production-ready data parallel collections library available in the Scala standard library. Throughout, we'll apply these concepts through a variety of hands-on examples that analyse real-world data, such as k-means clustering.
Outcomes of Learning You will be able to do the following by the end of this course:
- consider task and data parallel programmes,
- express common algorithms functionally and solve them in parallel
- competent parallel code microbenchmarking
- Create programmes that make effective use of parallel collections to improve performance.
Syllabus :
1. Parallel Programming
- Introduction to Parallel Computing
- Parallelism on the JVM
- Running Computations in Parallel
- Monte Carlo Method to Estimate Pi
- First-Class Tasks
- How Fast are Parallel Programs?
- Benchmarking Parallel Programs
2. Basic Task Parallel Algorithms
- Parallel Sorting
- Data Operations and Parallel Mapping
- Parallel Fold (Reduce) Operation
- Associativity
- Parallel Scan (Prefix Sum) Operation
3. Data-Parallelism
- Data-Parallel Programming
- Data-Parallel Operations
- Scala Parallel Collections
- Splitters and Combiners
4. Data Structures for Parallel Computing
- Implementing Combiners
- Parallel Two-phase Construction
- Conc-tree Data Structure
- Amortized, Constant-time Append Operation
- Conc-Tree Combiners