High performance computing is the effective use of advanced computers to solve problems that are impractical using conventional systems. This may be due to the size of the problem, or the computational time needed for its solution. One approach to high performance computing is the use of parallel computers: machines with several processing units co-operating to solve a large problem. This course covers the foundations of high performance computing together with various methods that can be used to program parallel computers. It includes both lectures and practical sessions which make use of high performance machines.
The course is designed for scientists and engineers of all disciplines who require a fundamental understanding of the principles of high performance computing, including the algorithms which exploit it, the programming languages which relate to it, and the computer architectures which realise it. A specialist knowledge of the area is not required, but participants should normally have a degree in a scientific discipline. A good working knowledge of a high-level programming language is essential.
The course includes:
Introduction to high performance computing
Efficient programming techniques
Improving the efficiency of a program by changing the style of
coding used and the use of optimising compliers. The
use of code profiling tools.
Efficient numerical libraries
The use of efficient numerical libraries such as BLAS and LAPACK
The architecture of parallel computers
Fynn's taxonomy. Vector processors. Shared and distributed memory
multi-processor computers.
Parallel algorithms
The design of algorithms to take advantage of parallel computers,
including a case study using domain decomposition.
MPI: The message passing interface
Introduction to parallel programming using message passing and MPI,
using both a cluster of Linux workstations and a parallel computer.
Threads
Parallel programming using POSIX threads.
OpenMP
Parallel programming using OpenMP compiler directives.