주요 콘텐츠

Concurrent Execution on Simulink Real-Time

This example shows how to apply explicit partitioning to enhance concurrent execution of a real-time application that you generate by using Simulink® Real-Time™.

Simulink Real-Time supports concurrent execution by using implicit partitioning or explicit partitioning of models. This example shows the relationship between the explicit partitioning of the tasks in the model subsystems and the execution of tasks by using the Simulink Real-Time profiling tool.

Note: You can also use the Simulink® Schedule Editor to partition the model. In the Simulink Editor, click the Modeling tab and select Design > Schedule Editor. For more information, see Create Partitions from a Rate-Based Model.

The example model slrt_ex_mds_and_tasks runs at sample rate of 0.001 second.

To run the model with adjusted sample rate of 0.01 second, change the sample rate before running the example. In the MATLAB® Command Window, type:

Ts = 0.01;

Create Target Object and Connect

Create a Target object for the default target computer and connect to the target computer.

tg = slrealtime;
connect(tg);
Warning: The timezone on the target is America/Los_Angeles, compared to
Asia/Calcutta on the host computer.
Would you like to sync the timezone on the target to the host computer?
<a href="matlab: sg.host.compareTargetTimeZoneAtConnect('thisTime','slrt1702eth');">sync</a>, <a href="matlab: sg.host.compareTargetTimeZoneAtConnect('ignore','slrt1702eth');">always ignore</a> 

Open, Build, and Download the Model

The top-level model references two subsystem models with explicit partitioning. Open subsystem1, which contains multiple rate-based tasks.

open_system('slrt_ex_mds_subsystem1');

Open subsystem2, which contains additional rate-based tasks.

open_system('slrt_ex_mds_subsystem2');

Open the model slrt_ex_mds_and_tasks. The model is mapped to seven threads: Model1_R1, Model1_R2, Model1_R3, Model1_R4, Model2_R1, Model2_R3, and Model2_R4.

These threads run at sample rates of Ts, 2*Ts, 3*Ts, 4*Ts, Ts, 3*Ts, and 4*Ts.

model = 'slrt_ex_mds_and_tasks';
open_system(model);
modelSTF = getSTFName(tg);
set_param(model,"SystemTargetFile",modelSTF);
set_param(model,"StopTime","10");
set_param(model,"RTWVerbose","off");
set_param('slrt_ex_mds_subsystem1',"SystemTargetFile",modelSTF);
set_param('slrt_ex_mds_subsystem2',"SystemTargetFile",modelSTF);

To apply explicit partitioning, in the Simulink Editor, on the Real-Time tab, click Hardware Settings, and then select Solver > Configure Tasks. Select the Tasks and Mapping node. For more information, see Configure Your Model for Concurrent Execution.

Build, download, and run the model.

evalc('slbuild(model)');
load(tg,model);

Start application and profile the application on the target computer

startProfiler(tg);
start(tg);
pause(2);
stopProfiler(tg);
stop(tg);

Download Profiling Data

The profiling data provides insights into the execution behavior and performance hotspots of the application.

getProfilerData(tg,model,"slrt_ex_mds_and_tasks_profiler_data");
Processing data on target computer ...

The .perf file is in Linux perf format and can be analyzed with standard Linux perf tools. Open the .perf file to visualize execution profile results including task execution times and scheduling information for each core. Use this data to identify CPU hotspots, detect scheduling delays, and verify timing constraints.

Close the Model

bdclose('slrt_ex_mds_subsystem1');
bdclose('slrt_ex_mds_subsystem2');
bdclose(model);

See Also

(Embedded Coder) | | | | | |

Topics