Профилирование выполнения кода с SIL и PIL

Можно сконфигурировать программное обеспечение в цикле (SIL) или процессоре в цикле (PIL) симуляция, чтобы произвести метрики времени выполнения для задач и функций в сгенерированном коде. Программное обеспечение вычисляет времена выполнения от данных, которые получены через отладку кода, добавленную к SIL или приложению PIL или сгенерированному коду под тестом. Можно использовать метрики времени выполнения, чтобы определить, удовлетворяет ли сгенерированный код требования для развертывания приложений на целевом компьютере.

Например, можно выполнить следующий анализ:

  1. Идентифицируйте задачи, которые требуют большей части времени. Задачами являются основные точки входа в сгенерированный код. Например, ступенчатая функция для частоты дискретизации или функции model_initialize.

  2. В этих задачах исследуйте секции кода, которые требуют большей части времени.

  3. Идентифицируйте, что изменения во время выполнения в зависимости от времени продвигаются.

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

Примечание

Измерения времени выполнения зависят значительно от оборудования, которое вы используете. Для надежных результатов соберите метрики времени выполнения с помощью оборудования, на котором вы планируете развернуть сгенерированный код, то есть, запустите PIL симуляции, которые выполняют код на вашем целевом компьютере. SIL симуляции, которые выполняют код на вашем хосте - компьютере, не могут произвести представительные метрики.

Когда SIL или PIL симуляция завершены, вы можете:

  • Просмотрите метрики времени выполнения через окно экрана или отчет.

  • Используйте Инспектора Данных моделирования, чтобы просмотреть и сравнить изменение времен выполнения по симуляции.

  • Анализируйте измерения в среде MATLAB®.

Сконфигурируйте профилирование выполнения кода

Сконфигурировать профилирование выполнения кода для SIL или PIL симуляции:

  1. В вашей топ-модели откройте диалоговое окно Configuration Parameters и выберите Code Generation> панель Verification.

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

  3. В течение функциональных времен выполнения, от Measure function execution times выпадающий список, избранная одна из этих опций:

    • Coarse (referenced models and subsystems only) – если вы хотите проанализировать сгенерированный функциональный код для основных компонентов модели.

    • Detailed (all function call sites) – если вы хотите проанализировать сгенерированный функциональный код для всех блоков в модели.

  4. В поле Workspace variable задайте имя. Когда вы запускаете симуляцию, программное обеспечение генерирует переменную с этим именем в базовом рабочем пространстве MATLAB. Переменная содержит измерения времени выполнения и является объектом типа coder.profile.ExecutionTime.

    Если вы устанавливаете флажок Data Import/Export> Single simulation output, программное обеспечение создает переменную в объекте Simulink.SimulationOutput, который вы задаете.

  5. От Save options выпадающий список выберите одно из следующего:

    • Summary data only — Если вы хотите сгенерировать только отчет и уменьшать использование памяти, например, во время долгой симуляции.

    • All data — Позволяет вам генерировать отчет и хранить профили времени выполнения в базовом рабочем пространстве. После симуляции можно использовать методы от coder.profile.ExecutionTime и классов coder.profile.ExecutionTimeSection, чтобы получить измерения времени выполнения для каждого вызова каждого профилируемого раздела кода, который происходит во время симуляции.

  6. Нажмите OK.

Для PIL симуляции необходимо сконфигурировать специфичный для оборудования таймер. Когда вы настраиваете настройку возможности соединения для своей цели, создаете объект - таймер. Это действие не требуется для SIL симуляции.

Если вы выбираете All data из Save options, выпадающий список, метрическое окно экрана и сгенерированный отчет отображают Инспектора Данных моделирования значки. Когда вы кликаете по одному из значков, программное обеспечение импортирует результаты симуляции в Инспектора Данных моделирования. Можно затем построить времена выполнения и управлять и сравнить графики от различных симуляций.

Управляйте профильной гранулярностью

Можно управлять гранулярностью времени выполнения, профилируя, то есть, предотвратить сложение отладки кода на определенные сайты вызова функции. Посредством управления профильной гранулярности вы можете:

  • Фокусируйтесь на производительности компонентов модели, которые требуют улучшения. Например, после начального выполнения, отключите профилирование для блоков, которые требуют небольшого времени вычислений. Это действие сокращает количество элементов, отображенных профильным отчетом.

  • Уменьшайте отладку кода наверху. Например, для простых функций, отладка кода наверху может быть больше, чем время выполнения функционального кода.

Чтобы сгенерировать метрики времени выполнения для задач только, на Code Generation> панель Verification диалогового окна Configuration Parameters, устанавливают флажок Measure task execution time и устанавливают Measure function execution times на Off.

Чтобы сгенерировать функциональные данные о выполнении для моделей, на которые ссылаются, и атомарных подсистем в топ-модели, на Code Generation> панель Verification, устанавливают флажок Measure task execution time и устанавливают Measure function execution times на Coarse (referenced models and subsystems only).

Генерация функциональных данных о выполнении требует вставки зондов измерения в сгенерированный код. Программное обеспечение вставляет зонды измерения для атомарной подсистемы, только если вы устанавливаете поле Function packaging (на вкладке Code Generation диалогового окна Function Block Parameters) или к Nonreusable function или к Reusable function. Если поле установлено в Auto, то вставка зондов зависит от упаковочного выбора, который следует из установки Auto. Если поле установлено в Inline, программное обеспечение не вставляет зонды.

Примечание

В сгенерированном коде программное обеспечение переносит каждый вызов функции с зондами измерения кроме тех случаев, когда:

Сгенерировать функциональные времена выполнения для иерархий модели - ссылки:

  1. В топ-модели откройте диалоговое окно Configuration Parameters и выберите Code Generation> панель Verification.

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

  3. Для каждого блока Model, который вы хотите профилировать, задайте Measure function execution times только на контрольном уровне, для которого вы требуете функциональных времен выполнения.

Например, рассмотрите топ-модель, которая имеет блок Model A, который в свою очередь содержит блок Model B.

Если вы хотите сгенерировать времена выполнения для функций из модели B, выберите Measure task execution time для топ-модели и задайте Measure function execution times для модели B.

Эти параметры топ-модели заменяют соответствующие параметры моделей, на которые ссылаются:

  • Measure task execution time. Если вы отключаете этот параметр для топ-модели, вы также отключаете профилирование функции для моделей, на которые ссылаются.

  • Workspace variable

  • Save options

К профилированию выполнения кода системы управления для блока в модели, например, блока подсистемы, используют параметры блоков CodeProfilingOverride:

  1. В Редакторе Simulink® выберите блок.

  2. В Командном окне, выполнении:

    set_param(gcb, 'CodeProfilingOverride', blockParameterValue)
    Используйте одно из этих значений для blockParameterValue:

    • 'off' Отключает профилирование для блока.

    • 'on' – Позволяет профилировать для блока, если профилирование включено для родительской модели.

    • 'inherit' (значение по умолчанию) – Применяет профильные настройки родительского блока.

При изменении блока профильная настройка не вызывает регенерацию производственного кода.

Если у вашей топ-модели есть блок PIL, выполнение, профильные настройки, которые применяются к блоку PIL, являются настройками из исходной модели, что вы раньше создавали блок PIL. Смотрите Симуляцию с Блоками От Подсистем. Вы не можете использовать CodeProfilingOverride, чтобы управлять профилированием для блока PIL.

Смотрите также

| | |

Похожие темы