  An autotuning is an approach that explores a search space of possible
implementations/configurations of a kernel or an application by selecting and
evaluating a subset of implementations/configurations on a target platform
and/or use models to identify a high performance implementation/configuration.
In this paper, we develop an autotuning framework that leverages Bayesian
optimization to explore the parameter space search. We select six of the most
complex benchmarks from the application domains of the PolyBench benchmarks
(syr2k, 3mm, heat-3d, lu, covariance, and Floyd-Warshall) and apply the newly
developed LLVM Clang/Polly loop optimization pragmas to the benchmarks to
optimize them. We then use the autotuning framework to optimize the pragma
parameters to improve their performance. The experimental results show that our
autotuning approach outperforms the other compiling methods to provide the
smallest execution time for the benchmarks syr2k, 3mm, heat-3d, lu, and
covariance with two large datasets in 200 code evaluations for effectively
searching the parameter spaces with up to 170,368 different configurations. We
compare four different supervised learning methods within Bayesian optimization
and evaluate their effectiveness. We find that the Floyd-Warshall benchmark did
not benefit from autotuning because Polly uses heuristics to optimize the
benchmark to make it run much slower. To cope with this issue, we provide some
compiler option solutions to improve the performance.
