How to pass structure data into parfor loop
Afficher commentaires plus anciens
Hi all,
I have a simple parfor test code like this:
inpt.a1 = rand(100);
inpt.a2 = rand(100);
parfor i = 1:10000
inpt_pass = inpt;
otpt = sin(inpt_pass.a1);
end
I wrote inpt_pass in order to pass the structure inpt into the parfor loop. However, if inpt is a very large structure, passing it into every parfor loop would be cumbersome, and cost loads of storage.
If I do:
inpt.a1 = rand(100);
inpt.a2 = rand(100);
parfor i = 1:10000
inpt_pass = inpt.a1;
otpt = sin(inpt_pass.a1);
end
which only pass part of the structure into parfor loop (ideal), I got the broadcast variable warning.
So how can I do it? Many thanks!
1 commentaire
I am in a similar situation but I would like to pass to each worker a different part of the struct -- i.e. the content of a given field and only that content (not the whole struct). Following the example above, I'd like to write something like:
inpt.a1 = rand(100);
inpt.a2 = rand(100);
% ...
inpt.aN = rand(100);
parfor i = 1:N
fieldname = sprintf('a%i',i);
inpt_pass = inpt.(fieldname);
otpt = sin(inpt_pass);
end
Is it true that the entire struct is not passed into the parfor loop in that case, thus saving memory? If the answer is negative, what alternatives do I have?
Réponse acceptée
Plus de réponses (1)
Sean de Wolski
le 23 Nov 2016
Modifié(e) : Sean de Wolski
le 23 Nov 2016
0 votes
Use a cell array instead of a structure - they can be easily sliced by index. Or, less preferably, in newer releases turn the structure into a parallel.pool.Constant so that it persists on the workers.
Catégories
En savoir plus sur Parallel for-Loops (parfor) dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!