Theme: Parallelism

Programming for parallelism

Level: Intermediate

Typical duration: 3 days

Lectures: 12h

Labs: 12h

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 topics

Intermediate 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

Training concepts

Software technologies and constructs for advanced parallelization
Parallel programming patterns
Evaluating tradeoffs
Lockless algorithms, avoiding parallelism pitfalls and traps