My research lies in the area of
Program Analysis and Compiler Technology. I focus on modeling and
predicting large-scale dynamic behavior patterns to improve
performance, control memory size, and support coarse-grain
parallelization through offline program transformation and online
program adaptation. The ultimate goal is an intelligent programming
system, which injects into a program the ability to automatically adapt
and evolve its code and data and configure its running environment such
that a better version of the program could dynamically match its input,
behavior and running environment.
Program adaptation is not possible without accurately forecasting a
program's behavior. However, traditional modular program design and
analysis are ill-fitted for finding large-scale composite patterns from
increasingly complicated code, dynamically allocated data, and
multi-layered execution environment (e.g. interpreters, virtual
machines, operating systems and computer architecture.) My
research views a program as a composition of large-scale behavior
patterns, each of which may span a large number of loops and procedures
statically and billions of instructions dynamically. I apply statistical
learning techniques to automatically recognize the patterns, build models of
program behavior, and exploit them in offline program transformation and online program adaptation
to improve the efficiency, reliability, and fairness of computing.