MATLAB parallel loop with slight delays

10 views (last 30 days)
Re Kh
Re Kh on 8 Dec 2016
Answered: Edric Ellis on 9 Dec 2016
I have a parallel loop in matlab shown below. Is there a way to make sure the loops are not running simultaneously but with a slight delay? I am open to use batch or spmd also but have limited knowledge of them and will appreciate any help. I am calling another program, myprogexe.exe, but this program needs to access a specific port on a pc and multiple requests cant go in. hence i need to make sure there is a very slight delay in requests. myprogexe.exe is a very computational heavy code itself (takes about 10 mins for each input to run)
parfor i=1:length(MinorRoots)
runmodels = MinorRoots{i};
cmd = ['$myprogexe -v 2014.2 ', runmodels];
[status, result] = system(cmd);
end

Answers (1)

Edric Ellis
Edric Ellis on 9 Dec 2016
You could use spmd to do this, but note that the following approach isn't completely ideal because it adds additional synchronisation points.
spmd
origLimit = length(MinorRoots);
loopLimit = numlabs * ceil(origLimit/numlabs);
for i = labindex:numlabs:loopLimit
labBarrier; % synchronise all workers
if i <= origLimit
pause(labindex-1); % timing offset
... run your code ...
end
end
end

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!