help-octave
[Top][All Lists]
Advanced

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

Re: compare the executive speed with Matlab


From: wim van hoydonck
Subject: Re: compare the executive speed with Matlab
Date: Fri, 2 Jan 2009 23:21:44 +0100

On Fri, Jan 2, 2009 at 10:33 PM, Sergei Steshenko <address@hidden> wrote:
>
>
>
> --- On Fri, 1/2/09, John W. Eaton <address@hidden> wrote:
>
>> From: John W. Eaton <address@hidden>
>> Subject: Re: compare the executive speed with Matlab
>> To: address@hidden
>> Cc: "Jordi Guti��rrez Hermoso" <address@hidden>, address@hidden, "Howard" 
>> <address@hidden>
>> Date: Friday, January 2, 2009, 1:03 PM
>> On  2-Jan-2009, Sergei Steshenko wrote:
>>
>
>> Please, use cputime.  Wall clock time is meaningless here
>> as there
>> could be other things running on your system which affect
>> the timing.
>>
>
>>
>>   octave:1> angles = pi * (1:1000000) / 1000000;
>>   octave:2> t = cputime (); sins = sin (angles); cputime
>> () - t
>>   ans =  0.072004
>
> Here are better measurements - forgot to lock CPU frequency originally.
>
> 1) octave:
>
> angles = pi * (1:1000000) / 1000000;tic;t = cputime (); sins = sin(angles); 
> fprintf(stdout(), "CPU time: %g\n", cputime () - t);toc
> CPU time: 0.140009
> Elapsed time is 0.14142704010009765625 seconds.
>
> 2) "C":
>
> CPU time took 0.04 seconds at line number 74 of 'benchmark_sin.c' file
> Wallclock time took 0.0490916 seconds at line #74 of 'benchmark_sin.c' file
>
> - the same 3+ times.
>
> My 'octave' runs on a 32 bits machine. It uses
>
> -mtune=native -march=native -mfpmath=sse,387 -O2
>
> optimizations.
>
> With this simple 'sin' test -mfpmath=sse,387 changes results:
>
> CPU time took 0.06 seconds at line number 74 of 'benchmark_sin.c' file
> Wallclock time took 0.047755 seconds at line #74 of 'benchmark_sin.c' file
>
> - the funny thing is that now CPU time is less than wallclock time which
> can't be.
>
> If you count by CPU time, still the speedup is 2+ times for
>
> 'octave' version is 3.0.3, it was built using the same gcc-4.3.2 I used
> for benchmarking the "C" program.
>
> --Sergei.
>

If I run this benchmark, I see the following figures
(Fedora 10, Intel Core2 Duo @ 2GHz, gcc 4.3.2, gfortran 4.3.2, ifort 11.0):

Octave:
octave:1> angles = pi*(1:1000000)/1000000;
octave:2> t = cputime(); sins = sin(angles); cputime()-t
ans =  0.060991

C (gcc -mtune=native -march=native -O3 benchmark_sin.c -lm -lrt):
CPU time took 0.05 seconds at line number 74 of 'benchmark_sin.c' file
Wallclock time took 0.0486391 seconds at line #74 of 'benchmark_sin.c' file

Fortran (gfortran -mtune=native -march=native -mfpmath=sse,387 -O2-o
fs_gf fortran_sin.f90)
3.69939999999999991E-002

Fortran (intel: ifort -o fs fortran_sin.f90 -O2):
6.000000000000001E-003

Fortran (intel, ifort -o fs fortran_sin.f90 -O2):
5.000000000000000E-003

To conclude, on my computer, for this test, Octave is approximately
as fast as C, gfortran is a little bit faster and ifort is 10 times as fast.

If you want to speed up your code, write the critical parts in Fortran, not C.

Greetings,

Wim


$ cat fortran_sin.f90
program fortran_sin
  implicit none
  integer , parameter   :: dp = selected_real_kind(p=13,r=300)
  integer , parameter   :: n  = 1000000
  integer               :: i
  real(dp) , parameter  :: pi = 3.1415926535897932385_dp
  real(dp)              :: angles(n) , sins(n)
  real(dp)              :: t0 , t1

  call cpu_time(t0)
  angles = real( [(i, i=0,n-1)]/n , kind=dp )
  sins   = pi * sin(angles)
  call cpu_time(t1)
  print *, t1-t0

end program fortran_sin



reply via email to

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