Filter löschen
Filter löschen

Can I use multiple cores to generate code for multiple top-level models in parallel?

37 Ansichten (letzte 30 Tage)

Is there any way to utilize multiple cores to generate code for multiple top-level models?

Akzeptierte Antwort

MathWorks Support Team
MathWorks Support Team am 23 Mai 2024 um 0:00
As of date of publishing (R2024a), there is no explicit feature for generating code from multiple top-level models at the same time. There is a feature for generating code for multiple model references in the same model in parallel. 
It can be possible to use a parfor loop (Parallel Computing Toolbox) with the rtwbuild() or slbuild() commands to generate code for multiple top level models, concurrently, on different cores. To do this you must take precautions to prevent data concurrency issues as the workers generate and read files. To avoid concurrency issues, you can follow the recommendations similar to this documentation page about "sim in parfor".
The following is some pseudocode that shows the basic concepts of how to setup and cleanup workers using the models from the following example. The key is preventing workers from writing to the same files at the same time. We do this by giving each worker its own SLDD cache, cache folder, code gen folder, and working folder. 
models = ["ParallelBuildB1", ...
"ParallelBuildB2","ParallelBuildB3"];
spmd %worker setup
curDir = pwd;
addpath(curDir) %add necessary paths
openProject(curDir); %open project if you have one
Simulink.data.dictionary.setupWorkerCache %give each worker its own SLDD cache
%call any custom setup scripts here
end
parfor i = 1:length(models)
%give each worker its own cache and code gen dir to avoid race conditions
  %you may need to give each worker its own working dir if other files will be edited
modelCacheFolder = models(i) + "_cache";
modelCodeGenFolder = models(i) + "_code";
mkdir(modelCacheFolder);
mkdir(modelCodeGenFolder);
Simulink.fileGenControl('set', 'CacheFolder', modelCacheFolder, ...
'CodeGenFolder',modelCodeGenFolder);
slbuild(models(i))
end
spmd %worker cleanup
cd(curDir)
bdclose all %close all models
Simulink.data.dictionary.cleanupWorkerCache; %cleanup SLDD cache
end

Weitere Antworten (0)

Kategorien

Mehr zu Manual Performance Optimization finden Sie in Help Center und File Exchange

Tags

Noch keine Tags eingegeben.

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by