Я хотел бы запустить сложную модель Simulink в петле парфоров на многих ядрах с разными данными. Однако у меня пока не было успеха, поэтому я создал простую модель и попытался запустить ее параллельно с теми же данными.Запустить Simulink model parallel
модель выглядит следующим образом, добавив два сигнала: С кодом:
function Result = Add (X, Y)
Result = X + Y;
Скрипт для запуска модели заключается в следующем:
if matlabpool('size') == 0
matlabpool('open',4);
end
parfor i = 1:4
data=ones(1,20);
X=timeseries(data);
Y=timeseries(data);
output = sim('model_test','StopTime','5');
Result = output.get('Res');
end
Однако, из-за ошибки происходит:
Я не понимаю и почему переменные не существуют. Я знаю, что вычисление параллелей всегда имеет решающее значение с точки зрения доступа с переменным доступом, но у меня не было успеха с параллельным запуском simulink. Не могли бы вы объяснить мне ошибку и как ее решить? Большое спасибо!
Ответ на am304: Спасибо, ответ помог мне в пути, что я теперь знаю, как изменить константы с Set_Param в петле parfor, и я понимаю, почему он не работает для таймсерий. Однако для временного периода я все еще борется. Я попробовал несколько вариантов, и это одна:
if matlabpool('size') == 0
matlabpool('open',4);
end
data=ones(1,20);
X=timeseries(data);
Ybase=timeseries(data);
parfor i = 1:4
Y = evalin('base', 'Ybase');
output = sim('model_test','StopTime','5');
Result{i} = output.get('Res');
end
Переменная Ybase существует в рабочем пространстве, но следующее сообщение об ошибке:
Как вы видите, переменная Ybase существует в базовое рабочее пространство. Вы знаете, как правильно использовать evalin или assignin для доступа?
Спасибо и приветствую!
Hi am304, спасибо, что ответ! Я пробовал evalin и присваивать, но это не сработало, как хотелось. Вы можете видеть сообщение выше, я сделал там редактирование в качестве ответа. Спасибо и с уважением! – user1956123
См. Мой отредактированный ответ, надеюсь, что он должен работать – am304