Core concepts for parallelism:
- What is parallelism?
- Typical hardware structures supporting parallelism
- Iteration spaces
- Performance expectations, limitations, and prediction
- Hazards and conflicts
- Locking and synchronisation
Frameworks and languages for parallel programming
- Threads (C++)
- SIMD (Intrinsics)
- GPUs (CUDA)
- FPGAs (OpenCL)
Application and optimisation:
- Example: regular bulk synchronous problem
- Example: irregular asynchronous problem
- Profiling and optimisation
- Design patterns for parallel programming
- Parallel programming in distributed systems