Советы и ограничения

Триггерированный блок Model

Рассмотрим случай, когда вызванный 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. ...
Например, программное обеспечение может сгенерировать это предупреждение, когда не все мьютекс берут системные вызовы (связанные с переходами скорости) инструментализируются. В случае Simulink® Real-Time™ эта ситуация может возникнуть, если вы сгенерируете код для иерархии модели-ссылки, не включив профилирование функции для всех ссылочных моделей (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.