From owner-octave-sources at bevo dot che dot wisc dot edu Thu Jun 6 10:59:53 1996 Subject: benchmark 1.7 From: Francesco Potorti` To: Octave source list Date: Thu, 6 Jun 96 18:00 MET Well, I've already sent this to the help-octave list, if I'm not wrong, but since a new list was born and someone is apparently going to archive this, here it is again. Send me the results you get on your machine and I'll add them to the list I maintain on . -------------------- benchmark.m ------------------ bm_version = ["bm ", "1.7"]; # Benchmark for octave. # Francesco Potorti` # 1996/06/06 15:58:08 # # Send the results you get on your machine to the address above, # so that I can include them in the result list. # latest benchmark.m version in # latest result list in printf ("Octave benchmark version %s\n", bm_version); # To add reference times for your machine run the benchmark and # add the values contained in the bm_mytime vector. # if (strcmp(version(), "1.1.1")) # Matthias Roessler bm_refname = "Sun Sparc 10/40"; bm_reftime = [1.61 4.54 3.88 2.12 2.47]; elseif (strcmp(version(), "ss-960323")) # Rick Niles bm_refname = "Sun Sparc 10/50"; bm_reftime = [2.00 8.95 2.60 3.03 1.11]; else error ("No reference time for this version of octave.\n") endif # Use clock() if cputime() does not work on this particular port of octave. # In this case, time will be computed on a wall clock, and will make sense # only on a machine where no other processes are consuming significant cpu # time while the benchmark is running. global bm_uses_cputime = (cputime() != 0); if (!bm_uses_cputime) disp ... ("WARNING: if other processes are running the figures will be inaccurate"); endif function t = bm_start () global bm_uses_cputime if (bm_uses_cputime) t = cputime(); else t = clock(); endif endfunction function et = bm_stop (t); global bm_uses_cputime if (bm_uses_cputime) et = cputime()-t; else et = etime(clock(),t); endif endfunction # Used for the lsode test. clear xdot function xdot = xdot (x, t) r = 0.25; k = 1.4; a = 1.5; b = 0.16; c = 0.9; d = 0.8; xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1)); xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2); endfunction # # Do benchmark # function [name, time] = bm_test(f,rep) # Actual test functions global s0 t; start = bm_start(); for i=1:rep if (f == 1) name="Matrix inversion (LAPACK)"; bm_x=inv(hadamard(8)); elseif(f==2) name="Schur decomposition (LAPACK)"; bm_x=schur(hadamard(7)); elseif(f==3) name="Differential equation (LSODE)"; bm_x=lsode("xdot",[1;2],(t=linspace(0,50,200)')); elseif(f==4) name="Fourier transforms (FFTPACK)"; bm_x=ifft2(fft2(hadamard(8))); elseif(f==5) name="for loop"; for i=1:6000;bm_x=i^2;endfor endif endfor time = bm_stop(start)/rep; endfunction bm_targetaccuracy = 0.025; bm_minrepetitions = 7; bm_maxseconds = 60; bm_minruntime = 0.3; bm_runtime = 3; bm_mytime = bm_reftime; printf ("Speed of octave %s on %s relative to %s\n", ... version(), computer(), bm_refname); fflush(stdout); for f = 1:length(bm_reftime) res = []; bm_test(f,1); # increase the RSS, load things rep = 1; # number of repetitions per run while (1) # we would need a do..while really [name,time] = bm_test(f,rep); # evaluate name and time if (time > bm_minruntime) # run for at least bm_minruntime break; # found correct number of repetitions endif rep = round(rep/bm_minruntime); # increase run time endwhile printf("%-33s", name); # print name rep = rep * round(bm_runtime/time); # no. of repetitions per run rep = max(1,rep); # slow machines need this for runs = 1:bm_maxseconds/bm_runtime # do runs [name,time] = bm_test(f,rep); # run res(runs) = bm_reftime(f)/time; # store relative performance if (runs < bm_minrepetitions) # jump rest of for loop continue endif res = sort(res); bm_mean = mean(res(2:runs-1)); # remove min and max results if (std(res)/bm_mean < bm_targetaccuracy) break endif endfor # end of repetitions loop bm_mytime(f) = bm_reftime(f)/bm_mean; # print 95% confidence interval printf("%5.2f +/- %.1f%% (%d runs)\n", ... bm_mean, 200*std(res)/bm_mean, runs*rep); fflush(stdout); endfor clear bm_x # Display the geometric mean of the results printf("-- Performance index (%s): %.2g\n\n", bm_version, ... prod(bm_reftime./bm_mytime)^(1/length(bm_reftime)))