Programming for parallelism
Typical duration: 3 days
Course code: MUL2
Efficient parallel programming is the key to getting the most out of any modern computing platform. This course teaches the concepts and practice necessary to achieve this goal.
Training topicsIntermediate and advanced parallelization
Patterns and technologies for parallelism
The class starts with a refresher of key items in modern computer architecture - from vectors in a single processor core to datacenters. We continue with a discussion of the main aspects of parallelism, including the laws of scalability as well as synchronization primitives, parallel algorithms, tuning and debugging. Major technologies and strategies for parallelism are covered and included in the hands-on labs: in particular OpenMP, Cilk+, Threading Building Blocks. We also talk about pitfalls of parallel programming and best known practices for common challenges.
The course has a rich hands-on lab component, where students learn all discussed concepts in practice.
After the course, the students will:
- Employ parallelism in their software with confidence
- Identify, address and resolve scaling issues and concurrency bugs
- Employ mainstream parallelism technologies for their projects
- Use software tools to assess scalability and tune their code
Software technologies and constructs for advanced parallelization
Parallel programming patterns
Lockless algorithms, avoiding parallelism pitfalls and traps