Autotuning GPU Kernels via Static and Predictive Analysis Robert V. Lim, Boyana Norris, and Allen D. Malony Computer and Information Science University of Oregon Eugene, OR, USA froblim1, norris,
[email protected] Abstract—Optimizing the performance of GPU kernels is branches occur, threads that do not satisfy branch conditions challenging for both human programmers and code generators. are masked out. If the kernel programmer is unaware of the For example, CUDA programmers must set thread and block code structure or the hardware underneath, it will be difficult parameters for a kernel, but might not have the intuition to make a good choice. Similarly, compilers can generate working for them to make an effective decision about thread and block code, but may miss tuning opportunities by not targeting GPU parameters. models or performing code transformations. Although empirical CUDA developers face two main challenges, which we autotuning addresses some of these challenges, it requires exten- aim to alleviate with the approach described in this paper. sive experimentation and search for optimal code variants. This First, developers must correctly select runtime parameters research presents an approach for tuning CUDA kernels based on static analysis that considers fine-grained code structure and as discussed above. A developer or user may not have the the specific GPU architecture features. Notably, our approach expertise to decide on parameter settings that will deliver does not require any program runs in order to discover near- high performance. In this case, one can seek guidance from optimal parameter settings. We demonstrate the applicability an optimization advisor. The advisor could consult a perfor- of our approach in enabling code autotuners such as Orio to mance model based on static analysis of the kernel properties, produce competitive code variants comparable with empirical- based methods, without the high cost of experiments.