The common approach to the art of programming from the point of view of a scientist only rarely permits full exploitation of computing resources to achieve optimal results in terms of performance. The basic knowledge of how a computer machine really works allows even a naif programmer to better write his own code and eventually to optimize properly any kind of scientific program. This knowledge is way more important in the field of High-Performance Computing, where the correct exploitation of modern architectures is crucial to the achievement of scientific results.
This code is addressed to C and Fortran programmers that, even without notions of computer science, have the need to learn tricks and techniques for quick debugging and optimization of codes, without rewriting these from scratch. This course is aimed to guide the user in software performance analysis and improvement, with a special focus on tools used in the HPC world. We will present profilers and debuggers to help programmers identify and resolve bottlenecks on heterogenous architectures (CPU and GPU). Typical techniques of optimization (cache reuse, unrolling, inlining, vectorization) will be presented, together with the use of compiler flags on different architectures and compilers.
Skills:
By the end of the course the student will be able to:
- manage efficiently the computer memory
- understand and use efficiently compilers and compiler options
- design a debugging strategy based on dedicated tools
- use tools to profile programs and measure their performance
- optimize programs
Target audience:
Researchers and programmers interested in quick and efficient debugging, and a knowledge of fundamental concepts of optimization. This course is particularly suitable for people approaching for the first time the issues of computer programming in the framework of scientific calculations.
Pre-requisites:
Knowledge of Fortran or C/C++. Elementary notions of Linux/Unix.