
Dynamic Code Generation in C++ as a Foundation for Domain-Specific Optimisation
Olav Beckmann and Paul H J Kelly
Department of Computing, Imperial College London
THURSDAY, 22 JANUARY 2004
JCMB, ROOM 2511
3.30 P.M.
The TaskGraph Library is a C++ library for dynamic code generation,
which combines specialisation with dependence analysis and
restructuring optimisation. A TaskGraph represents a fragment of code
which is constructed and manipulated at run-time, then compiled,
dynamically linked and executed. The TaskGraph Library is implemented
purely in C++, using macros and operator overloading to define a
simplified, C-like sub-language that is used for initialising
TaskGraphs. The internal representation used for representing
generated code is SUIF-1, and the TaskGraph library implements an API
for calling SUIF's analysis and restructuring passes on the generated
code.
We view the TaskGraph Library as a research tool for facilitating
domain-specific runtime optimisations in scientific applications. One
key distinction of this approach is its combination of runtime code
specialisation and restructuring optimisation. Sample applications
include:
- Specialisation of a generic image filtering application to
a specific convolution matrix
- Automatic search for optimal tile size and loop sequence for
matrix multiply and dense stencil loops
- Unrolling of loops over Morton-order matrices
We are currently planning to use the TaskGraph library as a tool for
implementing and evaluating domain-specific optimisation "components"
for scientific programs. We are particularly interested in exploring
this idea in the context of stencil loops.
Please contact our
webadmin with any comments or changes.
Unless explicitly stated otherwise, all material is
copyright © The University of Edinburgh.