GetGlobal() and parfor loop
Show older comments
Hello everyone,
I am using the setGlobal() and getGlobal() functions in a code that worked pretty well initially but doesn't work now that I'm trying to parrallelize it.
I noticed that the functions setGlobal() and getGlobal() struggle to work with the parfor loop. or example, when I run
setGlobalF([2 3 4])
% j = getGlobalF();
parfor i = 1:4
j = getGlobalF()
end
the j value is not assigned to [2 3 4].
Have you guys any ideas of why and how should I proceed ? Thanks !
1 Comment
Quentin Reynard-Feytis
on 13 Jul 2022
Answers (1)
Walter Roberson
on 13 Jul 2022
1 vote
Global and persistent variables are never copied to workers.
You need to do one of two things:
- run the setGlobalF command on each worker, such as using parfevalOnAll
- use parallel.pool.Constant to push a constant value into the workers, that you can then access.
Note that any setGlobalF that you do on a worker will not affect the other workers. If you need to be able to affect the other workers, then you should either use spmd with labSend and labReceive or else use parallel.pool.DataQueue or parallel.pool.PollableDataQueue to send data from the workers to the client and then the client would send the updated values to the other workers.
1 Comment
Quentin Reynard-Feytis
on 13 Jul 2022
Categories
Find more on Parallel for-Loops (parfor) 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!