[ADOL-C] performance question

Kshitij Kulshreshtha kshitij at math.upb.de
Mon Sep 23 12:05:48 EDT 2013

Hello Antoine,

the timing of your last query was a bit unfortunate, as both the main developers of ADOL-C were offline due to travel. As far as compilation errors are concerned please send us the exact error messages spit out by the compiler along with some small code to reproduce the problem. As far as computational cost is concerned, it depends mainly on the function evaluation code that you provide to ADOL-C between calls to trace_on() and trace_off(). The number of variables doesn't factor in explicitly. The basic factor is the number of operations done with active variables. Memory allocation plays only a small role except if you need to retrace.

For the sparse_jac() call it does save some time if the sparse structure is preallocated, especially if you call it many times with similar structure. If the pattern remains the same always you should indeed store the pattern and the seed matrix and call only forward / reverse followed by recovery. 

For further information about sparse computations and their efficiency please look at the publications of Andrea Walther and Assefaw Gebremedhin.


Antoine De Blois <antoine.deblois at aero.bombardier.com> wrote:
>Hi everyone,
>I have been using ADOL-C for the past months and I obtain expected
>jacobian results, validated by finite difference.
>I am looking to improve the computational cost of the method. I had
>posted a question a few weeks ago regarding outputs from my profiler,
>but unfortunately I did not get any answer :(. I will try to ask it
>again, but in more general terms:
>·         Generally speaking, what are the determining factors that
>influence the computational cost? (Number of independent variables,
>number of active variables, memory allocation, etc.)
>·         Is it faster if I pre-allocate the sparsed storage (rows,
>cols and values) to a known maximum number of non-zeros elements?
>·         I use the driver sparse_jac but my sparsity structure remains
>more or less the same for the bulk of my domain. Should I rather
>generate the jacobian pattern (jac_pat), followed by the seed matrix
>(generate_seed_jac) and then the call to either forward or reverse? Is
>there any gain here? In other words, is the computation of the jacobian
>pattern a big part of the computational cost?
>Any comment on improving my code performance is welcome!
>Thank you for your time and efforts,
>Antoine DeBlois
>Specialiste ingenierie, MDO lead / Engineering Specialist, MDO lead
>Aéronautique / Aerospace
>T    514-855-5001, x 50862
>antoine.deblois at aero.bombardier.com<mailto:antoine.deblois at aero.bombardier.com>
>2351 Blvd Alfred-Nobel
>Montreal, Qc
>H4S 1A9
>[Description :
>CONFIDENTIALITY NOTICE - This communication may contain privileged or
>confidential information.
>If you are not the intended recipient or received this communication by
>error, please notify the sender
>and delete the message without copying
>ADOL-C mailing list
>ADOL-C at list.coin-or.org

Dr. Kshitij Kulshreshtha

Scribbled on an Android Tablet

More information about the ADOL-C mailing list