Запустите исполняемый файл модели параллельно с отчетом о состоянии - PullRequest
0 голосов
/ 24 марта 2020

У меня есть модель Simulink, из которой я скомпилировал исполняемый файл. Затем я использую командный файл (* .bat) с 20 миллионами строк 'start / B model_name.exe' с входным файлом, указанным для каждого моделирования, как показано ниже:

start /B name_mdl.exe -u input_1.txt -o output_1.mat >>report_1.txt
start /B name_mdl.exe -u input_2.txt -o output_2.mat >>report_2.txt
start /B name_mdl.exe -u input_3.txt -o output_3.mat >>report_3.txt

и продолжается. «-u» и «-o» могут указывать c опции для специализированного инструмента, с помощью которого был создан исполняемый файл. Я не знаю, универсальные ли это варианты. input_N.txt имеет синтаксис: имя переменной = ее значение. report_N.txt содержит только кучу информации, такой как время выполнения моделирования, даты, время и т. д. c.

Есть ли способ отображения пакетного файла (в командном окне Matlab), какие дела выполняются или сколько выполнено? Возможно, это будет выглядеть ниже:

start /B name_mdl.exe -u input_1.txt -o output_1.mat >>report_1.txt
printf('%d case completed',num_case);
start /B name_mdl.exe -u input_2.txt -o output_2.mat >>report_2.txt
printf('%d case completed',num_case);

Это может быть просто основной пакетный файл, который запускает указанный выше пакетный файл, но также содержит строки кода, позволяющие операционной системе периодически считать * .mat файлы в текущем каталоге и выложите счет в командном окне.

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете использовать for /l l oop. Предложение in определяет (<start>,<increment>,<end>)

for /l %%i in (1,1,20000000) do (
  start /B name_mdl.exe -u input_%%i.txt -o output_%%i.mat >>report_%%i.txt
  echo started nr %%i 
)

(я могу представить, что ваш P C выходит за пределы этого. Вам следует подумать, чтобы ограничило число параллельных процессов )

Чтобы получить количество файлов *.mat, вы можете сосчитать их с помощью:

for /f %%c in ('dir /b /a-d *.mat ^|find /c /v ""') do set count=%%c
echo There are %count% .mat files.
...