Execution times and the "pause" function

I have a question about a strange phenomenon I have been noticing for some time whilst working with Matlab and which has now become somewhat acute.
When I run scripts which are relatively demanding on my computer, pausing and immediately unpausing the execution weirdly appears to speed up the execution of the rest of the script.
The current example is this:
I am running a simulation model, which is essentially just one big loop representing simulation periods . Within this loop there is another loop which is entered only under a certain condition. If this second loop is entered in some simulation period t, the simualtion of this particular period naturally takes longer than that of the other ones as more operations are executed.
Essentially the programm looks like this:
for t=1:T
do stuff
if condition holds
for tt=1:TT
do more stuff
end
end
end
The problem I have is the following: After the second, inner loop is entered, all following simulation periods take longer to execute, even when the condition does not hold. I have gone into debug mode and can 100% confirm that the second loop is not entered in other simulation periods. Nevertheless those periods take longer to execute after the second loop has been entered once in a previous period.
Additionally, if i pause the execution of the script manually after the second loop has been entered and exited again and then continue, the script speeds back up and the rest of the periods are simulated at the usual speed. More generally, I often find that if a script runs slowly I can speed it up significantly by pausing and unpausing.
Does anyone know what might be causing this?
PS: After some additonal experimentation it seems that this phenomenon only occurs if I click the pause button in the GUI, i.e. if I enter debug mode and then pess continue. Simply inserting pause(n) under some condition into the script does not cause this change in execution speeds.

댓글 수: 5

Rik
Rik 2020년 6월 15일
Does this behavior also occur if you run your code a second time? (this is a pure guess that it may relate to JIT optimization somehow)
Severin Reissl
Severin Reissl 2020년 6월 15일
Yes, this occurs every time I run the code.
Cole
Cole 2025년 1월 28일
I have seen identical behavior in my code. 2024b is particularly bad with this phenomena in our simulation yielding 2-3x performance boost just from clicking pause in the gui and then play again. 2022a doesn't seem to exhibit this problem, at least not on the scale that 2024b does.
I too believe this is a JIT issue. For us I think it has to do with the eval function as we use it heavily for some of our calculations and pausing and unpausing likely allows the JIT to handle those eval statements that are created during run time rather than at the beginning. However, I'm totally lost on why 2024b would be worse than 2022a. And 2024b only outperforms 2022a in our code by 1-2% after the pause button is clicked. So 2024b without clicking pause and unpause is 2-3x worse than 2022a for identical code.
Mike Croucher
Mike Croucher 2025년 1월 30일
This sounds very strange...and must be frustrating for you! Would it be possible for you to be able to send me a script that exhibits this behaviour for you so I can reproduce it and get it reported to development please?
Mike Croucher
Mike Croucher 2025년 1월 30일
Also, does this happen with the normal desktop in R2024b or the new Desktop beta?

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품

릴리스

R2019b

질문:

2020년 6월 15일

댓글:

2025년 1월 30일

Community Treasure Hunt

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

Start Hunting!

Translated by