Assignin in parfor loop
8 次查看(过去 30 天)
显示 更早的评论
Hello everybody,
i have a problem with assignin in a parfor loop. For that I made a short example which explains the problem:
for i = 1:10
beta = i;
disp(beta);
end
parfor pi = 1:10
assignin('base','beta',pi);
disp(beta)
end
In the first loop beta gets values from 1 to 10, but in the parfor-loop beta always has value of 10. Why does this happen? I wanted to assignin for a variable as a input for simulink simulations.
Many thanks in advance,
Greetings
Sascha
2 个评论
回答(2 个)
Walter Roberson
2013-8-18
Doing an assignin('base') is going to change the value in the base workspace, but code executed in parallel is executed in a non-base workspace (because a new process if formed.)
I am surprised assignin() is allowed in a parfor. If the value being assigned varies from loop to loop, the result would be entirely dependent on the order the loops ended up being executed, which is not determinate in parfor()
0 个评论
Edric Ellis
2013-8-19
When you run your code at the command-line, all of the FOR loop body is run in the base workspace - whereas the PARFOR body is not. So, your ASSIGNIN statement is operating correctly, but the second line of your PARFOR loop body is not running in the base workspace - so it actually sees the value of beta set by the prior FOR loop. If you change your PARFOR loop to:
parfor pi = 1:10
assignin('base','beta',pi);
disp(evalin('base', 'beta'));
end
You should get the expected behaviour. Simulink models should also correctly see the value that you assign.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!