If you are doing Monte Carlo simulation or system optimization on your Simulink model, you’ll need to run multiple simulations while varying model parameters. How do you get each simulation to run as quickly as possible?
In Simulink®, there are three desktop simulation modes: Normal, Accelerator, and Rapid Accelerator. For most models, Accelerator is faster than Normal, and Rapid Accelerator is faster still. Rapid Accelerator mode speeds up simulation by generating an executable for your model. The exact speedup varies depending on the model, but Rapid Accelerator can be more than 10 times faster than Normal mode.
Using Rapid Accelerator involves trading off flexibility and performance—Rapid Accelerator does not support the debugger or profiler, and it only works when the entire model is capable of generating C code—but if your goal is efficient batch and Monte Carlo simulations, then Rapid Accelerator is your best option.
This article shows how to set up your batch simulation script to get the maximum performance out of Rapid Accelerator.
Setting Up the Model—A Bouncing Ball Example
Each time you run a model or use the
sim command, Simulink checks for changes in the model. Depending on the size of the model, this initialization phase can be time-consuming. In Rapid Accelerator mode, if you know that your model did not change structurally, you can skip this step by simply turning off the
RapidAcceleratorUpToDateCheck option. For any model, no matter how large, this reduces initialization time to zero.
For illustration, we’ll use a simple model of a bouncing ball (Figure 1). In this model, a ball drops from a certain height onto a hard surface. The position and velocity of the ball are measured at each step of the simulation. The parameters are gravity, the ball’s initial height and velocity, and the coefficient of restitution (the bounciness of the ball).
Suppose we want to vary the coefficient of restitution, specified
k = Simulink.Parameter k.CoderInfo.StorageClass = 'SimulinkGlobal'; k.Value = -0.9;
Once this is done, we can explicitly build the rapid accelerator executable:
mdl = 'sldemo_bounce'; rtp = Simulink.BlockDiagram.buildRapidAcceleratorTarget(mdl);
k_values = [-0.9:0.1:-0.1]; for i = 1:length(k_values) paramSet(i) = Simulink.BlockDiagram.modifyTunableParameters(rtp, ... 'k', k_values(i)); end
We are now ready to simulate the model multiple times in Rapid Accelerator mode using the
sim command with the
for i = 1:length(k_values) simout(i) = sim(mdl,'SimulationMode','rapid',... 'RapidAcceleratorUpToDateCheck','off', ... 'RapidAcceleratorParameterSets',paramSet(i)); end
Using this workflow with parallel computing is straightforward. All you do is
Rapid Accelerator mode is just one way to speed up simulations. You can also use the Performance Advisor, which lets you analyze your model for simulation bottlenecks, or Fast Restart, which lets you perform iterative simulations without recompiling the model or terminating the simulation each time.
1 If you are using Simulink R2015a or earlier, you also need to turn on the “Inline Parameters” option in the Configuration Parameters.