Find reason for error msg of Matlab parallel calculation: Variable 't0' has been deleted from base workspace.
6 views (last 30 days)
Show older comments
Hi, all. Just starting doing parallel calculation with Matlab. Below are part of the code,
global t0 t1
......
......
t0 = 0;
t1 = 1;
CoreNum = 2;
parpool('local',CoreNum)
parfor counter = 1:2
uinput = upars_option(counter,:);
vinput = vpars_option(counter,:);
ruinput = ru_option(counter,:);
rvinput = rv_option(counter,:)
[uopt_rec,vopt_rec] = run_idp(uinput,vinput,ruinput,rvinput);
uopt_rec_mat(counter,:)= uopt_rec;
vopt_rec_mat(counter,:)= vopt_rec;
end
delete(gcp('nocreate'))% Close the calculation pool
Here upars_option, vpars_option, ru_option, and rv_option are all matrices recording initial guess values for the parameters. They are used row by row in function run_idp in each loop/calculation pool. Run_idp is a function which invokes several other functions to perform an algorithm. Results are recorded in matrices [uopt_rec, vopt_rec]. I run the run_idp with regular ‘for’ loop where parallel calculation is not involved. It turns out all right so function run_idp should be OK.
But run parallel calculation code pop out with an error msg,
Error using gridpt (line 10)
Error evaluating expression 't0' for 'StartTime' specified in the Configuration
Parameters dialog for block diagram 'input_check'.
Error in run_idp (line 65)
g_rec0 = gridpt(allu,allv);
Caused by:
Error using gridpt (line 10)
Unrecognized function or variable 't0'.
Error using gridpt (line 10)
Variable 't0' has been deleted from base workspace.
'gridpt' is a function which is invoked inside function 'run_idp'. ‘t0’ is defined as a global variable in all scripts involved, which is a variable that invoked by Simulink model input_check.slx. This ‘t0’ is assigned with a value before running parallel calculation(t0 = 0 in base workspace before even creating a calculation pool) and also defined and given a value in function gridpt. Part of the code of function ‘gridpt.m’ is shown as,
function out = gridpt(in1,in2)
global t0 t1 upars vpars tspan
g_rec0 = cell(3,5);
t0 = 0;
t1 = 1;
for i = 1:3
upars = in1(i,:);
vpars = in2(i,:);
out = sim('input_check'); % Line 10
……
……
end
Could you check what makes the error?
2 Comments
Raymond Norris
on 7 Jul 2020
Hi,
Global variables are not permitted within parfor loops. Imagine parfor calls a function that modified the global variable. Which of the X workers wins? Instead, if feasible, consider passing values, in and out of the function.
I don't use Simulink, but have you seen parsim? Perhaps there's a lot more in your code then just gridpt, but might be worth looking into.
Raymond
Answers (0)
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!