Problem with parfor loop due to some variable that cannot be classified.

3 vues (au cours des 30 derniers jours)
I am unable to specify a parfor loop that works due to some variable that matlab cannot classify
I tried to implement the following function
function somefunction(N,NWorkers)
counts=zeros(1,actualNworkers);
P=myprogress(N,actualNworkers);
parfor (isim=1:N,NWorkers)
local_labindex=1;
if NWorkers
local_labindex=labindex;
end
counts(local_labindex)=counts(local_labindex)+1;
send(P,[local_labindex,counts(local_labindex)])
end
end
But Matlab complains that "The PARFOR loop cannot run due to the way counts is used"
When this failed, I tried to use a cell array instead of a vector. But that didn't work either. Finally I tried to implement a nested function as shown below but it still does not work
function somefunction(N,NWorkers)
counts=zeros(1,actualNworkers);
P=myprogress(N,actualNworkers);
parfor (isim=1:N,NWorkers)
local_labindex=1;
if NWorkers
local_labindex=labindex;
end
o=increment(local_labindex);
send(P,[local_labindex,o])
end
function o=increment(index)
counts(index)=counts(index)+1;
o=counts(index);
end
end
But this time the error message is : "The nested INCREMENT cannot be called from within a PARFOR loop"
Is there any workaround this problem?
  7 commentaires
Patrick Mboma
Patrick Mboma le 5 Avr 2023
I have looked at that list but I could not find a solution to my problem that's why I posted it. I need to keep track of the number of iterations performed by each worker
Patrick Mboma
Patrick Mboma le 5 Avr 2023
Modifié(e) : Patrick Mboma le 5 Avr 2023
As to what I am trying to do with the counts variable, I would like to take the sum to evaluate how far along the process has come.

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 5 Avr 2023
Modifié(e) : Matt J le 5 Avr 2023
It might be easier just to use for-drange loop.
spmd
counts=0;
for i=drange(1:N)
counts=counts+1;
end
end
counts{:}
  4 commentaires
Patrick Mboma
Patrick Mboma le 6 Avr 2023
I guess this could work. One last question, if I may : Would this code work even if there are no workers?
Matt J
Matt J le 6 Avr 2023
Modifié(e) : Matt J le 6 Avr 2023
You could try and see. Even if it does work, it might be advisable to check first to see if a pool is open before doing anything. If no pool is open, the task becomes trivial.

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by