Main Content

Level

Optimization level for generated code

Model Configuration Pane: Code Generation / Optimization

Description

The Level parameter specifies the optimization level to apply to the generated code.

Settings

Maximum (default) | Minimum (Debugging) | Balanced with Readability
Minimum (Debugging)

Configure code generation settings for debugging.

Balanced with Readability

Apply code generation optimizations that balance RAM efficiency and execution speed with the readability of the generated code. For example, selecting this value disables optimizations that cross atomic subsystem boundaries.

Maximum

Configure code generation settings based on your code efficiency objectives. Choosing this setting enables the Priority parameter. Set the Priority parameter to one of these values:

  • Balance RAM and speed (default setting)

  • Maximum execution speed

  • Minimize RAM

Tips

For each Priority and Level parameter value, there are corresponding values for the parameters in the Details section. These are some important differences among these various settings:

  • If you set the Level parameter to Minimum (debugging), the parameters in the Details section are set to off. The code generator does not implement optimizations that remove variables or code making it easier to debug the generated code.

  • The parameter settings for Balanced with Readability and Balance RAM and speed are the same except for these three parameters:

    • Reuse buffers of different sizes and dimensions

    • Optimize global data access

    • Optimize block operation order in generated code

    The above optimizations can potentially hurt readability because they cross atomic subsystem boundaries and Optimize block operation order in generated code might change the block execution order in the generated code so that it is different than in simulation.

  • If you have limited RAM, choose the Minimize RAM setting. This setting enables these optimizations that reduce RAM at the expense of a potential slow-down in execution speed:

    • Pack Boolean data into bitfields

    • Reuse buffers of different sizes and dimensions

    • Use bitsets for storing state configuration

    • Use bitsets for storing Boolean data

    This setting also changes the Optimize block operation order in generated code from Improved Code Execution Speed to off.

For each Priority and Level parameter value, this table lists the corresponding values for the parameters in the Details section.

ParametersSettingsExample
LevelMinimum (debugging)Balanced with readabilityMaximum 
PriorityNot Applicable (N/A)N/ABalance RAM and speedMaximize execution speedMinimize RAM
Details  
Use memcpy for vector assignmentOffOnOnOnOnUse memcpy Function to Optimize Generated Code for Vector Assignments
Memcpy threshold (bytes)Off64646464Use memcpy Function to Optimize Generated Code for Vector Assignments
Enable local block outputsOffOnOnOnOnEnable and Reuse Local Block Outputs in Generated Code
Reuse local block outputsOffOnOnOnOnEnable and Reuse Local Block Outputs in Generated Code
Eliminate superfluous local variables (expression folding)OffOnOnOnOnMinimize Computations and Storage for Intermediate Results at Block Outputs
Reuse global block outputsOffOnOnOnOnReuse Global Block Outputs in the Generated Code
Perform in-place updates for Assignment and Bus Assignment blocksOffOnonOnOnPerform in-place updates for Assignment and Bus Assignment blocks
Reuse buffers for Data Store Read and Data Store Write blocksOffOnOnOnOnData Copy Reduction for Data Store Read and Data Store Write Blocks
Simplify array indexingOffOffOffOnOffSimplify Multiply Operations in Array Indexing
Pack Boolean data into bitfieldsOffOffOffOffOnOptimize Generated Code by Packing Boolean Data into Bitfields
Reuse buffers of different sizes and dimensionsOffOffOnOffOnReuse Buffers of Different Sizes and Dimensions
Generate parallel for-loopsOffOffOffOnOffGenerate Parallel for-Loops Using the Open Multiprocessing (OpenMP) Application Interface
Automatically schedule for-loopsOffOffOffOnOffAutomatically Schedule for-Loops for Neighborhood Processing Subsystems
Reuse buffers for Model blocksOffOffOnOnOnReduce Memory Usage for Models Containing Referenced Models
Optimize global data accessNoneNoneUse global to hold temporary resultsNoneUse global to hold temporary resultsOptimize Global Variable Usage
Optimize block operation order in generated codeOffOffImproved Code Execution SpeedImproved Code Execution SpeedOffRemove Data Copies by Reordering Block Operations in the Generated Code
Use bitsets for storing state configurationOffOffOffOffOnReduce Memory Usage for Boolean and State Configuration Variables
Use bitsets for storing Boolean dataOffOffOffOffOnReduce Memory Usage for Boolean and State Configuration Variables

If you plan on upgrading your software, be aware that:

  • Setting the Level and Priority parameters enables the latest optimizations corresponding with the above parameter settings for each subsequent release.

  • Selecting the Specify custom optimizations parameter enables you to select individual parameters in the Details section. When you load a model in a future release, optimization parameters that were introduced in releases after you adopted the software to when you upgrade are set to off. If you want to reduce the number of changes in the generated code when you upgrade your software, this option can be a good choice.

Recommended Settings

ApplicationSetting
DebuggingMinimum (debugging)
TraceabilityMinimum (debugging)
EfficiencyBased on your goals, choose Balanced with Readability or Maximum. If you choose Maximum, set the Priority parameter.
Safety precautionNo impact

Programmatic Use

Parameter: OptimizationLevel
Type character vector
Value: 'level0' (UI Setting Minimum (debugging))| 'level1' (UI Setting Balanced with Readability)| 'level2' (UI Setting Maximum)
Default: 'level2'

Version History

Introduced in R2007b