Application performance is one of the key requirements for HPC applications.
However this is one of the more difficult requirements to satisfy:
- Issues affecting performance often vary between different hardware and software environments. This requires performance issues to be frequently re-visited as the hardware and software environment changes.
- Performance programming requires detailed knowledge of the underlying environment.
- The design decisions necessary to achieve good performance are often in conflict with other desirable properties of the program.
- After taking this course you will have a good practical understanding of the general issues and methodologies associated with designing building and refactoring codes to meet performance requirements. In addition you will have an overview of a number of subjects that are important in the understanding of performance on current systems.
The course will cover the following topics:
- Overview of performance programming. Methodology, the optimisation cycle.
- Designing for performance. Encapsulation as an aid to performance tuning.
- Tools for performance programming. Profilers and code instrumentation.
- Compilers and compiler optimisation.
- Memory heirarchies, Memory structures and associated optimisations.
- Performance tuning for shared memory.
- Floating point performance. Pipelines, SIMD, vectorisation.