Programming and environments for parallelism
Typical duration: 3 days
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 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. 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
Software technologies and constructs for advanced parallelization
Parallel programming patterns
Lockless algorithms, avoiding parallelism pitfalls and traps