[ADOL-C] inverse_tensor_eval memory error
Kshitij Kulshreshtha
kshitij at math.uni-paderborn.de
Fri Aug 4 03:26:32 EDT 2017
Hello,
in svn commit 740 on trunk or git commit 5ae5bf59 of the master branch
from 2017-05-30 some corrections to taylor.c in the ADOL-C source code
were already made. This was a fix for memory errors.
Brad's program runs in valgrind for me with no errors, as does Hoang's
example from additional_examples/taylor/coordinates.c
Please switch to SVN trunk or GIT master and let me know if you still
see a problem. (I'm travelling starting tomorrow morning, so I'll be
able to get to it, when I'm back on 21st Aug).
Best,
Kshitij
On 08/04/17 08:16, Andrea Walther wrote:
> Dear Hoang Giang Bui,
>
> thanks for letting us know! That indeed helps a lot.
>
> Best regards
>
> Andrea
>
>
>> I checked that further and found that this example still works in
>> v2.5.2 but fail at v2.6.0. I think that can be helpful for you to
>> track down this problem.
>>
>> Best
>>
>>
>> Giang
>>
>> On Thu, Aug 3, 2017 at 10:43 PM, Hoang Giang Bui <hgbk2008 at gmail.com
>> <mailto:hgbk2008 at gmail.com>> wrote:
>>
>> Hello
>>
>> I also got the error of inverse_tensor_eval. I executed the example
>> in examples/additional_examples/taylor/coordinates and received the
>> error below. I used ADOL-C 2.6.3
>>
>> COORDINATES (ADOL-C Example)
>>
>> Cartesian coordinates:
>> z_1: (e.g. 4)
>> 4
>> z_2: (e.g. 3)
>> 3
>>
>> Polar coordinates:
>> z_3: (e.g. 5)
>> 5
>> z_4: (e.g. 0.64350110879 <tel:06435%200110879>)
>> 0.64
>>
>> Highest derivative degree = 3
>> *** Error in `./coordinates': double free or corruption (out):
>> 0x0000000000c8df90 ***
>> Aborted (core dumped)
>>
>> Please help to take a look.
>>
>> Giang
>>
>> On Thu, Aug 3, 2017 at 8:32 PM, Brad Bell <bradbell at seanet.com
>> <mailto:bradbell at seanet.com>> wrote:
>>
>> I have am trying to run a simple example using
>> inverse_tensor_eval. To be specific
>> F(z) = sin(z)
>> I have been unable to figure out why I am getting memory errors
>> when I run the
>> code included below. When I run it in valgrind, I get the
>> following output:
>>
>> =================================================================================================
>>
>> build>valgrind ./adolc
>> ==29183== Memcheck, a memory error detector
>> ==29183== Copyright (C) 2002-2015, and GNU GPL'd, by Julian
>> Seward et al.
>> ==29183== Using Valgrind-3.12.0 and LibVEX; rerun with -h for
>> copyright info
>> ==29183== Command: ./adolc
>> ==29183==
>> ==29183== Invalid free() / delete / delete[] / realloc()
>> ==29183== at 0x4C2ED4A: free (vg_replace_malloc.c:530)
>> ==29183== by 0x4F8B731: inverse_tensor_eval (taylor.c:741)
>> ==29183== by 0x401094: main (adolc.cpp:37)
>> ==29183== Address 0x699cf38 is 8 bytes inside a block of size
>> 32 alloc'd
>> ==29183== at 0x4C2FA50: calloc (vg_replace_malloc.c:711)
>> ==29183== by 0x4E63FA5: myalloc2 (adalloc.c:125)
>> ==29183== by 0x4F8B1B5: inverse_tensor_eval (taylor.c:688)
>> ==29183== by 0x401094: main (adolc.cpp:37)
>> ==29183==
>> ==29183== Invalid free() / delete / delete[] / realloc()
>> ==29183== at 0x4C2ED4A: free (vg_replace_malloc.c:530)
>> ==29183== by 0x4F8B74C: inverse_tensor_eval (taylor.c:743)
>> ==29183== by 0x401094: main (adolc.cpp:37)
>> ==29183== Address 0x699cf98 is 8 bytes inside a block of size
>> 32 alloc'd
>> ==29183== at 0x4C2FA50: calloc (vg_replace_malloc.c:711)
>> ==29183== by 0x4E63FA5: myalloc2 (adalloc.c:125)
>> ==29183== by 0x4F8B1D2: inverse_tensor_eval (taylor.c:689)
>> ==29183== by 0x401094: main (adolc.cpp:37)
>> ==29183==
>> tensor[0][0] = 0.523599 <tel:0.523599>
>> tensor[0][1] = 1.1547
>> tensor[0][2] = 0.7698
>> z = 0.523599 <tel:0.523599>
>> zp = 1.1547
>> zpp = 0.7698
>> adolc: Done
>> ==29183==
>> ==29183== HEAP SUMMARY:
>> ==29183== in use at exit: 1,094 bytes in 20 blocks
>> ==29183== total heap usage: 107 allocs, 89 frees, 19,481,090
>> bytes allocated
>> ==29183==
>> ==29183== LEAK SUMMARY:
>> ==29183== definitely lost: 104 bytes in 6 blocks
>> ==29183== indirectly lost: 8 bytes in 1 blocks
>> ==29183== possibly lost: 0 bytes in 0 blocks
>> ==29183== still reachable: 982 bytes in 13 blocks
>> ==29183== suppressed: 0 bytes in 0 blocks
>> ==29183== Rerun with --leak-check=full to see details of leaked
>> memory
>> ==29183==
>> ==29183== For counts of detected and suppressed errors, rerun
>> with: -v
>> ==29183== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0
>> from 0)
>> build>
>>
>> =================================================================================================
>>
>> # include <adolc/adolc.h>
>> int main(void)
>> {
>> int n = 1; // number of independent and dependent
>> variables
>> int d = 2; // highest order derivative
>> int p = 1; // number of directions
>> int size = 3; // [(p + d) choose d] = (p+d-0) *...* (p+1) /
>> (1 *...* d)
>> //
>> double* S[1]; // seed matrix S[n][p]
>> S[0] = new double[p];
>> //
>> double* tensor[1]; // partials of z w.r.t x tensor[n][size]
>> tensor[0] = new double[size];
>>
>> // Set Seed matrix to identity
>> S[0][0] = 1.0;
>>
>> // independent and dependent variables
>> adouble az[1], ay[1]; // az[n], ay[n]
>> double z[1], y[1]; // z[n], y[n]
>>
>> // record operations for y = F(z) = sin(z)
>> short int tag = 1; // tape identifier
>> trace_on(tag); // start recording
>> z[0] = 1.0; // value during recording
>> az[0] <<= z[0]; // independent variable
>> ay[0] = sin(az[0]); // function evaluation
>> ay[0] >>= y[0]; // dependent variable
>> trace_off(); // turn off recording
>>
>> // evaluate inverse of F at x0
>> double x0 = 0.5; // argument for inverse
>> z[0] = std::asin(x0); // F^-1 (x0) = z0
>> inverse_tensor_eval(tag, n, d, p, z, tensor, S);
>>
>> // print tensor
>> for(int j = 0; j < size; j++)
>> { std::cout << "tensor[0][" << j << "] = " <<
>> tensor[0][j] << "\n";
>> }
>>
>> // derivative of F^-1 (x0) = 1.0 / sqrt( 1 - x0 * x0 )
>> double zp = 1.0 / std::sqrt(1.0 - x0 * x0 );
>>
>> // second derivative of F^-1 (x0) = x0 / sqrt( 1 - x0 *
>> x0 )^3
>> double zpp = x0 * zp * zp * zp;
>>
>> // print derivatives for z
>> std::cout << "z = " << z[0] << "\n";
>> std::cout << "zp = " << zp << "\n";
>> std::cout << "zpp = " << zpp << "\n";
>> //
>> delete [] S[0];
>> delete [] tensor[0];
>> //
>> std::cout << "adolc: Done\n";
>> return 0;
>> }
>>
>> _______________________________________________
>> ADOL-C mailing list
>> ADOL-C at list.coin-or.org <mailto:ADOL-C at list.coin-or.org>
>>
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_adol-2Dc&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=0eOhD1zcLnB9JhadNXrezwNw87TYLa0fyHrxCkWC5J8&m=_Ons9tqju2E2RHmPQy2M4dxzTzDANdgNNsqJlGe3_xE&s=nCnpB-VNJPhm9DrrYdYukpvGjJLoI0XJjc321inwUW0&e=
>>
>>
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_adol-2Dc&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=0eOhD1zcLnB9JhadNXrezwNw87TYLa0fyHrxCkWC5J8&m=_Ons9tqju2E2RHmPQy2M4dxzTzDANdgNNsqJlGe3_xE&s=nCnpB-VNJPhm9DrrYdYukpvGjJLoI0XJjc321inwUW0&e=>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> ADOL-C mailing list
>> ADOL-C at list.coin-or.org
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_adol-2Dc&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=sszAvj5-wJal_YaNkOXa8y4Mts3w-L-xYDXwPYeYptQ&m=gfhyE5RpFM_GBYHEyusXs5ASuA5gN4cmZKSjaEDKGxk&s=zYFcDozFnxwQ6LdZOXeaoV7XItU8I-J9XrCp3JyCP_Q&e=
>>
>>
>
--
PD. Dr. Kshitij Kulshreshtha
Institut für Mathematik,
Universität Paderborn,
Warburger Straße 100,
33098 Paderborn.
Büro: TP21.1.21
Besucheradresse:
Technologiepark 21
33098 Paderborn.
Privatanschrift:
Arnikaweg 62
33100 Paderborn.
More information about the ADOL-C
mailing list