[ADOL-C] Branch switch when using same inputs as taping
Noam Gat
noam.gat at mail.huji.ac.il
Tue Jun 21 06:51:10 EDT 2011
Making the proposed changes let to a crash in fos_gradient.
In the assign_ind case the ADOLC_GET_TAYLOR call (which translates to
get_tay_block_r) crashes because
fseek fails because ADOLC_CURRENT_TAPE_INFOS.tay_file is null...
>
> 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
> trace_on(1,1)
>
>
> > 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
> trace_off();
>
> // 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.coin-or.org/pipermail/adol-c/attachments/20110621/c7b9ce0e/attachment.html
More information about the ADOL-C
mailing list