
There is no single best way to port code to GPUs. Examine the various approaches described in this course to determine which is the best match for your research team’s goals, expertise, existing codebase, and long-term maintenance needs.
Developed in collaboration with NVIDIA and UCL, 1st Step in GPU Programming provides a practical introduction to GPU programming for High-Performance Computing (HPC) environments. By combining Jupyter notebooks, worked examples, and self-assessment activities, the course will help build your confidence through reinforced learning and hands-on practical experience.
What you will learn:
- Understand the differences between CPUs and GPUs
- Explore the fundamentals of GPU-accelerated computing
- Use NVIDIA Nsight Systems to profile and analyse applications
- Write basic programs in C++, C, or Fortran
- Apply OpenACC directives within C/C++ and Fortran applications
- Use OpenMP directives for GPU-enabled programming
- Develop and run CUDA kernels within C/C++ or Fortran applications
- Explore approaches for optimising code for GPU architectures
By the end of the course, you will be able to select the best approach for developing and optimising GPU-enabled applications for your requirements, and hence enabling more efficient use of modern HPC systems and accelerating computational research workflows in a timely manner.
As part of the GPU Developer series*, this course will help you prepare and exploit the GPU revolution happening within the HPC community, equipping you with the skills needed to identify the most suitable path for you and your research team to transition applications from traditional CPU-based workflows to GPU-accelerated computing.
Learners are expected to have a solid foundation in HPC, along with relevant software engineering skills and substantial proficiency in applicable programming languages.
* The GPU Developer series progresses from an overview of the different approaches to GPU offloading to more advanced courses on directive-based programming and language extensions, equipping learners with the knowledge and skills needed to effectively develop and optimise GPU-accelerated applications.

Harness the power of GPU acceleration through a directive-based programming approach to offload your CPU workloads onto GPUs using a practical and accessible approach to GPU programming within High-Performance Computing (HPC) environments.
Directive-Based Programming for GPUs builds on the Introduction to OpenMP and introductory GPU programming courses, focusing on AMD MI300 GPU architecture, whilst providing practical experience in offloading computationally intensive workloads from CPUs to GPUs using OpenMP.
Illustrations in C and Fortran.
What you will learn:
- Understand the principles of GPU offloading with OpenMP
- Identify code sections suitable for GPU acceleration
- Use OpenMP offloading directives within C, C++, or Fortran applications
- Work with simple and complex compute constructs
- Manage memory movement between host and device
- Apply explicit memory directives and memory management techniques
- Use reductions and atomic operations safely and effectively
- Develop and use device subroutines
- Build and run GPU-enabled applications using Make and CMake
- Verify correctness and performance of GPU-offloaded applications
- Explore optimisation techniques and interoperability with HIP
By the end of the course, you will be able to offload numerically intensive calculations to GPUs using OpenMP, helping to improve application performance while minimising the complexity often associated with GPU programming.
As part of the GPU Developer series*, this course will help you accelerate existing applications using a practical and accessible approach to GPU programming within HPC environments.
Learners are expected to have a solid foundation in HPC, along with relevant software engineering skills and substantial proficiency in applicable programming languages.
* The GPU Developer series progresses from an overview of the different approaches to GPU offloading to more advanced courses on directive-based programming and language extensions, equipping learners with the knowledge and skills needed to effectively develop and optimise GPU-accelerated applications.