Performance is one of the most important qualities of software. Several
techniques have thus been proposed to improve it, such as program
transformations, optimisation of software parameters, or compiler flags. Many
automated software improvement approaches use similar search strategies to
explore the space of possible improvements, yet available tooling only focuses
on one approach at a time. This makes comparisons and exploration of
interactions of the various types of improvement impractical.
We propose MAGPIE, a unified software improvement framework. It provides a
common edit sequence based representation that isolates the search process from
the specific improvement technique, enabling a much simplified synergistic
workflow. We provide a case study using a basic local search to compare
compiler optimisation, algorithm configuration, and genetic improvement. We
chose running time as our efficiency measure and evaluated our approach on four
real-world software, written in C, C++, and Java.
Our results show that, used independently, all techniques find significant
running time improvements: up to 25% for compiler optimisation, 97% for
algorithm configuration, and 61% for evolving source code using genetic
improvement. We also show that up to 10% further increase in performance can be
obtained with partial combinations of the variants found by the different
techniques. Furthermore, the common representation also enables simultaneous
exploration of all techniques, providing a competitive alternative to using
each technique individually.Comment: 19 page