This course offers an introduction to GPU programming, beginning with an overview of Graphics Processing Units (GPUs) and their role in accelerating scientific computing.
The fundamentals of the CUDA programming model are then presented, providing students with hands-on experience in writing and optimizing simple GPU kernels.
Building on this foundation, the course introduces OpenACC as a directive-based approach to GPU programming that facilitates portability and ease of use across diverse architectures. Emphasis is placed on understanding the strengths
and limitations of each model and on developing the skills needed to harness GPUs effectively for high-performance applications.