[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: A faster sum
From: |
Keith Goodman |
Subject: |
Re: A faster sum |
Date: |
Sat, 21 May 2005 09:06:00 -0700 |
Most of the time in your examples, I think, is spent in rand. Try
moving that outside of your timing.
On 5/21/05, Mike Miller <address@hidden> wrote:
> On Sat, 21 May 2005, Keith Goodman wrote:
>
> > On 5/21/05, Victor Eijkhout <address@hidden> wrote:
> >> You're replacing n^2 operations by n^3. Those operations run faster,
> >> but there are many more of them.
> >
> > So in theory the relative speedup decreases as the matrix size
> > increases? That's not what I get in practice. For a 1000x1000 matrix the
> > multiplication method is about 3 times faster. For a 5000x5000 matrix
> > it's about 8 times faster.
>
>
> On an old Octave version, the ones method is just a tad slower:
>
> GNU Octave, version 2.0.14 (sparc-sun-solaris2.6).
>
> octave:1> t=cputime; sum(rand(500,500)); cputime-t
> ans = 1.4200
> octave:2> t=cputime; ones(1,500)*rand(500,500); cputime-t
> ans = 1.4500
>
>
> On a newer Octave version (but not the newest), thoe ones method is just a
> tad faster:
>
> GNU Octave, version 2.1.50 (i686-pc-linux-gnu).
>
> octave:119> t=cputime; sum(rand(2000,2000)); cputime-t
> ans = 0.90000
> octave:121> t=cputime; ones(1,2000)*rand(2000,2000); cputime-t
> ans = 0.86000
>
>
> I get the argument about n^2 and n^3, but it looks like I'm seeing n^2 in
> both cases. It's as if multiplying by 1 is free. I see that the ones
> method does just a little bit better than sum on my Octave installation:
>
>
> GNU Octave, version 2.1.50 (i686-pc-linux-gnu).
>
> octave:124> t=cputime; N=1000; ones(1,N)*rand(N,N); cputime-t
> ans = 0.22000
> octave:125> t=cputime; N=2000; ones(1,N)*rand(N,N); cputime-t
> ans = 0.86000
> octave:126> t=cputime; N=3000; ones(1,N)*rand(N,N); cputime-t
> ans = 1.9400
> octave:127> t=cputime; N=4000; ones(1,N)*rand(N,N); cputime-t
> ans = 3.4600
> octave:128> t=cputime; N=5000; ones(1,N)*rand(N,N); cputime-t
> ans = 5.4000
>
> octave:129> t=cputime; N=1000; sum(rand(N,N)); cputime-t
> ans = 0.23000
> octave:130> t=cputime; N=2000; sum(rand(N,N)); cputime-t
> ans = 0.91000
> octave:131> t=cputime; N=3000; sum(rand(N,N)); cputime-t
> ans = 2.0700
> octave:132> t=cputime; N=4000; sum(rand(N,N)); cputime-t
> ans = 3.6400
> octave:133> t=cputime; N=5000; sum(rand(N,N)); cputime-t
> ans = 5.6300
>
>
> Best,
>
> Mike
>
-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.
Octave's home on the web: http://www.octave.org
How to fund new projects: http://www.octave.org/funding.html
Subscription information: http://www.octave.org/archive.html
-------------------------------------------------------------
- A faster sum, Keith Goodman, 2005/05/21
- Re: A faster sum, Victor Eijkhout, 2005/05/21
- Re: A faster sum, Keith Goodman, 2005/05/21
- Re: A faster sum, Mike Miller, 2005/05/21
- Re: A faster sum, Victor Eijkhout, 2005/05/21
- Re: A faster sum, Keith Goodman, 2005/05/21
- Re: A faster sum, Victor Eijkhout, 2005/05/21
- Re: A faster sum, Mike Miller, 2005/05/21
- Re: A faster sum, John W. Eaton, 2005/05/21