Ηow to properly measure the execution time of a piece of code

1 visualización (últimos 30 días)
John Blue
John Blue el 11 de En. de 2019
Comentada: John Blue el 12 de En. de 2019
I've created a function to calculate it eigenvector centrality with its use power method. I used the variable num_of_terms that determines the count of the calculations.
adj = [ 0 1 0 0 0 0 0 0 0 0 ;
1 0 1 1 0 1 0 0 0 0 ;
0 1 0 1 0 0 0 0 0 0 ;
0 1 1 0 0 0 1 0 0 0 ;
0 0 0 0 0 1 0 0 0 0 ;
0 1 0 0 1 0 1 1 0 1 ;
0 0 0 1 0 1 0 0 1 0 ;
0 0 0 0 0 1 0 0 0 0 ;
0 0 0 0 0 0 1 0 0 1 ;
0 0 0 0 0 1 0 0 1 0 ;
];
x0 = ones(1,10);
time_Exe2 = zeros(1,10);
for i = 1 : 10
[~,time_Exe2(i)] = cul_eigvector_sentrality_Power_Method(adj,x0,i);
end
function [eigvector_centrality , time_exe] = cul_eigvector_sentrality_Power_Method(adj,x0,num_of_terms)
clear tic time_exe Xn
%time = hat();
tic;
Xn = x0 * adj;
for i = 1 : num_of_terms -1
Xn = Xn * adj;
end
Xn = Xn/norm(Xn);
time_exe = toc;
%time_exe = hat() - time ;
eigvector_centrality = Xn;
end
The results for the execution time are as follows:
# Time_execuson
0.000228
0.000113
0.000199
0.000373
0.000767
0.000032
0.000070
0.000041
0.000037
Logically as the variable num_of_terms increases, the calculations also increase.
Why the execution time is not decreasing but decreasing?
Someone knows how to solve this problem?
Thank you.

Respuestas (2)

Philip Borghesani
Philip Borghesani el 11 de En. de 2019
Editada: Philip Borghesani el 11 de En. de 2019
Matlab's JIT compiler performs different optimizations for code that runs multiple times and it may take many runs of a block of code before it is fully optimized. So even though later loops are doing more work they are better optimized . If you use a larger num_of_terms or repeate the experiment multiple times you should see your expected performance pattern.
Why is this a problem?
  1 comentario
John Blue
John Blue el 12 de En. de 2019
It was a problem if i used small matrix (adj) . Βecause with few repetitions (num_of_terms) I had the eigenvector with very good accuracy like the eigs().You are right what I need to increase num_of_terms the adj matrix and I have the pattern that I want.
Thank you.

Iniciar sesión para comentar.


Adam
Adam el 11 de En. de 2019
doc timeit
is the best way to get simple timings from a piece of cide. It deals with running multiple times and averaging as well as eliminating the first time call overhead and other things like that.
When code is so fast though you should not expect the results to be very predictable in terms of how fast it is with respect to the inputs. It's just too fast to be that accurate.

Categorías

Más información sobre Just for fun en Help Center y File Exchange.

Productos


Versión

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by