Как исправить конфликтующую проблему с ускорением моделирования simulink при запуске теста в параллельном режиме?

Моя цель - оптимизировать время, необходимое для запуска набора тестовых примеров моделирования. У меня проблемы с запуском теста с функциями параллельной обработки и ускоренного моделирования. https://www.mathworks.com/help/simulink/ug/how-the-acceleration-modes-work.html

Контекст:

У меня есть 29 файлов Simulink, которые вызываются внутри параметризованного модульного теста Matlab. В файлах Simulink есть много эталонных моделей. Перед запуском 20-секундной симуляции для каждого simulink, simulinks должны загрузить все опорные модели и создать множество артефактов симуляции в рабочей папке. Между проектами simulink используется множество эталонных моделей. У проектов simulink есть эталонная модель 64/187, которая работает в ускоренном режиме. В обычном режиме создаются файлы .mexw64, а в ускоренном режиме создаются файлы .slxc и .mexw64 в рабочей папке.

Действие:

  1. Один раз провожу 1 тест. Все в штатном режиме. Мои тесты прошли успешно.
  2. Провожу последовательно 29 тестов. Все в штатном режиме. Мои тесты прошли успешно.
  3. Я запускаю 1 тест один раз, затем я запускаю 29 тестов в параллельных кластерах. Все в обычном режиме. Мои тесты прошли успешно. (** См. Ссылку №1)
  4. Я провожу 1 тест один раз, все в режиме ускорителя. Мои тесты прошли успешно.
  5. Провожу последовательно 29 тестов. Все в режиме акселератора. Мои тесты прошли успешно.
  6. Я запускаю 1 тест один раз, затем я запускаю 29 тестов в параллельных кластерах, все в режиме ускорителя. Мои тесты не проходят.

Ожидаемые и результаты:

Я ожидал, что моя симуляция, работающая в ускорительном / параллельном режиме, даст те же положительные результаты, что и нормальный / параллельный режим. Но :

  1. У меня проблема чтения / записи / построения с использованием общих ресурсов на параллельном протекторе, когда я запускаю 2 теста параллельно.
  2. Мой параллельный поток выходит из строя, когда я пытаюсь запустить 29 одновременно.

Есть идеи, как это исправить?

Я пробовал различные конфигурации сборки в симуляции и настройках сборки, я пытался уменьшить количество ускоренных целей и читал онлайн-ресурсы.

Ошибка:

#1

Building with 'Microsoft Visual C++ 2015 (C)'.
LINK : fatal error LNK1104: cannot open file 'D:\GIT\***\***\work\sim_artifacts\***_src_msf.mexw64'


NMAKE : fatal error U1077: 'C:\PROGRA~1\MATLAB\R2017b\bin\win64\mex.EXE' : return code '0xffffffff'
Stop.
The make command returned an error of 2
'An_error_occurred_during_the_call_to_make' is not recognized as an internal or external command,
operable program or batch file.

### Build procedure for model: '***_src' aborted due to an error.

#2

The client lost connection to worker 4. This might be due to network problems,
or the interactive communicating job might have errored.

Ссылка:

  1. Как сделать исправить отсутствующую проблему с симуляцией simulink при запуске теста в параллельном режиме?
  2. https://www.mathworks.com/help/simulink/gui/rebuild.html
  3. https://www.mathworks.com/help/simulink/ug/model-callbacks.html#
  4. https://www.mathworks.com/help/simulink/ug/reuse-simulation-builds-for-faster-simulations.html
  5. https://www.mathworks.com/help/matlab/ref/matlab.unittest.testrunner.runinparallel.html

person Weltgeist    schedule 13.11.2020    source источник


Ответы (1)


Моя проблема заключалась в проблемах с параллелизмом данных. Я нашел решение.

Решение:

Теперь я запускаю тест один раз в режиме ускорителя для создания кэшированной папки (цели моделирования и ускоренные артефакты). Затем копирую папку с кешем 29 раз. затем я назначаю каждой папке 1 параллельный тестовый запуск в качестве входных данных. Следовательно, все параллельные тесты читаются и записываются в разные папки, поэтому они больше не конфликтуют друг с другом.

Ссылка:

  1. https://www.youtube.com/watch?v=cKK3qpBjixA
  2. https://www.mathworks.com/help/simulink/ug/model-reference-simulation-targets-1.html
  3. https://www.mathworks.com/help/simulink/ug/not-recommended-using-sim-function-within-parfor.html

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

Код:

function setParCacheFolder()
%% get Simulink Files names
originalPath = path;
addpath(genpath('***\***\***\***')); 
file=getFileNames('FOOTEST_*.slx','***\***\***\***');
for i = 1:length(file)
    %% open/load simulink system
    [~,NAME,~]=fileparts(file(i));
    sys{i}=NAME;
    open_system(sys{i});
    %% copy Cache Folder
    copyfile(fullfile(pwd,'\***\work\sim_artifacts'), fullfile(pwd,strcat('\***\work\sim_artifacts',sys{i}{1})));
    %% get specific cache folder
    get_param(0, 'CacheFolder')
    %% set specific cache folder
    set_param(0, 'CacheFolder', fullfile(pwd,strcat('\***\work\sim_artifacts',sys{i}{1})));
    %% save simulink project
    save_system(sys{i}{1},[],'SaveDirtyReferencedModels','on','OverwriteIfChangedOnDisk',true);
    bdclose('all');
end
path(originalPath);
end

person Weltgeist    schedule 19.11.2020