Finding representative sets of optimizations for adaptive
  multiversioning applications
  Iterative compilation is a widely adopted technique to optimize programs for
different constraints such as performance, code size and power consumption in
rapidly evolving hardware and software environments. However, in case of
statically compiled programs, it is often restricted to optimizations for a
specific dataset and may not be applicable to applications that exhibit
different run-time behavior across program phases, multiple datasets or when
executed in heterogeneous, reconfigurable and virtual environments. Several
frameworks have been recently introduced to tackle these problems and enable
run-time optimization and adaptation for statically compiled programs based on
static function multiversioning and monitoring of online program behavior. In
this article, we present a novel technique to select a minimal set of
representative optimization variants (function versions) for such frameworks
while avoiding performance loss across available datasets and code-size
explosion. We developed a novel mapping mechanism using popular decision tree
or rule induction based machine learning techniques to rapidly select best code
versions at run-time based on dataset features and minimize selection overhead.
These techniques enable creation of self-tuning static binaries or libraries
adaptable to changing behavior and environments at run-time using staged
compilation that do not require complex recompilation frameworks while
effectively outperforming traditional single-version non-adaptable code.
