Я работаю над проектом, в котором параллельные вычисления были бы огромным преимуществом. Проект имитирует несколько Simulink
моделей. Я выполнил симуляцию с обычным циклом for, но, поскольку на симуляцию уходит несколько дней, я решил попробовать "parfor"-Loop
.
Но тут начинается проблема. Сначала я дам вам фотографии моего кода, рабочей области и Simulink-part
, который вызывает у меня проблемы:
Вот мой код:
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
wpath = pwd;
parfor k = 1:number_of_models
load_system(strcat(wpath,'\Models_Folder\',House(k).model_name));
set_param(House(k).model_name, 'Stoptime', num2str(foreruntime));
set_param(House(k).mask_name, 'Data_contr', num2str(controlvector(k)));
set_param(House(k).mask_name, 'Data_cons', strcat('GlobalData(',num2str(k),').consume.',MaskParam(k).consume_input))
SimOut(k) = sim(House(k).model_name);
end
delete(apool);
Сбивает с толку то, что если я удалю столбец:
SimOut(k) = sim(House(k).model_name);
код просто отлично работает -> modelparameters
установлены в parfor loop
но если я не удалю столбец, появится следующая ошибка:
Error using Forerunsimple (line 9)
Error evaluating parameter 'Data_cons' in 'model_house_14/House'
Caused by:
Error using parallel_function>make_general_channel/channel_general (line 907)
Error evaluating parameter 'Data_cons' in 'model_house_14/House'
Error using parallel_function>make_general_channel/channel_general (line 907)
Undefined variable "GlobalData" or class "GlobalData".
Как вы можете видеть на картинке, переменная "GlobalData"
определена в рабочей области. Так что на мой взгляд должно работать. Очевидно, что нет. У вас есть идеи, в чем может быть проблема?