[ADOL-C] Branch switch when using same inputs as taping

Kshitij Kulshreshtha kshitij at math.upb.de
Mon Jun 20 08:45:27 EDT 2011

Hello, please try replacing a few of your commands. I am writing my
suggestions in line below:

As on 2011-06-20 14:35, Noam Gat did write:
> Hi,
> I have a strange problem when using adol-c to create a gradient.
> Before I try to prevent re-taping, I am currently retaping before each
> gradient evaluation.
> The general structure of the code is :
// replace this
>     trace_on(0);
// with

>     for (int i=0; i<N; i++)
>     {
>         rawGradParams[i] <<= X[i];
>     }
>     adouble result = objective(rawGradParams);
>     double retVal;
>     result >>= retVal;

// replace this
>     trace_off(0);
// with

// replace this
>     int gradientRetVal = gradient(0,N,X,G);
// with
      double one = 1;
      int retval = fos_reverse(1, 1, N, &one, G);

You should get the gradient in G with this. This is using the taping
process itself as the zero order forward call which is required before
calling the first order reverse call to compute the gradient.

If you want to prevent retaping you need to make totally sure that all
your comparison statements always give the same result and all loops
always run for the same number of iterations for every argument value.

Dr. Kshitij Kulshreshtha

Institut für Mathematik,
Universität Paderborn,
Warburger Straße 100,
33098 Paderborn.

Büro: A3.235

Arnikaweg 62
33100 Paderborn.

More information about the ADOL-C mailing list