コード実行データの解析
ソフトウェアインザループ (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 Time
coder.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);