Automatic Differentiation of Assembler Code

Three different approaches are currently used by developers of AD tools to overcome the restriction to a given high-level programming language.

  • transformation the numerical kernel ("deal with intersection of all programming languages"); e.g. OpenAD
  • transformation on common intermediate representation ("deal with union of all programming languages"); e.g. Tapenade
  • transformation of the compiler's assembler output
Within the CompAD project we are investigating the third alternative.

The current version of ADAC can handle a number of test problems originating from implementations in C/C++ or Fortran and including several from the MINPACK-2 test problem collection.

Example

See a more detailed description for further information on how to use the current prototype. You may also download a binary distribution and try it on your Linux system (no guarantee for compatibilty given yet).

See a more detailed description for further information on how to use the current prototype. You may also download a binary distribution and try it on your Linux system (no guarantee for compatibilty given yet).

COMPAD Release

  • The last release of ADAC has been developed within project COMPAD. Because of that it has been amended with many issues necessary to meet requirements of NAGWare compiler and rather complex example which has been debugged with the help of NAGWare compiler and ADAC. Particularly, two files in archive "adac_spec_glob_form.s" and "adac_spec_glob.s" are necessary only for "QinetiQ" example, but they are present nowadays in release always.

  • Below given examples have been compressed into archive ExampleName.tar.gz and are not intended to run online. Therefore you must download example, extract the files and run ExampleName.bat script. Detailed explanations are given in readme.txt file and additionally you can look through commentaries to each step of script in ExampleName.bat file.

  • Computing of derivative for function y = sin(x), where both of variables x and y are global. Assembler source codes used for source transformation have been produced from the corresponding high level source codes by compilers: GNU C, GNU Fortran 77, NAGWare Fortran.

  • Computing of second partial derivatives (Hessian). The first partial derivatives are calculated with the help of adjoint code obtained by NAGWare Fortran compiler. Tangent linear code is then generated from adjoint code in order to get first derivatives from Jacobian. To obtain second partial derivatives we provide in driver two runs of ADAC-generated code with the corresponding Cartesian vector.

  • NAGWare Fortran+ADAC

  • For each latter example there is a detailed description in archive in "readme.txt" file.

  • Next example shows very large source assembler code including many calls of subroutines, which are in turns the subjects of differentiation.

  • User must extract the files, run command in console:
    • export F95=path_to_your_F95_compiler
    • and run the script adac_nag_qinetic_all.bat
Topic revision: r21 - 2009-04-30 - 06:07:38 - Main.uwe
 
Header STCE
Header RWTH RWTH Informatik
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.