Is there a way for breaking a loop iteration, if it takes to long?
    7 views (last 30 days)
  
       Show older comments
    
Dear People, I am running analyzes of multiple input data files. Each file is analyzed in one iteration of a for loop, e.g.
for 1:length(data)
    analyze(data{i});
end
However, for some data, the analysis takes very long, because the RAM is full. Is there a way of breaking the loop on a timer or RAM condition, say after 1 hour of iteration time, or as RAM gets full? Or do you have any other recommendation, except for throughing the data away in advance, or tuning the analysis?
Kind regards, Philipp
0 Comments
Answers (2)
  Jan Orwat
      
 on 7 Jun 2016
        One of the simplest ways for time control is to use tic and toc
time0 = tic;
timeLimit = 60*60*1; % 1 hour == 3600 seconds
  for ...
    ...
    if toc(time0)>timeLimit
      break
    end
  end
or using while loop
time0 = tic;
timeLimit = 60*60*1; % 1 hour == 3600 seconds
  while conds && toc(time0)<timeLimit
    ...
  end
in case of placing multiple breakpoints it is vital to identify them e.g. by printing breakpoint info. It is crucial to design breakpoints in a way allowing to resume computations from the point it was disrupted. Sometimes instead of command break it is better to put a message and a debbuger breakpoint which will give you command line access while program is paused. Then you can continue from this exact point in code.
6 Comments
  Walter Roberson
      
      
 on 17 Jun 2021
				Use the Parallel Computing Toolbox. 
Use parfeval() to start the computation of an interation. This will return a "future", which is a reference to a process. Use wait() to wait for the "future" with a timeout. If the timeout is encounted, then cancel() the "future"
This is pretty much the only method that MATLAB provides to kill a computation without the cooperation of the computation.
  Jos (10584)
      
      
 on 7 Jun 2016
        
      Edited: Jos (10584)
      
      
 on 7 Jun 2016
  
      You can create a timer ;
th = timer('TimerFcn','keyboard') ;
th.StartDelay = 5 ;
start(th) ;
pause ; % will be stopped after 5 seconds.
stop(th) ;
2 Comments
  Walter Roberson
      
      
 on 16 Jun 2021
				You can have the timer routine set a shared variable that is being tested by the loop to know to move on.
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



