Abstract.Automatic difFerentiation is a powerful technique for evaluating derivatives of functions given in the form of a high-level programming language such as Fortran, C, or C++. The program is treated ss a potentially very long sequence of elementary statements to which the chain rule of differential calculus is applied over and over again. Combining automatic differentiation and the organizational structure of toolkits for parallel scientific computing provides a mechanism for evaluating derivatives by exploiting mathematical insight on a higher level. In these toolkits, algorithmic structures such as BLAS-Iike operations, linear and nonlinear solvers, or integratora for ordinary differential equations can be identified by their standardized interfaces and recognized 8.s high-level mathematical objects rather than as a sequence of elementary statements. In this note, the differentiation of a linear solver with respect to some parameter vector is taken as an example. Mathematical insight is used to reformulate this problem into the solution of multiple linear systems that share the same coefficient matrix but differ in their right-hand sides. The experiments reported here use .4DIC, a tool for the automatic differentiation of C programs, and PETSC, an object-oriented toolkit for the parallel solution of scientific problems modeled by partial differential equations.
Numerical versus Automatic DifferentiationGra&ent methods for optimization problems and Newton's method for the solution of nonlinear systems are only two examples showing that computational techniques require the evaluation of derivatives of some objective function. In large-scale scientific applications, the objective function~: Rn + lRm is typically not available in analytic form but is given by a computer code written in a *