Main Content

コード実行データの解析

ソフトウェアインザループ (SIL) シミュレーション、プロセッサインザループ (PIL) シミュレーション、または XCP ベースのエクスターナル モード シミュレーションの実行後、coder.profile.ExecutionTime クラスと coder.profile.ExecutionTimeSection クラスのメソッドを使用して実行時間データを解析できます。

  1. モデル SILTopModel を開きます。

    openExample('ecoder/SILPILVerificationExample', ...
                 supportingFile='SILTopModel.slx')

  2. [モード] セクションで、[SIL/PIL シミュレーションのみ] を選択します。

  3. [設定] ギャラリーで、プロファイリングを有効にするオプションを指定します。

    • [SIL/PIL 設定] で、[移植可能なワード サイズ] をクリックしてオンにします。

    • [時間プロファイリング] で、[タスク プロファイリング] をクリックしてオンにし、[保存オプション] をクリックして [すべてのデータ] に設定し、[関数] をクリックしてオフにします。

    • [カバレッジ] で、[カバレッジ収集] をクリックしてオフにします。

  4. [実行] セクションで、[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.ExecutionTimeTimerTicksPerSecond メソッドを使用してタイマーのキャリブレーションを実行できます。

out.executionProfile.TimerTicksPerSecond = 2.2e9;
SecondSectionProfile = out.executionProfile.Sections(2);

関連するトピック