Diff of /inst/benchmark_index.m [000000] .. [0f9e18] Maximize Restore

  Switch to side-by-side view

--- a
+++ b/inst/benchmark_index.m
@@ -0,0 +1,174 @@
+% Copyright (C) 2009  VZLU Prague
+% 
+% This file is part of OctaveForge.
+% 
+% OctaveForge is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+% 
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+% 
+% You should have received a copy of the GNU General Public License
+% along with this software; see the file COPYING.  If not, see
+% <http://www.gnu.org/licenses/>.
+% 
+
+% function benchmark_index (n, rep)
+% description:
+% Test speed of array indexing.
+%
+% arguments:
+% n = array size
+% rep = number of repeats
+%
+% results:
+% time_slice1 = time for a(i:j)
+% time_slice1s = time for a(i:k:j)
+% time_slice1v = time for a(idx)
+% time_slice2c = time for a(:,i:j)
+% time_slice2r = time for a(i:j,:)
+% time_slice2cv = time for a(:,idx)
+% time_slice2rv = time for a(idx,:)
+% time_slicenc = time for a(:,:,i:j,k)
+% time_slicend = time for a(:,:,k,i:j)
+% time_slicens = time for a(i,j,k,:)
+% time_spreadr = time for a(ones(1, k), :), a row vector
+% time_spreadc = time for a(:, ones(1, k)), a column vector
+%
+
+function results = benchmark_index (n, rep)
+
+  benchutil_default_arg ('n', 4e6);
+  benchutil_default_arg ('rep', 100);
+
+  benchutil_initialize (mfilename)
+
+  a = rand (1, n);
+
+  i = 10; 
+  j = n - 10;
+
+  tic; 
+  for irep = 1:rep
+    b = a(i:j);
+  end
+  time_slice1 = toc;
+  benchutil_set_result ('time_slice1')
+
+  k = 2;
+
+  tic; 
+  for irep = 1:rep
+    b = a(i:k:j);
+  end
+  time_slice1s = toc;
+  benchutil_set_result ('time_slice1s')
+
+  idx = cumsum (rand (1, n));
+  idx = ceil (idx / idx(end) * n);
+
+  tic; 
+  for irep = 1:rep
+    b = a(idx);
+  end
+  time_slice1v = toc;
+  benchutil_set_result ('time_slice1v')
+
+  m = floor (sqrt(n));
+  a = rand (m);
+
+  i = 5; 
+  j = m - 5;
+
+  tic; 
+  for irep = 1:rep
+    b = a(:,i:j);
+  end
+  time_slice2c = toc;
+  benchutil_set_result ('time_slice2c')
+
+  tic; 
+  for irep = 1:rep
+    b = a(i:j,:);
+  end
+  time_slice2r = toc;
+  benchutil_set_result ('time_slice2r')
+
+  idx = cumsum (rand (1, m));
+  idx = ceil (idx / idx(end) * m);
+
+  tic; 
+  for irep = 1:rep
+    b = a(:,idx);
+  end
+  time_slice2cv = toc;
+  benchutil_set_result ('time_slice2cv')
+
+  tic; 
+  for irep = 1:rep
+    b = a(idx,:);
+  end
+  time_slice2rv = toc;
+  benchutil_set_result ('time_slice2rv')
+
+  m = floor (sqrt (n / 6));
+  a = rand (2, m, m, 3);
+
+  i = 5;
+  j = m - 5;
+  k = 2;
+
+  tic; 
+  for irep = 1:rep
+    b = a(:,:,i:j,k);
+  end
+  time_slicenc = toc;
+  benchutil_set_result ('time_slicenc')
+
+  m = floor (sqrt (n / 6));
+  a = rand (2, m, 3, m);
+
+  i = 5;
+  j = m - 5;
+  k = 2;
+
+  tic; 
+  for irep = 1:rep
+    b = a(:,:,k,i:j);
+  end
+  time_slicend = toc;
+  benchutil_set_result ('time_slicend')
+
+  m = floor (n / 12);
+  a = rand (2, 2, 3, m);
+
+  tic; 
+  for irep = 1:rep
+    b = a(2,1,3,:);
+  end
+  time_slicens = toc;
+  benchutil_set_result ('time_slicens')
+
+  m = floor (sqrt (n));
+  a = rand (1, m);
+
+  tic; 
+  for irep = 1:rep
+    b = a(ones(1, m), :);
+  end
+  time_spreadr = toc;
+  benchutil_set_result ('time_spreadr')
+
+  a = rand (m, 1);
+
+  tic; 
+  for irep = 1:rep
+    b = a(:, ones(1, m));
+  end
+  time_spreadc = toc;
+  benchutil_set_result ('time_spreadc')
+