[Developers] trying to compare autodif with cppad

dave fournier davef at otter-rsch.com
Wed Aug 13 10:20:39 PDT 2014


On 08/13/2014 09:26 AM, Steve Martell wrote:

One extra thing.  I put some timing into the models so that it would 
only time

         begin_time();
           f=ln_det(M)
           get derivatives();
         end_time();

Otherwise you don't really know what extra overhead is being included.

Both models print out the time as something lik

    1.235 ms


> Dave I was able to compile and run your examples.
> ---------------------------------------------------------------------
> With n=300 here are the run times.
> myreverse_admb (safe mode):
> real    0m0.643s
> user    0m0.615s
> sys     0m0.015s
>
>
> myreverse_admb (optimize):
> real    0m0.368s
> user    0m0.337s
> sys     0m0.014s
>
> Using the cppad
> myreverse:
> real    0m17.875s
> user    0m17.010s
> sys     0m0.847s
>
>
> myreverse with -DNDEBUG flag:
> real    0m5.287s
> user    0m4.894s
> sys     0m0.378s
>
> ---------------------------------------------------------------------
> With n=500
> myreverse_admb (safe mode):
> real    0m2.414s
> user    0m2.341s
> sys     0m0.035s
>
> myreverse_admb (optimize):
> real    0m1.450s
> user    0m1.378s
> sys     0m0.035s
>
> Using the cppad
> myreverse:
> n = 500
> cppad-20140530 error from a known source:
> dw = f.Reverse(q, w): has a nan,
> but none of its Taylor coefficents are nan.
> Error detected by false result for
>      ! ( hasnan(value) && check_for_nan_ )
> at line 202 in the file
>      /usr/include/cppad/local/reverse.hpp
> Assertion failed: (false), function Default, file /usr/include/cppad/error_handler.hpp, line 210.
> Abort trap: 6
>
> real    1m19.457s
> user    1m15.951s
> sys     0m3.180s
> bash-3.2$
>
> myreverse with -DNDEBUG flag:
> n=500
> output is nan's
> real    0m23.766s
> user    0m22.090s
> sys     0m1.643s
> ---------------------------------------------------------------------
> Steve
>
>
> On Aug 13, 2014, at 6:58 AM, dave fournier <davef at otter-rsch.com> wrote:
>
>> On 08/12/2014 10:01 PM, Kasper Kristensen wrote:
>>
>> Sorry about forgetting the hpp file. It is now attached.  CPPAD version is now much faster
>> with the -DNDEBUG option.  However when I increase the matrix size to 500x500  (I'm aiming for fast 2,000x2,000)
>> the cppad version produces NANS. Also note that the autodif version produces the numbers and stores them
>> in a file named vector for the cppad version.
>>
>>       Dave
>>
>>
>>
>>> Dave,
>>>
>>> I could not run your test because "myldet.hpp" was not attached.
>>> Did you try set the "-DNDEBUG" flag with the cppad compilation? If I recall correctly this could make a big difference.
>>>
>>> Kasper
>>>
>>>
>>>
>>> ________________________________________
>>> From: developers-bounces at admb-project.org [developers-bounces at admb-project.org] on behalf of dave fournier [davef at otter-rsch.com]
>>> Sent: Wednesday, August 13, 2014 5:26 AM
>>> To: developers at admb-project.org
>>> Subject: [Developers] trying to compare autodif with cppad
>>>
>>>      There has been a lot of material about TMB lately.  I think that TMB
>>> uses cppad as its underlying AD engine.   I am interested in
>>> trying to understand if cppad is superior to autodif and if so whether
>>> ADMB could be modified to use cppad.
>>>
>>> As a first attempt I have been working at reproducing the LU
>>> decomposition to calculate the log of
>>> (the absolutevalue of ) the determinant of a matrix.  The code is
>>> attached.  myreverse.cpp calculates the log det and
>>> the gradient via reverse model AD using cppad.  myreverse_admb.cpp does
>>> the same thing using autodif.
>>>
>>> For a 300x300 matrix the time required for these calculations is
>>> approximately  .25 seconds for autodif and 19 seconds for cppad so that
>>> autodif is about 75 times faster.  Obviously there may be techniques
>>> which can speed up cppad or I may have made
>>> some beginners error.  Perhaps the experts among us could comment.
>>>
>>> I could not compare matrices larger than 300x300 because the cppad code
>>> crashed.  The autodif version
>>> could do a 500x500 matrix in 1.23 seconds and a 1000x1000 matrix in 11
>>> seconds.
>>>
>>>
>> <myldet.hpp><myreverse.cpp><reverse_one.cpp>_______________________________________________
>> Developers mailing list
>> Developers at admb-project.org
>> http://lists.admb-project.org/mailman/listinfo/developers
>
> ________________________________
>
> This internet e-mail message, and any files transmitted with it, contains confidential, privileged information that is intended only for the addressee. If you have received this e-mail message in error, please call us at (206) 634-1838 collect if necessary) and ask to speak to the message sender. Nothing in this e-mail or the act of transmitting it, is to be construed as a waiver of any rights or privileges enjoyed by the sender or the International Pacific Halibut Commission pursuant to the International Organizations Immunities Act, 22 U.S.C. Sec. 288 et seq.
>



More information about the Developers mailing list