Very slow function, excessive overhead?
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jesse
el 27 de Mzo. de 2023
Comentada: Walter Roberson
el 28 de Mzo. de 2023
I've got a function that looks at a n x 2 array (1st column time vector, 2nd column flag vector) and it's running incredibly slow. As you can see, line 17 takes almost all of the runtime. I've read that this could be related to overhead, but I don't actually know what that means or how to improve it. Any ideas on what could be causing this?

0 comentarios
Respuesta aceptada
Walter Roberson
el 27 de Mzo. de 2023
You are not assigning to flag within your loop, so you should use
flagrows = size(flag,1);
while i < flagrows
end
The end for a loop does get "charged" the cost of the loop overhead, which in this case is doing more computations than required.
2 comentarios
Walter Roberson
el 28 de Mzo. de 2023
you used length(flag(:, 1)) which starts by extracting the first column and then taking the length of the column. That sequence involves copying data and then checking the size. That is a lot more work then just checking the size of the original data.
Más respuestas (1)
Torsten
el 27 de Mzo. de 2023
Editada: Torsten
el 27 de Mzo. de 2023
The inner while loop is not necessary: if flag(i,2)-flag(i-1,2) == 1, then of course flag(i,2)-flag(i-1,2) ~== -1. Thus the incrementation i = i+1 will always happen. This is strange since you increment i again after you quit the if-clause.
Preallocating "events" as zeros(size(flag,1),3) and finally cutting it by events = events(1:j-1,:) might speed up the function also.
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!