exponenta event banner

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

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

  1. Открытый rtwdemo_sil_topmodel.

  2. На панели «Параметры конфигурации» > «Создание кода» > «Проверка» укажите параметры профилирования:

    • Установите флажок Измерить время выполнения задачи.

    • Укажите переменную рабочей области, например: myExecutionProfile.

    • В раскрывающемся списке «Параметры сохранения» выберите All data.

  3. Выполните моделирование SIL.

Программа создает переменную рабочего пространства myExecutionProfileодин 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);

Связанные темы