Cinderella Project
The Cinderella Project is an effort to automate the determination
of worst-case execution time for software running on a single processor.
It is estimated by static analysis assuming uninterrupted execution
using path analysis and microarchitectural modeling.
Since Cinderella uses the C language, the problem is undecidable.
They make it decidable by restricting the constructs in C:
- No recursive function calls
- No unbounded loops
Cinderella prunes logically infeasible paths to obtain tighter bounds,
and supports programmer annotations:
- Loop bounds
- Execution constraints (mutual exclusion of sections of code)
Initial Formulation
Formulate the problem as an integer linear programming (ILP) problem.
- Simple linear cost function: each instruction takes 1 cycle
(cache effects are ignored)
- Structural constraints: analysis of the control flow (no annotation)
- Program functionality constraints: annotate the range of variable
values (which yields a disjunction of constraint sets)
Each set of functionality constraints is combined with structural
constraints and passed to an ILP solver.
C code is analyzed into a code flow graph of one instruction per node.
Advanced Formulation
Modify cost function to include instruction cache hits and misses.
- Annotate usage of individual cache lines (in pre-header)
- Added cace cost keeps overall cost function linear
- First execution of an instruction causes a miss
- Constraints on cache misses and hits yields a cache conflict graph
The analysis then simulates the program using the control flow graph.
CPU pipelining, i.e. hit cost and load instruction cost, is also included.
Updated 05/02/99.