Overview
Goals
- What is parallel programming?
- Why parallel programming?
- Performance is important
- How to parallelize a program?
- Tools
- Principles and best practices
- Strategy for scientific software development
Background knowledge
- The working of a modern processor
- CPU architecture and hierarchical memory architecture
- A short introduction: Memory location matters for performance
- A very good talk about this topic, you need to see this: Scott Meyers on Cpu Caches and Why You Care
- Accelerators (GPU), increasingly important topic, but we cannot treat everything in this course.
- The architecture of a supercomputer
- Nodes and cores, NUMA domains
- Interconnect