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

3 次查看(过去 30 天)

采纳的回答

MathWorks Support Team
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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Manual Performance Optimization 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

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

Start Hunting!

Translated by