コード実行データの解析
ソフトウェアインザループ (SIL) シミュレーション、プロセッサインザループ (PIL) シミュレーション、または XCP ベースのエクスターナル モード シミュレーションの実行後、coder.profile.ExecutionTime クラスと coder.profile.ExecutionTimeSection クラスのメソッドを使用して実行時間データを解析できます。
モデル
SILTopModelを開きます。openExample('ecoder/SILPILVerificationExample', ... supportingFile='SILTopModel.slx')
[モード] セクションで、[SIL/PIL シミュレーションのみ] を選択します。
[設定] ギャラリーで、プロファイリングを有効にするオプションを指定します。
[SIL/PIL 設定] で、[移植可能なワード サイズ] をクリックしてオンにします。
[時間プロファイリング] で、[タスク プロファイリング] をクリックしてオンにし、[保存オプション] をクリックして
[すべてのデータ]に設定し、[関数] をクリックしてオフにします。[カバレッジ] で、[カバレッジ収集] をクリックしてオフにします。
[実行] セクションで、[SIL/PIL を実行] をクリックします。
executionProfile を含む Simulink.SimulationOutput オブジェクトである coder.profile.ExecutionTime オブジェクトが生成されます。
プロファイリング データがあるコード セクションの総数を取得するには、Sections メソッドを使用します。
no_of_Sections = out.executionProfile.Sections
no_of_Sections =
1×2 ExecutionTimeTaskSection array with properties:
Name
Number
ExecutionTimeInTicks
SelfTimeInTicks
TurnaroundTimeInTicks
TotalExecutionTimeInTicks
TotalSelfTimeInTicks
TotalTurnaroundTimeInTicks
MaximumExecutionTimeInTicks
MaximumExecutionTimeCallNum
MaximumSelfTimeInTicks
MaximumSelfTimeCallNum
MaximumTurnaroundTimeInTicks
MaximumTurnaroundTimeCallNum
NumCalls
ExecutionTimeInSeconds
Timecoder.profile.ExecutionTimeSection オブジェクトを取得するには、Sections メソッドを使用します。FirstSectionProfile = out.executionProfile.Sections(1) SecondSectionProfile = out.executionProfile.Sections(2)
FirstSectionProfile =
ExecutionTimeTaskSection with properties:
Name: 'initialize'
Number: 1
ExecutionTimeInTicks: 154
SelfTimeInTicks: 154
TurnaroundTimeInTicks: 154
TotalExecutionTimeInTicks: 154
TotalSelfTimeInTicks: 154
TotalTurnaroundTimeInTicks: 154
MaximumExecutionTimeInTicks: 154
MaximumExecutionTimeCallNum: 1
MaximumSelfTimeInTicks: 154
MaximumSelfTimeCallNum: 1
MaximumTurnaroundTimeInTicks: 154
MaximumTurnaroundTimeCallNum: 1
NumCalls: 1
ExecutionTimeInSeconds: 4.2778e-08
Time: 0
SecondSectionProfile =
ExecutionTimeTaskSection with properties:
Name: 'step [0.1 0]'
Number: 2
ExecutionTimeInTicks: [262 216 176 174 174 174 178 172 … ]
SelfTimeInTicks: [262 216 176 174 174 174 178 172 … ]
TurnaroundTimeInTicks: [262 216 176 174 174 174 178 172 … ]
TotalExecutionTimeInTicks: 22366
TotalSelfTimeInTicks: 22366
TotalTurnaroundTimeInTicks: 22366
MaximumExecutionTimeInTicks: 748
MaximumExecutionTimeCallNum: 68
MaximumSelfTimeInTicks: 748
MaximumSelfTimeCallNum: 68
MaximumTurnaroundTimeInTicks: 748
MaximumTurnaroundTimeCallNum: 68
NumCalls: 101
ExecutionTimeInSeconds: [7.2778e-08 6.0000e-08 4.8889e-08 4.8333e-08 … ]
Time: [101×1 double]特定のコード セクションのプロファイリング情報を抽出するには、coder.profile.ExecutionTimeSection のメソッドを使用します。たとえば、プロファイリングされたタスクの名前を取得するには Name を使用します。
name_of_section = SecondSectionProfile.Name
name_of_section =
'step [0.1 0]'タイマーのキャリブレーションが未実行で、タイマーのレートがわかっている場合 (たとえば 2.2 GHz)、coder.profile.ExecutionTime の TimerTicksPerSecond メソッドを使用してタイマーのキャリブレーションを実行できます。
out.executionProfile.TimerTicksPerSecond = 2.2e9; SecondSectionProfile = out.executionProfile.Sections(2);