Usage of sturctures inside parfor!!

조회 수: 55 (최근 30일)
Abhishek M
Abhishek M 2014년 4월 21일
댓글: Abhishek M 2014년 5월 5일
Hi,
I have a code which I am using to simulate a model 'n' number of times using parallel computation toolbox. Some of the inputs to the model are in the form of "structures(a.b)" and " multiple structures(a.b(c))". I am loading the input through workspace. The code simulates without any errors in normal for loop. But when I change the for to parfor loop the code analyser shows an error that " Valid indices are restricted for this input inside the parfor loop" for structures and "Field reference for multiple structure elements that is followed by more reference blocks is an error." for multiple structures. I can change the name of structure and represent it as a variable but the problem is the same variable is used at different places when I integrate all my models. Hence I cant do that??
Is it possible to represent structures and multiple structures inside parfor loop??
For example:
structures = a.b;
multiple structures = a.b(c);
  댓글 수: 2
Edric Ellis
Edric Ellis 2014년 4월 22일
Please could you post a simple self-contained example of something you'd like to run but doesn't work in PARFOR?
Abhishek M
Abhishek M 2014년 4월 22일
Hi Edric,
Please find the below code.
model = 'a_demo_model'; %%%My model %%%
numCases=100;
parfor j=1:numCases
S=load('a_demo_WS');%%%Loading of input to workspace through %%%"demo_WS.mat"
ip=S.ip; %%%Normal input %%%
a.b=S.a.b; %%%Normal Structure input %%%
a.d(fg)=S.a.d(fg); %%%Multiple Structure input %%%
load_system(model)
assignin('base','ip',ip)
assignin('base','a.b',a.b)
assignin('base','c.d(fg)',c.d(fg))
simout(j)= sim(model,'SimulationMode','normal');
end
I am running 'a_demo_model' using this code. But I have 2 more models to be integrated. All the 3 models which i have not yet integrated uses the same input 'b(normal structure)' and 'd(fg)(multiple structure)'. But parfor is throwing these( " Valid indices are restricted for this input inside the parfor loop" for structures and "Field reference for multiple structure elements that is followed by more reference blocks is an error." for multiple structures. ") errors if I define these inputs as the syntax specified in the above code.
I hope I am clear with this to you or else we can discuss more for further clarifications.

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

답변 (1개)

Edric Ellis
Edric Ellis 2014년 4월 22일
A simpler reproduction of the problem is shown below:
parfor idx = 1:2
a.x = 1;
a.y = 2;
end
The problem here is that technically the iterations of the loop cannot be proven to be order-independent (even though we can clearly see that they are). The reasons for this are a little obscure, and are to do with how structure dot-referencing works - basically, MATLAB treats "a.x" as a indexing request into the variable "a". So, in the loop above, you're indexing into "a" twice, but not "slicing" it - and in a FOR loop, the value of "a.y" would be available at the start of the next iteration of the loop, thus making it technically not order-independent.
In this case, the fix is simply to ensure that you assign a complete new value to "a" each time round the loop - then MATLAB will be able to see that "a" is a temporary variable that needs to live only for the duration of the iteration. Like so:
parfor idx = 1:2
a = [];
a.x = 1;
a.y = 2;
end
Also, note that the ASSIGNIN you posted is incorrect. You probably need
assignin('base', 'a', a)
  댓글 수: 4
Abhishek M
Abhishek M 2014년 4월 23일
편집: Abhishek M 2014년 4월 23일
Hi Edric,
"fg" is an array input. the representation of multiple sturucture "a.d(fg)" is like inside the main structure 'a' the structure 'd' of value 'fg'.
for example: fg=1.
then the value d(1) will be stored in structure 'a'.
Abhishek M
Abhishek M 2014년 5월 5일
Hi Edric, my mistake sorry for mentioning previously, my syntax of structures and multiple structures doesn't work in normal for loop also...

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

카테고리

Help CenterFile Exchange에서 Parallel for-Loops (parfor)에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by