Simulink.data.dictionary.setupWorkerCache

Включите параллельную симуляцию со словарем данных

Описание

Simulink.data.dictionary.setupWorkerCache подготавливает работников в параллельном пуле для симуляции модели, которая связана со словарем данных. Используйте эту функцию в spmd (Parallel Computing Toolbox), до запуска parfor (Parallel Computing Toolbox), чтобы предоставить работникам в параллельном пуле способ безопасного взаимодействия с одним словарем данных.

Во время параллельной симуляции модели, которая связана со словарем данных, можно разрешить каждому работнику доступ и изменение данных в словаре независимо от других работников. Simulink.data.dictionary.setupWorkerCache временно предоставляет каждому работнику пула свой собственный кэш словаря данных, позволяя работникам использовать данные в словаре, не изменяя их навсегда.

Вы должны иметь лицензию Parallel Computing Toolbox™, чтобы выполнить параллельную симуляцию с помощью parfor (Parallel Computing Toolbox) блок.

Примеры

Управление вариантом сдвига с помощью параллельной симуляции

Чтобы использовать параллельную симуляцию для сдвига управления вариантом (a 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.

Введенный в R2015a