X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fbenchmark-1.1.1%2Fbenchmark_index.m;fp=octave_packages%2Fbenchmark-1.1.1%2Fbenchmark_index.m;h=abeab9e9455394895daadfe31954dd50246abf84;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/benchmark-1.1.1/benchmark_index.m b/octave_packages/benchmark-1.1.1/benchmark_index.m new file mode 100644 index 0000000..abeab9e --- /dev/null +++ b/octave_packages/benchmark-1.1.1/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 +% . +% + +% 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') +