【问题标题】:MATLAB parallel loop with slight delays带有轻微延迟的 MATLAB 并行循环
【发布时间】:2016-12-08 23:45:58
【问题描述】:

我在 matlab 中有一个并行循环,如下所示。有没有办法确保循环不是同时运行但有一点延迟?我也愿意使用批处理或 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 

【问题讨论】:

  • 如果您不能毫无问题地运行多个myprogexe 实例,为什么还要使用parfor 循环?
  • 问题是在启动myprogexe 运行时,它不能同时启动,但在启动运行时有几分之一秒的差异,它们可以。 myprogexe 的每次完整运行需要 10 分钟或更长时间,因此如果我可以在 1 秒延迟内启动运行,那么到第 11 分钟结束时,我将执行整个过程。

标签: matlab parallel-processing parfor


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多