The art of computer programming, volume 1 (3rd ed.): fundamental algorithms
The art of computer programming, volume 1 (3rd ed.): fundamental algorithms
Recipes for adjoint code construction
ACM Transactions on Mathematical Software (TOMS)
Evaluating derivatives: principles and techniques of algorithmic differentiation
Evaluating derivatives: principles and techniques of algorithmic differentiation
Performance optimization of numerically intensive codes
Performance optimization of numerically intensive codes
Automatic differentiation of algorithms: from simulation to optimization
Automatic differentiation of algorithms: from simulation to optimization
Adifor 2.0: Automatic Differentiation of Fortran 77 Programs
IEEE Computational Science & Engineering
ACM Transactions on Mathematical Software (TOMS)
A differentiation-enabled Fortran 95 compiler
ACM Transactions on Mathematical Software (TOMS)
Markowitz-type heuristics for computing Jacobian matrices efficiently
ICCS'03 Proceedings of the 2003 international conference on Computational science: PartII
Hierarchical automatic differentiation by vertex elimination and source transformation
ICCSA'03 Proceedings of the 2003 international conference on Computational science and its applications: PartII
An efficient overloaded method for computing derivatives of mathematical functions in MATLAB
ACM Transactions on Mathematical Software (TOMS)
Hi-index | 0.00 |
In this paper, we present first results from EliAD, a new automatic differentiation tool. EliAD uses the Elimination approach for Automatic Differentation first advocated by Griewank and Reese [Automatic Differentiation of Algorithms, SIAM (1991), 126-135]. EliAD implements this technique via source-transformation, writing new Fortran code for the Jacobians of functions defined by existing Fortran code. Our results are from applying EliAD to the Roe flux routine commonly used in computational fluid dynamics. We show that we can produce code that calculates the associated flux Jacobian approaching or in excess of twice the speed of current state-of-the-art automatic differentiation tools. However, in order to do so we must take into account the architecture on which we are running our code. In particular, on processors that do not support out-of-order execution, we must reorder our derivative code so that values may be reused while in arithmetic registers in order that the floating point arithmetic pipeline may be kept full.