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.
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.