Theme: Parallelism

Programming and environments for parallelism

Level: Intermediate

Typical duration: 3 days

Lectures: 12h

Labs: 12h

Course code: MULC2

Efficient parallel programming is the key to getting the most out of any modern computing platform. This course teaches the concepts, solutions 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. A discussion of the main aspects of parallelism includes the laws of scalability, synchronization primitives, parallel algorithms, data structures and patterns, tuning and debugging. Major programming environments are covered and included in the hands-on labs: in particular OpenMP, Cilk+, Threading Building Blocks. We also discuss pitfalls of parallel programming and best known practices for tackling common challenges.

The course has a rich 50% hands-on lab component, where students learn all discussed concepts in practice.



After the course, the students will:
- Employ various kinds of 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