[ADOL-C] sparse_jacobian.cpp
Brad Bell
bradbell at seanet.com
Mon Feb 24 10:56:30 EST 2020
I am running some speed tests that repeatedly (many time) execute ADOL-C sparse Jacobian
calculations and have been running out of memory.
While using valgrind to help tack this down I got the output below for the sparse_jacobian program
example; to be specific,
ADOL-C/examples/additional_examples/sparse/sparse_jacobian.cpp
Can anyone else reproduce this ?
sparse>valgrind --leak-check=full --show-leak-kinds=all ./sparse_jacobian
==674990== Memcheck, a memory error detector
==674990== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==674990== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==674990== Command: ./sparse_jacobian
==674990==
c = -1.123533e+00 1.128761e+00 5.906196e+00
J
0: 2.0000 1.0000 0.0000 -0.9823 -0.0071 0.0000
1: 0.0000 0.0000 2.1972 2.7726 0.0000 0.0000
2: 0.0000 0.0000 0.0000 0.0000 3.6428 3.2721
... snip ...
==674990==
==674990== HEAP SUMMARY:
==674990== in use at exit: 2,704 bytes in 7 blocks
==674990== total heap usage: 438 allocs, 431 frees, 32,086,422 bytes allocated
==674990==
==674990== 256 bytes in 1 blocks are definitely lost in loss record 1 of 7
==674990== at 0x483880B: malloc (vg_replace_malloc.c:309)
==674990== by 0x44A89A: fov_reverse (fo_rev.c:507)
==674990== by 0x426998: sparse_jac (sparsedrivers.cpp:402)
==674990== by 0x403B5C: main (sparse_jacobian.cpp:107)
... snip ...
==674990== LEAK SUMMARY:
==674990== definitely lost: 1,920 bytes in 6 blocks
==674990== indirectly lost: 0 bytes in 0 blocks
==674990== possibly lost: 0 bytes in 0 blocks
==674990== still reachable: 784 bytes in 1 blocks
==674990== suppressed: 0 bytes in 0 blocks
==674990==
==674990== For lists of detected and suppressed errors, rerun with: -s
==674990== ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 0 from 0)
The config.log file contains:
configure:3635: result: g++
configure:3662: checking for C++ compiler version
configure:3671: g++ --version >&5
g++ (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1)
The version of valgrind is given by
sparse>valgrind --version
valgrind-3.15.0
P.S.
Where can I find specifications for the sparse_jac routine ?
Looking at sparsedrivers.cpp, it seems that if *rind, *cind, and *values are all not null on input,
they are used and not re-allocated (under the assumption that the sparsity pattern has not changed
since the previous call) ?
It seems that in jacobian_example.cpp, they are freed and reallocated for every call.
More information about the ADOL-C
mailing list