2016-12-08 4 views
0

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

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

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

Почему вы хотите использовать цикл 'parfor', если вы не можете запускать несколько экземпляров' myprogexe' без проблем? – Suever

+0

Проблема заключается в инициировании прогонов myprogexe, она не может быть инициирована в одно и то же время, но с небольшой разницей в разнице в инициации прогона они могут. Каждый полный запуск myprogexe занимает 10 минут и более, поэтому, если я могу запустить запуск с задержкой в ​​1 секунду, к концу 11-й минуты у меня будет весь процесс. –

ответ

0

Вы можете использовать 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 
Смежные вопросы