1. Introduction
a) Strategies and motivations for performance optimisation
b) Performance characteristics of common application types
2. Concepts related to parallelism and application scaling
a) Vectorization, Threading, Message Passing
b) Strong scaling and weak scaling
3. Hardware overview
a) CPU and memory hierarchy
b) GPGPU
4. Compilers & Libraries
a) Available compilers and performance libraries
b) Common compiler options
5. Introduction to parallel filesystems
a) Overview of GPFS and Lustre
b) Relative performance characteristics
6. Tuning of MPI applications
1. A valid user account on NSCC system, ASPIRE1
2. Laptop for use in hands-on sessions
3. Familiarity with topics covered by Introductory Class (connecting to system, editing files in Linux and submitting jobs)
After this course a user should have a basic understanding of the factors which limit the performance of compute-intensive applications and knowledge of the techniques which can be used to improve that performance.