This example shows how the code generator optimizes generated code by removing code that has no effect on computational results. This optimization:
Increases execution speed.
Reduces ROM consumption.
In the model rtwdemo_blockreduction, a Gain block of value 1.0
is in between Inport and Outport blocks.
model = 'rtwdemo_blockreduction';
open_system(model);
Create a temporary folder for the build and inspection process.
currentDir=pwd; [~,cgDir]=rtwdemodir();
Build the model.
set_param(model,'BlockReduction','off'); rtwbuild(model)
### Starting build procedure for: rtwdemo_blockreduction ### Successful completion of build procedure for: rtwdemo_blockreduction Build Summary Top model targets built: Model Action Rebuild Reason ======================================================================================================= rtwdemo_blockreduction Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 7.0039s
Here is the code from rtwdemo_blockreduction.c
.
cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c'); rtwdemodbtype(cfile, '/* Model step function */',... '/* Model initialize function */', 1, 0);
/* Model step function */ void rtwdemo_blockreduction_step(void) { /* Outport: '<Root>/Out1' incorporates: * Gain: '<Root>/Gain' * Inport: '<Root>/In1' */ rtwdemo_blockreduction_Y.Out1 = 1.0 * rtwdemo_blockreduction_U.In1; }
Open the Configuration Parameters dialog box.
Select Block reduction. This optimization is on by default.
Alternately, use the command-line API to enable the optimization.
set_param(model,'BlockReduction','on');
rtwbuild(model)
### Starting build procedure for: rtwdemo_blockreduction ### Successful completion of build procedure for: rtwdemo_blockreduction Build Summary Top model targets built: Model Action Rebuild Reason ====================================================================================== rtwdemo_blockreduction Code generated and compiled Generated code was out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 6.8092s
Here is the optimized code from rtwdemo_blockreduction.c
.
cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c'); rtwdemodbtype(cfile, '/* Model step function */',... '/* Model initialize function */', 1, 0);
/* Model step function */ void rtwdemo_blockreduction_step(void) { /* Outport: '<Root>/Out1' incorporates: * Inport: '<Root>/In1' */ rtwdemo_blockreduction_Y.Out1 = rtwdemo_blockreduction_U.In1; }
Because multiplying the input signal by a value of 1.0
does not impact computational results, the code generator excludes the Gain block from the generated code. Close the model and clean up.
bdclose(model) rtwdemoclean; cd(currentDir)