help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Norm problem in Octave 3.4.0 (Mac?)


From: Julien Salort
Subject: Re: Norm problem in Octave 3.4.0 (Mac?)
Date: Fri, 1 Apr 2011 10:11:38 +0200

Hello,

Pantxo Diribarne and myself have tried also this test on an executable compiled 
against Fink libraries instead of self-compiled libraries and Vic's problem 
seems to have disappeared on this version...
So maybe this has something to do with the compilation options that I used when 
I compiled the dependencies...

We'll keep trying other compile options...

Bests,

Julien

Le 1 avr. 2011 à 02:01, Moo a écrit :

> On Thu, Mar 31, 2011 at 8:39 AM, Vic Norton <address@hidden> wrote:
> I have compared the speed of the instructions "norm(x)" and
> "sqrt(sum(x .* x))" on Thomas Treichl's Octave.app (3.2.3) and Julien
> Salort's Octave.app (3.4.0). These versions of octave can be found at
> http://sourceforge.net/projects/octave/files/Octave%20MacOSX%20Binary/
> 2011-03-27 binary of Octave 3.4.0 (2011-03-27)
> 2009-10-03 binary of Octave 3.2.3 (2010-11-23)
> 
> Here is a summary of the results I observed.
> 1. Octave 3.4.0 is a bit slower than Octave 3.2.3 on sqrt(sum(x .* x)).
> 2. On Octave 3.2.3, norm(x) is a bit faster than sqrt(sum(x .* x)). This
>   is as it should be since NRM2 is a BLAS.
> 3. On Octave 3.4.0, sqrt(sum(x .* x)) is four times as fast as norm(x).
>   This is not as it should be for the reason cited in 2.
> 4. norm(x) on Octave 3.2.3 is nine times as fast as norm(x) on Octave
>   3.4.0.
> 
> My test script and my results appear below.
> 
> Regards,
> 
> Vic
> 
> The test script. The two different shebang lines placed at the top
> test the two different versions of octave.
>   #!/usr/local/bin/octave323
> 
>   # norm2test.m
> 
>   #!/usr/local/bin/octave323
>   #!/usr/local/bin/octave340
> 
>   ntests = 20; n = 1e6; x = rand(n, 1);
>   test1 = zeros(ntests, 1); test2 = zeros(ntests, 1);
> 
>   for i = 1 : ntests
>     tic;
>     norm(x);
>     test1(i) = toc;
>   endfor
>   for i = 1 : ntests
>     tic;
>     sqrt(sum(x .* x));
>     test2(i) = toc;
>   endfor
> 
>   printf ("norm2 speed test - octave %s\n", version);
>   printf ("%40s\n","ellapsed times");
>   printf ("%30s%10s\n", "mean", "stdv");
>   printf ("%-20s", "norm(x)");
>   printf ("%10.2e", mean(test1));
>   printf ("%10.2e", std(test1));
>   printf ("\n");
>   printf ("%-20s", "sqrt(sum(x .* x))");
>   printf ("%10.2e", mean(test2));
>   printf ("%10.2e", std(test2));
>   printf ("\n");
> 
> 
> The output.
> ---
> GNU Octave, version 3.2.3
> Copyright (C) 2009 John W. Eaton and others.
> This is free software; see the source code for copying conditions.
> There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
> FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.
> 
> Octave was configured for "i386-apple-darwin8.11.1".
> 
> Additional information about Octave is available at http://www.octave.org.
> 
> Please contribute if you find this software useful.
> For more information, visit http://www.octave.org/help-wanted.html
> 
> Report bugs to <address@hidden> (but first, please read
> http://www.octave.org/bugs.html to learn how to write a helpful report).
> 
> For information about changes from previous versions, type `news'.
> 
> norm2 speed test - octave 3.2.3
>                        ellapsed times
>                        mean      stdv
> norm(x)               7.06e-03  2.62e-05
> sqrt(sum(x .* x))     1.06e-02  1.98e-03
> ---
> 
> 
> I copied your test code and ran it in Octave 3.4.0, compiled myself with all 
> the libraries, running in Ubuntu 10.04.  Here's my numbers.  I didn't get an 
> order of magnitude difference like you did, but it was roughly 3x faster for 
> vector size n=1e6 (these are my typical results):
> 
>                           ellapsed times
>                           mean      stdv
> norm(x)               7.89e-04  2.82e-05
> sqrt(sum(x .* x))     2.66e-04  4.30e-05
> 
> I noticed you didn't change the value for n in your tests.  Just out of 
> curiosity I upped it to n=1e7; my reults were:
> 
>                           ellapsed times
>                           mean      stdv
> norm(x)               7.81e-02  1.95e-04
> sqrt(sum(x .* x))     8.11e-02  3.94e-04
> 
> For n=1e8:
> 
>                           ellapsed times
>                           mean      stdv
> norm(x)               7.89e-01  1.30e-02
> sqrt(sum(x .* x))     8.56e-01  2.29e-02
> 
> 
> Another curious thing happens for me when you pause slightly between 
> iterations:
> 
>   for i = 1 : ntests
>     tic;
>     norm(x);
>     test1(i) = toc;
>     pause(0.01)
>   endfor
>   for i = 1 : ntests
>     tic;
>     sqrt(sum(x.*x));
>     test2(i) = toc;
>     pause(0.01)
>   endfor
> 
> For n=1e6 the results ended up noticeably different:
> 
>                           ellapsed times
>                           mean      stdv
> norm(x)               1.28e-02  3.68e-03
> sqrt(sum(x .* x))     9.49e-03  2.79e-03
> 
> I'm no expert in the inner workings of Octave, but maybe this can help draw 
> some conclusions? Can you try putting pauses in at the end of your loops like 
> I did and see the results?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]