DescriptionAt this point, GPUs are an integral part of high-performance computing, and GPU acceleration seems to be the only viable path for reaching exascale. Under such circumstances, it is critical for computational scientists to invest in GPU programming skills if they want to be competitive in their field. In this tutorial, we attempt to cover the full spectrum of GPU kernel–development techniques. We start by introducing the basics of GPU programming with CUDA and HIP and then shift the focus to solutions aimed at portability: OpenMP, OpenACC, Kokkos, and KokkosKernels. We also include an extensive presentation of automated performance tuning methodologies. Our objective is twofold: (1) prevent younger researchers from reinventing the wheel when it comes to producing GPU-accelerated numerical software and (2) steer the attendees away from one-off solutions and motivate them to invest their efforts in more portable and more sustainable approaches.