Рассмотрим случай, когда вызванный Model блок сконфигурирован для запуска в режиме SIL или PIL симуляции. Программное обеспечение генерирует одно измерение во время выполнения каждый раз, когда ссылочная модель запускается. Если существует несколько триггеров за один временной шаг, программное обеспечение генерирует несколько измерений для триггерного блока Model. И наоборот, если в заданном временном шаге нет триггера, программное обеспечение не генерирует измерений времени.
Когда вы запускаете SIL симуляцию с включенным профилированием времени выполнения, вы можете увидеть всплески во время выполнения измерений.
Всплески вызваны упреждением процесса, которое происходит с многозадачной операционной системой хоста. Если операционная система прерывает процесс SIL и запускает другой процесс, измеренное время выполнения включает время, в течение которого процесс SIL приостановлен. С помощью PIL симуляции вы не видите всплесков, потому что выполнение кода на целевом объекте не упреждается.
Перенос счетчика приводит к измерениям во время выполнения, которые меньше, чем ожидалось. Для SIL счетчик переносится, когда период времени выполнения больше 264 такты (232 такты, если компилятором MEX является LCC). Для PIL точка переноса зависит от заданного таймера и может быть 28, 216, 232, или 264 такты.
Рассмотрим пример PIL, где частота таймера составляет 20 МГц. Для 32-битного таймера перенос происходит, когда период времени выполнения больше 1/(20e6)*(2^32-1)
, то есть 214,7 s. Однако для 16-битного таймера точка, в которой происходит перенос, является 0,0033 s.
Для многоядерного приложения в реальном времени программное обеспечение учитывает расхождения синхронизации при записи значений таймера для различных ядер, что эффективно уменьшает область значений измерений таймера.
Если ваше целевое строение уже не задает таймер, создайте объект-таймер, который предоставляет подробную информацию о аппаратном таймере и связанных с ним исходных файлах:
Для SIL симуляции размер слова таймера составляет 64 бита.
Для PIL симуляции задайте неподписанный 8-, 16-, 32- или 64-битный таймер. Для получения дополнительной информации см. раздел «Установка аппаратного таймера».
Профилирующее инструментирование является интрузивным и влияет на количество, которое он предназначен для измерения. Поэтому цель проекта состоит в том, чтобы максимизировать понимание кода с минимумом инструментирования. Для примера с системой в реальном времени могут быть переключатели контекста задачи из-за упреждения. Эти контекстные переключатели явно не инструментализируются. Чтобы записать начало и конец каждой задачи, программное обеспечение должно вывести переключатели контекста из инструментирования. В результате программное обеспечение сообщает о поведении, которое является оценкой. Оценка подвержена ошибке из-за неполного инструментирования в ядре.
В некоторых случаях, когда программное обеспечение не может точно определить поведение, программное обеспечение генерирует предупреждение:
Warning: Analysis unsuccessful for one or more profiling data points. ...
set_param(model, 'CodeProfilingInstrumentation', 'on')
). Если системный вызов mutex take не инструментализирован, может возникнуть переключатель контекста задачи, который не отображается для анализа профилирования выполнения.В других случаях, хотя программное обеспечение не может точно определить поведение, программное обеспечение не генерирует предупреждение.
Вы не можете сгенерировать профили во время выполнения для сайтов вызовов функций в коде подсистемы, который повторно используется в модели или нескольких моделях. Для получения информации о повторном использовании кода подсистемы смотрите Сгенерировать повторно используемый код из библиотечных подсистем, общих для моделей.
Вы не можете загрузить измерения во время выполнения, сохраненные в предыдущем релизе. Например, используя R2014a, вы сохраняете переменные рабочей области в MAT-файл. Одна из переменных рабочей области содержит измерения во время выполнения. В R2015b, если вы пытаетесь загрузить MAT-файл, вы видите эту ошибку:
Format of execution profiling data is invalid. This error can occur if you load data from a previous release. Loading data from a previous release is not supported.