Compiler-Based Program Transformations

1. Compiler-Based Automatic Differentiation

Automatic differentiation (AD) is a process for computing derivatives of functions implemented as computer programs (see the Automatic Differentiation pages for general information on AD). My AD research focuses on compiler-based tools for the automatic differentiation of C and C++ code, and on language-independent intermediate program representation. The principal components in the design of ADIC 2.0 include
  • Sage 3 (ROSE) AST using an EDG-based C/C++ parser
  • Canonicalization
  • Program analysis using OpenAnalysis
  • XAIF generation
  • Use of XAIF differentiation modules for forward mode differentiation, such as those provided by XAIFBooster
  • XAIF parser and C/C++ code generator

Recent Publications

  • B. Norris and P. Hovland. A distributed application server for automatic differentiation. INFORMATION, 6(3):305-314, July 2003. Also see ADIC Server website:
    http://www.mcs.anl.gov/adicserver/.
  • P. D. Hovland, U. Naumann, and B. Norris, An XML-based platform for semantic transformation of Numerical Programs. In Proceedings of Software Engineering and Applications, November 4-6, 2002 Cambridge, MA, ACTA Press, Anaheim, CA, pp. 530-538.
  • P. D. Hovland, U. Naumann, and B. Norris. "An XML-Based Platform for Semantic Transformation of Numerical Programs,"in Proceedings of Software Engineering and Applications, November 4-6, 2002 Cambridge, MA, ACTA Press, Anaheim, CA, pp. 530--538. Also available as MCS preprint ANL/MCS-P950-0402.




Design of ADIC 2.0

2. Performance Bounds Modeling


My research in the area of high-end computer performance focuses on characterizing realistic performance bounds of high-performance applications and systems. As part of the DOE Performance Engineering Research Center, I am developing performance bounding tools that determine what sections of code have performance that is memory bandwidth limited or instruction scheduling limited on a particular architecture. For example, in order to determine whether a code segment is memory bandwidth limited, the bounding tools estimates the memory bandwidth requirements of the code by computing the ratio between the number of floating point operations and memory accesses, which can then be used to predict the maximum achievable performance for a given architecture. Ultimately, the performance bounding tools will enable application programmers to identify existing performance bottlenecks and their associated performance bounds (which will be more realistic and tighter than the bounds currently provided by the manufacturer). Project Web page: http://www.mcs.anl.gov/performance/.

3. Abstraction Acceleration through Performance Annotations






Return to Boyana Norris's Home Page