Анализ данных выполнения кода

После SIL или PIL симуляции можно анализировать данные во время выполнения с помощью методов из coder.profile.ExecutionTime и coder.profile.ExecutionTimeSection классы.

  1. Откройте rtwdemo_sil_topmodel.

  2. На панели Configuration Parameters Code Generation > Verification > задайте опции профилирования:

    • Установите флажок Measure task execution time.

    • Задайте Workspace variable, например myExecutionProfile.

    • В раскрывающемся списке Save options выберите All data.

  3. Запустите SIL симуляцию.

Программа генерирует переменную рабочей области myExecutionProfile, an coder.profile.ExecutionTime объект.

Чтобы получить общее количество секций кода, которые имеют данные профилирования, используйте Sections способ.

>> no_of_Sections = myExecutionProfile.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 = myExecutionProfile.Sections(1)
SecondSectionProfile = myExecutionProfile.Sections(2)

FirstSectionProfile = 

  ExecutionTimeTaskSection with properties:

                            Name: 'rtwdemo_sil_topmodel_initialize'
                          Number: 1
            ExecutionTimeInTicks: 1188
                 SelfTimeInTicks: 1188
           TurnaroundTimeInTicks: 1188
       TotalExecutionTimeInTicks: 1188
            TotalSelfTimeInTicks: 1188
      TotalTurnaroundTimeInTicks: 1188
     MaximumExecutionTimeInTicks: 1188
     MaximumExecutionTimeCallNum: 1
          MaximumSelfTimeInTicks: 1188
          MaximumSelfTimeCallNum: 1
    MaximumTurnaroundTimeInTicks: 1188
    MaximumTurnaroundTimeCallNum: 1
                        NumCalls: 1
          ExecutionTimeInSeconds: 5.4000e-07
                            Time: 0


SecondSectionProfile = 

  ExecutionTimeTaskSection with properties:

                            Name: 'rtwdemo_sil_topmodel_step [0.1 0]'
                          Number: 2
            ExecutionTimeInTicks: [1×101 uint64]
                 SelfTimeInTicks: [1×101 uint64]
           TurnaroundTimeInTicks: [1×101 uint64]
       TotalExecutionTimeInTicks: 70316
            TotalSelfTimeInTicks: 70316
      TotalTurnaroundTimeInTicks: 70316
     MaximumExecutionTimeInTicks: 2448
     MaximumExecutionTimeCallNum: 2
          MaximumSelfTimeInTicks: 2448
          MaximumSelfTimeCallNum: 2
    MaximumTurnaroundTimeInTicks: 2448
    MaximumTurnaroundTimeCallNum: 2
                        NumCalls: 101
          ExecutionTimeInSeconds: [1×101 double]
                            Time: [101×1 double]

Использование coder.profile.ExecutionTimeSection методы для извлечения информации профилирования для конкретной секции кода. Для примера используйте Name для получения имени профилированной задачи.

>> name_of_section = SecondSectionProfile.Name

name_of_section =

rtwdemo_sil_topmodel_step [0.1 0]

Если таймер некалиброван, и вы знаете частоту таймера, например, 2,2 ГГц, можно использовать coder.profile.ExecutionTime метод TimerTicksPerSecond для калибровки таймера:

>> myExecutionProfile.TimerTicksPerSecond = 2.2e9;
>> SecondSectionProfile = myExecutionProfile.Sections(2);

Похожие темы