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

3 次查看(过去 30 天)
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 个评论
Patrick Mboma
Patrick Mboma 2023-4-5
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 2023-4-5
编辑:Patrick Mboma 2023-4-5
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.

请先登录,再进行评论。

采纳的回答

Matt J
Matt J 2023-4-5
编辑:Matt J 2023-4-5
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 个评论
Patrick Mboma
Patrick Mboma 2023-4-6
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 2023-4-6
编辑:Matt J 2023-4-6
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Distributed Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by