An Infrastructure for Adaptive Dynamic Optimization
Derek Bruening
Dynamic optimization is emerging as a promising approach to
overcome many of the obstacles of traditional static compilation. But
while there are a number of compiler infrastructures for developing
static optimizations, there are very few for developing dynamic
optimizations. We present a framework for implementing dynamic
analyses and optimizations. We provide an interface for building
external modules, or clients, for the DynamoRIO dynamic code
modification system. This interface abstracts away many low-level
details of the DynamoRIO runtime system while exposing a simple and
powerful, yet efficient and lightweight, API. This is achieved by
restricting optimization units to linear streams of code and using
adaptive levels of detail for representing instructions. The
interface is not restricted to optimization and can be used for
instrumentation, profiling, dynamic translation, etc.
To demonstrate the usefulness and effectiveness of our framework,
we implemented several optimizations. These improve the performance
of some applications by as much as 40% relative to native execution.
The average speedup relative to base DynamoRIO performance is 12%.
|