  Widely used compilers like GCC and LLVM usually have hundreds of
optimizations controlled by optimization flags, which are enabled or disabled
during compilation to improve runtime performance (e.g., small execution time)
of the compiler program. Due to the large number of optimization flags and
their combination, it is difficult for compiler users to manually tune compiler
optimization flags. In the literature, a number of auto-tuning techniques have
been proposed, which tune optimization flags for a compiled program by
comparing its actual runtime performance with different optimization flag
combination. Due to the huge search space and heavy actual runtime cost, these
techniques suffer from the widely-recognized efficiency problem. To reduce the
heavy runtime cost, in this paper we propose a lightweight learning approach
which uses a small number of actual runtime performance data to predict the
runtime performance of a compiled program with various optimization flag
combination. Furthermore, to reduce the search space, we design a novel
particle swarm algorithm which tunes compiler optimization flags with the
prediction model. To evaluate the performance of the proposed approach
CompTuner, we conduct an extensive experimental study on two popular C
compilers GCC and LLVM with two widely used benchmarks cBench and PolyBench.
The experimental results show that CompTuner significantly outperforms the five
compared techniques, including the state-of-art technique BOCA.
