Introduction to GPUs#

Overview#

Welcome to the Introduction to GPU Programming course! This course has been designed to give you a practical foundation in GPU computing for scientific and technical applications. You will learn the essential concepts of GPU architectures, explore how to run code on modern accelerators, and develop hands-on skills in managing environments, running jobs on HPC systems, and optimising performance. The focus will be on applying these skills through guided exercises and projects in numerical modelling and simulation.

Course Objectives#

  • Understand the fundamental principles of GPU architectures and parallel programming models.

  • Configure and manage software environments for GPU computing using Spack.

  • Submit and manage GPU-enabled jobs on HPC systems with Slurm.

  • Diagnose performance bottlenecks using profiling tools, and apply strategies for performance optimisation.

  • Implement GPU-accelerated numerical models, such as a temperature diffusion solver.

  • Apply knowledge to a capstone project, extending Conway’s Game of Life to explore GPU performance, scalability, and custom extensions.

Pre-requisite Knowledge#

Sign-up#

To check for upcoming course dates and to register, please visit the Workshop Schedule and Sign-up page available here.

Resources#

The job submission scripts specifically configured for use on the University of Exeter ISCA HPC system are available here.

General-purpose job submission scripts, which can serve as a starting point for use on other HPC systems (with minor modifications required for this course), are available here.

The Python scripts used in this course can be downloaded here.

All supplementary files required for the course are available here.

Acknowledgements#

This course was developed by Liam Berrisford and Stephen Cook.

Course Delivery Content#

The presentation slides for this course can be accessed here.

License Info#

Instructional Material

The instructional material in this course is copyright © 2025 University of Exeter and is made available under the Creative Commons Attribution 4.0 International licence (https://creativecommons.org/licenses/by/4.0/). Instructional material consists of material that is contained within the “individual_modules/intro_to_GPUs” directory, and images folders in this directory, with the exception of code snippets and example programs found in files within these folders. Such code snippets and example programs are considered software for the purposes of this licence.

Software

Except where otherwise noted, software provided in this repository is made available under the MIT licence (https://opensource.org/licenses/MIT).

Copyright © 2025 University of Exeter

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.