AD Transformation Engine (xaifBooster)

AD engine

In the figure below we show the collaboration between the front-end and the transformation engine in terms of the flow of information. The front-end parses the code into its internal representation. The front-end also has the implementation of the necessary interfaces provided by OpenAnalysis. This allows OpenAnalysis to query the front-end, build its abstract internal representation (AIR), perform all requested analyses and return the results to the front-end.
The front-end then builds a representation of the numerical kernel of the code to XAIF which is read by xaifBooster.
Each front-end supplies a catalogue of (language and front-end specific) intrinsics that the input XAIF is referring to. Based on the configuration some algorithm transforms the XAIF representation and unparses it into XAIF. The algorithm may require specific extensions (hence XAIF++ in the figure) to the  base  XML schema which are  provided by the algorithm and have to be understood by the front-end which uses such algorithms. An algorithm may also supply back translation support in the form of language specific code for templates, inlinable functions or a support library. The interface between xaifBooster and the other components are the elements encircled by the dashed line.

Transformation Engine


For simple program such as:

subroutine head(x, y, z)
  double precision, intent(in) :: x,z
  double precision, intent(inout) :: y

  y=x*y*z

end subroutine

we have the corresponding XAIF here and the modified xaif representing the application of a preaccumulation here. All of xaifBooster is implemented in C++.

Please refer to the Documentation section for detailed information.