Skip to content

Instantly share code, notes, and snippets.

@chappjc
Created March 16, 2015 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chappjc/a0f0634a5be68df0252c to your computer and use it in GitHub Desktop.
Save chappjc/a0f0634a5be68df0252c to your computer and use it in GitHub Desktop.
% benchmark code for RLD solutions posted at http://stackoverflow.com/q/1975772/2778484
% Results posted in CW: http://stackoverflow.com/a/29084077/2778484
%% bench
datasizes = [reshape(linspace(10,70,4).'*10.^(0:4),1,[]) 10^6 2*10^6]; %//'
fcns = {'repelem','rld_cumsum','rld_cumsum_diff'}; %// approaches to be benchmarked
tsec = zeros(numel(fcns),numel(datasizes));
for k1 = 1:numel(datasizes),
n = datasizes(k1); %// Create random inputs
fprintf('Data size: %d\n',n);
vals = randi(200,1,n);
runs = [5000 randi(200,1,n-1)]; %// 5000 acts as an aberration
for k2 = 1:numel(fcns), %// Time approaches
tsec(k2,k1) = timeit(@() feval(fcns{k2}, vals,runs), 1);
fprintf('\tFunction: %s (%3.2f sec)\n',fcns{k2},tsec(k2,k1));
end
end
%% plot
figure, %// Plot runtimes
loglog(datasizes,tsec(1,:),'-rx'), hold on
loglog(datasizes,tsec(2,:),'-bo')
loglog(datasizes,tsec(3,:),'-k+')
set(gca,'xgrid','on'),set(gca,'ygrid','on'),
xlabel('Datasize (# elements)'), ylabel('Runtime (s)')
legend(upper(strrep(fcns,'_',' '))),title('Runtime')
%% rate plot
elementsPerSec = bsxfun(@rdivide,datasizes,tsec);
figure;
semilogx(datasizes,elementsPerSec(1,:),'-rx'), hold on
semilogx(datasizes,elementsPerSec(2,:),'-bo')
semilogx(datasizes,elementsPerSec(3,:),'-k+')
set(gca,'xgrid','on'),set(gca,'ygrid','on'),
xlabel('Datasize (# elements)'), ylabel('Processing rate (elements/sec)')
legend(upper(strrep(fcns,'_',' '))),title('Rate')
%% plot speedup
figure, %// Plot speedups
semilogx(datasizes,tsec(1,:)./tsec(2,:),'-rx')
set(gca,'ygrid','on'), xlabel('Datasize ->')
legend('Speedup(x) with cumsum+diff over cumsum-only'),title('Speedup Plot')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment