[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?
- Re: Norm problem in Octave 3.4.0 (Mac?),
Julien Salort <=