Consecutive call of parsim constantly increases memory usage (Ubuntu)
Hi,
I am trying to perform a parameter sweep on my simulink model using parsim. However, after parsim has been called for several times (after ~24h) Matlab gets killed (I am using Ubuntu 20.04). The ubuntu terminal output from where I started Matlab just shows “Killed”.
Taking a closer look I noticed that memory usage constantly increases. I stopped the program and shut down the parallel pool (delete(gcp(‘nocreate’))) which released some memory. I cleared the workspace and nothing is running anymore, however Matlab still takes 40% of the memory and until now I could not find out where this comes from.
I tried to abstract the important commands to clarify the structure of my program and my usage of the commands (the original script has much more parameters etc). In short, in nested for-loops combining my parameter values I create an array of Simulink.SimulationInput objects containing batch_size objects, run the simulations using parsim, create another array, run parsim again and so on:
start_vals = [0.1, 0.08, 0.06, 0.04, 0.03, 0.02];
stop_vals = [0.04, 0.03, 0.02, 0.01, 0.0, -0.05];
batch_size = 50;
model = 'modelName';cnt_exp = 0;
cnt_file = 0;
cnt_batch = 0;for start_val = start_vals
for stop_val = stop_vals
cnt_exp = cnt_exp +1;
MP = setParam(MP,start_val, stop_val)
simulation_length = 12;
cnt_batch = cnt_batch +1;
sim_input(cnt_batch) = Simulink.SimulationInput(model);
sim_input(cnt_batch) = sim_input(cnt_batch).setVariable('simulation_length',simulation_length);
sim_input(cnt_batch) = sim_input(cnt_batch).setVariable('MP',MP);
if cnt_batch < batch_size
total_runs = cnt_file * batch_size + cnt_exp;
if total_runs ~= sum_exp % last incomplete batch has to be processed
continue;
end
end
total_runs = cnt_file * batch_size + cnt_exp;
try
simOut = parsim(sim_input);
for res = 1:length(simOut)
% Process result
end
% Save results
cnt_file = cnt_file +1;
% Reset counters and arrays
cnt_exp = 0;
cnt_batch = 0;
clear sim_input;
catch error
warning ("Something went wrong")
end
end
end
I’d greatly appreciate any help or hint on what is going wrong here!
NOTE:-
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
Expert Answer
John Williams answered . 2021–10–20 09:53:17
I managed to solve the issue by adapting the usage of sim_input and simOut. As clear apparently does not free the memory in Unix systems and delete somehow didn’t work with these arrays, I avoided using clear and I initialized sim_input outside of the for-loop. Furthermore, I put all calculations concerning simOut into a function, hoping that this additional scope would clear the memory. I didn’t check the effect of both measures separately, but I think mainly sim_input was causing the problem.
So this is approximately how the code without memory leak looks like now:
start_vals = [0.1, 0.08, 0.06, 0.04, 0.03, 0.02];
stop_vals = [0.04, 0.03, 0.02, 0.01, 0.0, -0.05];
batch_size = 50;
model = 'modelName';cnt_exp = 0;
cnt_file = 0;
cnt_batch = 0;for i=1:batch_size
sim_input(i) = Simulink.SimulationInput(model);
end
SEE COMPLETE ANSWER CLICK THE LINK