Model Performance Optimization
Acceleration
Run your application with Accelerator or Rapid Accelerator instead of Normal mode. Note that some scopes do not plot data when run in Rapid Accelerator mode.
When you use accelerator or rapid accelerator mode, on the Model Configuration Parameters dialog box, navigate to Compiler optimization level tab, and then set the parameter value to Optimizations on (faster runs).
Performance analysis for SDRu Blocks
Starting in R2022a, the SDRu blocks show improved speed performance with fewer underruns and overruns. For example, you can observe a speedup (in megasamples per second (MS/s)) with fewer underruns or overruns at 10000 samples per frame when you simulate these models in Normal, Accelerator, or Rapid Accelerator mode.
Transmitter performance model
Receiver performance model
The table shows the speedup analysis of these models with no underruns or overruns for USB-based radios and Ethernet-based radios. This speedup analysis is carried out between R2021b and R2022a.
Transmitter / Receiver | Radio type | R2021b Normal Mode | R2022a Normal Mode | R2021b Rapid Accelerator Mode | R2022a Rapid Accelerator Mode |
---|---|---|---|---|---|
Receiver | B-series | 15 MS/s | 25 MS/s | 20 MS/s | 35 MS/s |
Transmitter | B-series | 5 MS/s | 15 MS/s | 10 MS/s | 20 MS/s |
The models were timed on a Windows® 10, Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz test system.
Model Tuning
Use frame-based processing. With frame-based processing, the model processes multiple samples during a single execution call to a block. Consider using frame sizes from roughly 100 to several thousand.
In Model Configuration Parameters > Data Import/Export, turn off all logging.
The model should be single-rate. If the model requires resampling, then choose rational coefficients that will keep the model single-rate.
Do not add any Buffer blocks to the model. If you want to create convenient frame sizes, do it in your data sources. Using a Buffer block typically degrades performance.
Avoid feedback loops. Typically, such loops imply scalar processing, which will slow down the model considerably.
Avoid using scopes. To visualize your data, send it to a workspace variable and post-process it.
If your model has Constant blocks with values that do not change during simulation, make sure that the sample time is set to
inf
(default).
Simulink Code Generation
If you are generating code from the model, set the Solver setting to Fixed-step/ discrete. Set tasking mode to SingleTasking.
You can generate a standalone executable for your Simulink® model to improve performance. The generated code runs without Simulink in the loop. To perform any code generation, you must have an appropriate compiler installed. See https://www.mathworks.com/support/requirements/supported-compilers.html for a list of supported compilers.
You can generate generic real-time target (GRT) code if you have a Simulink Coder™ license. To do so, set Model Configuration Parameters > Code Generation > System target file to
grt.tlc (Generic Real-Time Target)
.When you generate code for any target (not just GRT), uncheck the Model Configuration Parameters > Hardware Implementation > Test hardware > Test hardware is the same as production hardware checkbox. After the checkbox is unchecked, set the Device type popup to
MATLAB Host Computer
.You can create generated code with a smaller stack then the GRT code if you have an Embedded Coder® license. To do so, set the Model Configuration Parameters > Code Generation > System target file to
ert.tlc (Embedded Coder)
. Then, add the following lines to the Model Configuration Parameters > Code Generation > Custom Code > Include custom C code in generated: > Source file edit field:#include <stdio.h> #include <stdlib.h>