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 code-restructuring passes on the generated code.
We view the TaskGraph Library as a research tool for facilitating
domain-specific runtime optimisations in scientific code. One key
distinction of this approach is its combination of runtime code
specialisation and restructuring optimisation.
We have implemented the following sample applications to evaluate our
ideas:
- Runtime specialisation of a generic image filtering application to
a specific convolution matrix.
- Runtime loop interchange and tiling of matrix multiply.
- A prototype implementation of runtime tiling of dense stencil
loops.
- Runtime 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 stencils.
Joint work with Paul H J Kelly.
Tuesday, Sept. 30 at 3:00 p.m. in DH 1070
About Olav Beckmann
Olav Beckmann is a Research Associate in the Department of Computing at Imperial College London. He is a member of the Software Performance Optimisation Research Group led by Paul Kelly.