why does parfor execute loops in a random order?
2 次查看(过去 30 天)
显示 更早的评论
I can't see any reason why, and if my PC crashes during a 20,000 loop iteration, it's a pain to figure out which iterations are still to be done.
Cheers Mike
0 个评论
采纳的回答
Jason Ross
2013-2-28
Just to be clear -- parfor loops are of independent of iteration order, and do not guarantee deterministic results. It's not random.
The functional reason for this is if iteration 2 finishes before iteration 1 then iteration 3 can start work, and so on, since each iteration is independent of the other.
4 个评论
Jason Ross
2013-3-1
You might also want to investigate using the job/task interface, which gives you more control over the iterations and tracking down errors. A simple example:
c=parcluster();
alloutputs = [];
for ii=1:10
job = c.createJob;
for jj=1:10
createTask(job,@rand, 1, {3,3});
end
job.submit;
job.wait;
outputs = job.fetchOutputs;
alloutputs = [alloutputs ; outputs];
disp(ii);
job.destroy;
end
Note that things like preallocation, fancy formatting and error checking have been left out. Things that will likely be interesting to you:
- The job object contains the Task ID of errors. You could use this information to know what failed.
- You will likely need to figure out what work for you in terms of iteration display, number of tasks per job, dealing with the returns, etc.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!