Включите параллельную симуляцию со словарем данных
Simulink.data.dictionary.setupWorkerCache
Simulink.data.dictionary.setupWorkerCache
готовит рабочих в параллельном пуле для симуляции модели, которая соединена со словарем данных. Используйте эту функцию в блоке spmd
до запуска блока parfor
, чтобы предоставить рабочим в параллели объединяют способ безопасно взаимодействовать с одним словарем данных.
Во время параллельной симуляции модели, которая соединена со словарем данных, можно позволить каждому рабочему получать доступ и изменять данные в словаре независимо от других рабочих. Simulink.data.dictionary.setupWorkerCache
временно обеспечивает каждого рабочего в пуле с его собственным кэшем словаря данных, позволяя рабочим использовать данные в словаре, постоянно не изменяя его.
У вас должна быть лицензия Parallel Computing Toolbox™, чтобы выполнить параллельную симуляцию с помощью блока parfor
.
Чтобы использовать параллельную симуляцию, чтобы развернуть различное управление (объект Simulink.Parameter
, значение которого влияет на различное условие объекта Simulink.Variant
), что вы храните в словаре данных, используйте этот код в качестве шаблона. Поменяйте имена и значения модели, словаря данных и различного управления, чтобы совпадать с вашим приложением.
Чтобы развернуть значения параметров блоков или значения переменных рабочей области, которые вы используете, чтобы установить параметры блоков, используйте объекты Simulink.SimulationInput
вместо программируемого интерфейса к словарю данных. Смотрите Оптимизируют, Оценка и Значения Параметров блоков Развертки.
У вас должна быть лицензия Parallel Computing Toolbox, чтобы выполнить параллельную симуляцию.
% For convenience, define names of model and data dictionary model = 'mySweepMdl'; dd = 'mySweepDD.sldd'; % Define the sweeping values for the variant control CtrlValues = [1 2 3 4]; % Grant each worker in the parallel pool an independent data dictionary % so they can use the data without interference spmd Simulink.data.dictionary.setupWorkerCache end % Determine the number of times to simulate numberOfSims = length(CtrlValues); % Prepare a nondistributed array to contain simulation output simOut = cell(1,numberOfSims); parfor index = 1:numberOfSims % Create objects to interact with dictionary data % You must create these objects for every iteration of the parfor-loop dictObj = Simulink.data.dictionary.open(dd); sectObj = getSection(dictObj,'Design Data'); entryObj = getEntry(sectObj,'MODE'); % Suppose MODE is a Simulink.Parameter object stored in the data dictionary % Modify the value of MODE temp = getValue(entryObj); temp.Value = CtrlValues(index); setValue(entryObj,temp); % Simulate and store simulation output in the nondistributed array simOut{index} = sim(model); % Each worker must discard all changes to the data dictionary and % close the dictionary when finished with an iteration of the parfor-loop discardChanges(dictObj); close(dictObj); end % Restore default settings that were changed by the function % Simulink.data.dictionary.setupWorkerCache % Prior to calling cleanupWorkerCache, close the model spmd bdclose(model) Simulink.data.dictionary.cleanupWorkerCache end
Если словари данных открыты, вы не можете использовать команду Simulink.data.dictionary.cleanupWorkerCache
. Чтобы идентифицировать открытые словари данных, используйте Simulink.data.dictionary.getOpenDictionaryPaths
.
Simulink.data.dictionary.cleanupWorkerCache
| parfor
| spmd