Run-time Function Adaptation for Statically-Compiled Programs

In order to explore multiple optimization options, a simple and practical solution consists in cloning the code of procedures, applying any complex optimizations to these clones and randomly selecting either the original or transformed procedures at run-time. Obtaining execution time distribution among original and cloned procedures, it is possible to statistically determine the influence of compiler optimizations on the code in a single run. The simplicity of the implementation makes this technique reliable, secure and easy to debug. Yet it enables practical transparent low-overhead continuous optimizations for programs statically compiled with GCC while avoiding complex dynamic recompilation frameworks.

Here is a patch against GCC 4.3 implementing the framework described in the 2007 GCC Summit paper: "Practical Run-time Adaptation with Procedure Cloning to Enable Continuous Collective Compilation".

This work is based on our previous research presented in the paper "A Practical Method For Quickly Evaluating Program Optimizations" (HiPEAC 2005, pdf), where we attempted to make iterative compilation practical and developed a technique that speeded up the iterative search by several orders of magnitude by enabling low-overhead run-time adaptation for varying program behavior using multi-versioning and phase detection for statically compiled programs:

http://unidapt.sourceforge.net/images/ccc1.jpg http://unidapt.sourceforge.net/images/ccca1.jpg

We plan to use this work to enable practical run-time adaptability for statically compiled programs with any behavior (regular or irregular) for different constraints (performance, power consumption) on scalar and heterogeneous systems (such as IBM CELL, SUN T1, Intel TeraScale, various GPU architectures). Additional information can be found at the development website.

None: functionAdaptation (last edited 2008-01-10 19:38:43 by localhost)