具有轻微延迟的 MATLAB 并行循环
MATLAB parallel loop with slight delays
我在 matlab 中有一个并行循环,如下所示。有没有办法确保循环不是同时 运行ning 而是有轻微的延迟?我也愿意使用 batch 或 spmd,但对它们的了解有限,如果有任何帮助,我将不胜感激。
我正在调用另一个程序,myprogexe.exe,但是这个程序需要访问 pc 上的特定端口并且多个请求无法进入。因此我需要确保请求有非常轻微的延迟。 myprogexe.exe 本身就是一个计算量很大的代码(每次输入 运行 大约需要 10 分钟)
parfor i=1:length(MinorRoots)
runmodels = MinorRoots{i};
cmd = ['$myprogexe -v 2014.2 ', runmodels];
[status, result] = system(cmd);
end
您可以使用 spmd
来执行此操作,但请注意,以下方法并不完全理想,因为它会添加额外的同步点。
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
我在 matlab 中有一个并行循环,如下所示。有没有办法确保循环不是同时 运行ning 而是有轻微的延迟?我也愿意使用 batch 或 spmd,但对它们的了解有限,如果有任何帮助,我将不胜感激。 我正在调用另一个程序,myprogexe.exe,但是这个程序需要访问 pc 上的特定端口并且多个请求无法进入。因此我需要确保请求有非常轻微的延迟。 myprogexe.exe 本身就是一个计算量很大的代码(每次输入 运行 大约需要 10 分钟)
parfor i=1:length(MinorRoots)
runmodels = MinorRoots{i};
cmd = ['$myprogexe -v 2014.2 ', runmodels];
[status, result] = system(cmd);
end
您可以使用 spmd
来执行此操作,但请注意,以下方法并不完全理想,因为它会添加额外的同步点。
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