Параллельный цикл MATLAB с небольшими задержками

У меня есть параллельный цикл в Matlab, показанный ниже. Есть ли способ убедиться, что циклы запускаются не одновременно, а с небольшой задержкой? Я также открыт для использования batch или spmd, но знаю о них ограниченно и буду благодарен за любую помощь. Я вызываю другую программу, myprogexe.exe, но эта программа должна получить доступ к определенному порту на компьютере, и несколько запросов не могут поступить. Следовательно, мне нужно убедиться, что есть очень небольшая задержка в запросах. myprogexe.exe сам по себе очень тяжелый код (запуск каждого ввода занимает около 10 минут)

parfor i=1:length(MinorRoots)
runmodels = MinorRoots{i};
cmd = ['$myprogexe -v 2014.2  ', runmodels];

[status, result] = system(cmd);
end 

person c.Parsi    schedule 08.12.2016    source источник
comment
Почему вы хотите использовать цикл parfor, если вы не можете запустить несколько экземпляров myprogexe без проблем?   -  person Suever    schedule 09.12.2016
comment
Проблема заключается в запуске запусков myprogexe, они не могут быть запущены одновременно, но с разницей в доли секунды в запуске запуска они могут. Каждый полный запуск myprogexe занимает 10 минут или больше, поэтому, если я могу запускать запуски с задержкой в ​​1 секунду, к концу 11-й минуты весь процесс будет завершен.   -  person c.Parsi    schedule 09.12.2016


Ответы (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
person Edric    schedule 09.12.2016