Шаг расчета и пропускная способность в режиме реального времени приложения

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

Показатели производительности в реальном времени

Производительность в реальном времени состоит из шага расчета и пропускной способности.

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

Если данные значительно изменяются между выборками, взятыми в свойственном шаге расчета, шаги расчета дольше, чем тот уровень может пропустить те изменения. Если данные включают нежелательный шум, шаги расчета короче, чем свойственный шаг расчета может получить тот шум.

Пропускная способность относится к тому, сколько данных приложение реального времени может обработать без перегрузки ЦП в данном шаге расчета. Пропускная способность ограничивается ресурсами, которые доступны от целевого компьютера. Шаги расчета, которые слишком коротки, могут перегрузить центральный процессор целевого компьютера и остановить выполнение.

Для получения дополнительной информации см.:

Ресурсы

Ресурсы целевого компьютера, которые влияют на приложение реального времени, включают:

  • Циклы ЦП, доступные в многожильных системах

  • Целевой компьютер скорость доступа RAM

  • RAM, доступный для псевдодиска

  • Пропускная способность канала ввода-вывода основной платы и задержка

  • Пропускная способность памяти на диске и задержка

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

  • Выполните модель, на которую ссылаются,

  • Получите данные через канал ввода-вывода

  • Регистрируйте результаты к псевдодиску

  • Свяжитесь с компьютером разработчика

Стратегия, которую вы используете, чтобы улучшить пропускную способность, зависит от ваших требований прикладной системы.

Требование прикладной системыВозможности оборудованияМоделирование стиляДоступные инструменты

Тяжелый ввод-вывод датчика и исполнительного элемента

Быстрые каналы ввода-вывода

 

Профилировщик Simulink Real-Time™

Тяжелое вычисление в реальном времени

  • Дополнительные многоядерные процессоры

  • Более быстрые многоядерные процессоры

  • Более быстрая скорость RAM

Режим Polling

  • Советник по вопросам производительности Simulink

  • Минимальная функция шага расчета

Эталонные модели с различными свойственными уровнями

Многоядерные процессоры

  • Блоки перехода уровня

  • Обменяйте детерминированную передачу данных на скорость передачи данных

  • Опции параллельного выполнения

  • Отображение задачи эталонной модели

Советник по вопросам производительности Simulink

Приложения реального времени соединяются сетью

  • Несколько целевых компьютеров

  • Быстрые сетевые переключатели

Несколько приложений реального времени, которые используют сетевые блоки для коммуникации

  • Профилировщик Simulink Real-Time

  • Сетевой анализатор

Регистрация данных

  • Большой быстрый жесткий диск

  • Большой псевдодиск

  • Выборочная маркировка сигналов для получения

  • Осциллографы файла

Инспектор Данных моделирования в буферизированном режиме

Низкоуровневое механическое устройство и электронное управление

FPGA

 

HDL Workflow Advisor HDL Coder™

Улучшание производительности с параллелизмом

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

Чтобы использовать параллелизм, сначала преобразуйте блоки на корневом уровне вашей модели в Системные блоки MATLAB или в модели, на которые ссылаются с блоками Model. Не используйте блоки Subsystem.

Simulink обеспечивает настройки параллелизма в панели Solver под Additional options:

  • Allow tasks to execute concurrently on target'on' (значение по умолчанию) или 'off'. Когда этим параметром является 'on' (значение по умолчанию), ядро выделяет задачи следующему доступному ядру процессора. Для большинства моделей используйте значение по умолчанию.

    Когда Allow tasks to execute concurrently on target является 'off', параметр, Treat each discrete rate as a separate task доступен. Когда Treat each discrete rate as a separate task является 'off', приложение реального времени выполняется в однозадачном режиме. В однозадачном режиме приложение не использует в своих интересах многожильный целевой компьютер.

    В будущем релизе однозадачный режим не будет работать на многоскоростные модели Simulink Real-Time.

  • Enable explicit model partitioning for concurrent behavior'on' или 'off' (значение по умолчанию). Этот параметр доступен, только если Allow tasks to execute concurrently on target является 'on', и вы нажимаете Configure tasks.

Этот сценарий показывает, как использовать свойственный шаг расчета модели и параллелизма, чтобы улучшить шаг расчета и пропускную способность модели. Как часто происходит во время прототипирования, исходная версия является односкоростной моделью. Используя Советника по вопросам Производительности Simulink и профилировщик, этот сценарий выполняет итерации через эти задачи:

  • Устранение перегрузок ЦП при выполнении в необходимой области значений шага расчета

  • Преобразование односкоростной модели к многоскоростному при помощи спецификации проекта

  • Улучшание многоскоростной производительности при помощи параллелизма с неявным разделением

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

  • Улучшание многоскоростной производительности при помощи параллелизма с явным разделением

На каждом этапе вы просматриваете выделение односкоростных и многоскоростных моделей среди ядер многожильного целевого компьютера при помощи функций профилировщика Simulink Real-Time.

Предпосылки

Этот сценарий принимает, что вы можете:

  1. Открытый Simulink Real-Time Explorer.

  2. Запустите целевой компьютер.

  3. Соедините Проводник с целевым компьютером.

  4. Создайте и загрузите приложение реального времени на целевой компьютер.

  5. Выполните приложение реального времени на целевом компьютере.

Для получения дополнительной информации см. Похожие темы.

Односкоростная модель

Вы реализовали основную функциональность как односкоростную модель. Чтобы ускорить настройку шага расчета, вы использовали переменную Ts, чтобы задать основной шаг расчета для постоянных блоков в ref1, и ref2 сослался на модели.

Вы отладили модель в шаге расчета Ts = 1.0e-3 s. Чтобы соответствовать ее требованию к производительности в реальном времени, эта модель должна достигнуть основного шага расчета в области значений 1.0e-4 ≤ Ts ≤ 3.0e-4 при работе целевого компьютера с четырьмя ядрами.

Протестируйте Против Требования.  Чтобы протестировать модель, установите ее основной шаг расчета на верхнюю часть необходимой области значений, 3.0e-4 s.

  1. Чтобы открыть эту модель, откройте эти файлы в последовательности:

    Чтобы просмотреть легенду шага расчета, щелкните правой кнопкой по Редактору Simulink и нажмите Sample Time Display> All. Для односкоростной модели цвет легенды шага расчета верхнего уровня применяется ко всем моделям, на которые ссылаются.

  2. Установите Ts = 3.0e-4.

  3. Создайте, загрузите и выполните приложение реального времени.

    Приложение реального времени перегружает центральный процессор. Целевой компьютер не имеет достаточного количества циклов ЦП, чтобы полностью выполнить модель в основном шаге расчета.

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

  1. Откройте меню Analysis> Performance Tools и запустите Советника по вопросам Производительности Simulink.

  2. Выберите действие Execute real-time execution.

  3. Выберите и осуществите базовые проверки кроме Real-Time Performance Baseline, включая Determine minimum sample time.

  4. Оцените самый маленький шаг расчета, которого эта модель может достигнуть о 2.2e-3.

  5. Чтобы избежать перегрузок ЦП, вызванных случайными изменениями, установите Ts на значение о % 5 выше, чем тот шаг расчета или Ts = 2.3e-3.

Определите Базовую линию.  Используя Советника по вопросам Производительности, установите базовую линию и оцените, возможно ли улучшение для этой версии модели.

  1. В Советнике по вопросам Производительности запустите Real-Time Performance Baseline.

    Выполнение следует и производит круговую диаграмму.

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

    Этот пример использует целевой компьютер с четырьмя ядрами, но приложение реального времени только использует четверть доступных циклов ЦП. BaseRate имеет низкое поле перед перегрузкой ЦП о 5%. Чтобы улучшать производительность, приложение реального времени должно использовать больше доступных ресурсов центрального процессора.

  2. Как лучшая практика, осуществите все проверки Real-Time кроме Simscape checks.

    Real-Time проверяет передачу. Эта версия модели не может быть улучшена далее.

Оцените Выделение Задачи.  Оцените выделение задач через эти 4 ядра.

  1. В Командном окне запустите профилировщик:

    tg = slrt;
    startProfiler(tg);
    start(tg);
    stop(tg);

    Функция stop также вызывает функцию stopProfiler.

  2. Получите данные профилировщика и отобразите результаты:

    profiler_data = getProfilerData(tg);
    plot(profiler_data);

    Чтобы пропустить инициализацию, запустите отображение в 3*Ts. Чтобы показать представительный пример параллелизма, используйте область значений 4*Ts.

    В отображении профилировщика подсвеченные числа в каждой панели задач дают номер задачи. 2 номера задачи показывает, сколько из доступного времени используется задачей BaseRate. Номер задачи 1 является прерыванием таймера, частью фоновых задач.

    Метки под панелями задач дают ядро процессора, на котором запускается каждая задача. Поскольку это - односкоростная модель, образцовые задачи, на которые ссылаются, запущенные один за другим на базовом 2 на том же уровне после каждого прерывания по таймеру.

    Панель выполнения при одном прерывании по таймеру почти заполняет время до следующего прерывания по таймеру. Если панель выполнения в одном прерывании накладывается с панелью выполнения в следующем, выполнении перегрузок ЦП и остановок целевого компьютера.

Многоскоростная модель: параллелизм на, неявное разделение

На этом этапе процесса оптимизации, текущем значении Ts = 2.3e-3, который является вне необходимой области значений 1.0e-4 ≤ Ts ≤ 3.0e-4.

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

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

  1. Задайте уровни для частей модели.

    Как лучшая практика, задайте уровни, которые являются множителями одной базовой ставки. В этой модели допустимые уровни являются множителями Ts: Ts, 2*Ts, 3*Ts и 4*Ts.

  2. В исходной модели Ref1/Out4 соединяется непосредственно с Ref2/In1. Поскольку Ref1/Out4 и Ref2/In1 имеют различные уровни, добавьте блок Rate Transition в Ref1.

  3. Сконфигурируйте блок Rate Transition:

    • Установите параметр Ensure data integrity during data transfer.

    • Очистите параметр Ensure deterministic data transfer (maximum delay).

      Передачи данных между инициированными задачами не могут потребовать детерминированной целостности данных.

  4. Чтобы открыть эту модель, откройте эти файлы в последовательности:

    Для этой модели цвета легенды шага расчета для верхнего уровня также применяются к Ref1 модель, на которую ссылаются. Отдельный набор цветов легенды шага расчета появляется для Ref2 модель, на которую ссылаются.

Сконфигурируйте Неявное Разделение.  Чтобы сконфигурировать неявное разделение, включите параллелизм уровня задачи и возьмите значения по умолчанию.

  1. Откройте диалоговое окно Configuration Parameters для модели верхнего уровня.

  2. В панели Solver, под Additional options, устанавливает параметр Allow tasks to execute concurrently on target.

  3. Нажмите Simulation> Update Diagram.

Протестируйте Против Требования.  Чтобы протестировать модель, установите ее основной шаг расчета на верхнюю часть необходимой области значений, 3.0e-4 s.

  1. Установите Ts = 3.0e-4.

  2. Создайте, загрузите и выполните приложение реального времени.

    Приложение реального времени перегружает центральный процессор. Целевой компьютер не имеет достаточного количества циклов ЦП, чтобы полностью выполнить модель в основном шаге расчета.

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

  1. Откройте меню Analysis> Performance Tools и запустите Советника по вопросам Производительности Simulink.

  2. Выберите действие Execute real-time execution.

  3. Выберите и осуществите базовые проверки кроме Real-Time Performance Baseline, включая Determine minimum sample time.

  4. Оцените самый маленький шаг расчета, которого эта модель может достигнуть о 4.2e-4.

  5. Чтобы избежать перегрузок ЦП, вызванных случайными изменениями, установите Ts на значение о % 5 выше, чем тот шаг расчета или Ts = 4.4e-4.

Определите Базовую линию.  Используя Советника по вопросам Производительности, установите базовую линию и оцените, возможно ли улучшение для этой версии модели.

  1. Чтобы взять базовую линию для оптимизации, запустите Real-Time Performance Baseline.

    Выполнение следует и производит круговую диаграмму.

    Использование ядра процессора улучшилось, но приложение реального времени только использует половину доступных циклов ЦП. Кроме того, SubRate2 имеет низкое поле перед перегрузкой ЦП о 5%. Для приложения реального времени нужно лучшее выравнивание нагрузки, чтобы улучшить основной шаг расчета и сделать его выполнение более вероятно, чтобы успешно выполниться.

  2. Как лучшая практика, осуществите все проверки Real-Time кроме Simscape checks.

    Real-Time проверяет передачу. Эта версия модели не может быть улучшена далее.

Оцените Выделение Задачи.  Оцените выделение задач через эти 4 ядра.

  1. В Командном окне запустите профилировщик:

    tg = slrt;
    startProfiler(tg);
    start(tg);
    stop(tg);  
  2. Получите данные профилировщика и отобразите результаты:

    profiler_data = getProfilerData(tg);
    plot(profiler_data);

    Чтобы пропустить инициализацию, запустите отображение в 3*Ts. Чтобы показать представительный пример параллелизма, используйте область значений 4*Ts.

    Панели выполнения для SubRate2, задачи с самым большим требованием центрального процессора, почти накладываются. Параллелизм находится в полной операции с метки деления времени 1.32e-3.

Пересмотренная многоскоростная модель: параллелизм на, явное разделение

На этом этапе процесса оптимизации, текущем значении Ts = 4.4e-4, который является все еще вне необходимой области значений 1.0e-4 ≤ Ts ≤ 3.0e-4.

Можно улучшать производительность приложения реального времени путем явной балансировки загрузки различных процессорных узлов в многожильном целевом компьютере. Этот процесс включает итеративно рефакторинг модели, движущихся задач между различными процессорными узлами и тестирования результата. Для получения дополнительной информации смотрите Концепции в Многоядерном программировании (Simulink).

Прежде, чем осуществить рефакторинг модель, отметьте, какие задачи системы зависят от вывода других задач. Зависимость по данным между задачами определяет их порядок выполнения во временном шаге. Два или больше раздела, содержащие зависимости по данным в цикле, создают цикл зависимости по данным, также известный как алгебраический цикл. Чтобы обнаружить эти циклы, в панели Diagnostics, устанавливают параметр Algebraic loop на error. Simulink идентифицирует алгебраические циклы во время выполнения, отображает сообщение об ошибке и подсвечивает фрагмент блок-схемы, которая включает цикл. Удалите эти циклы из своей модели. Для получения дополнительной информации смотрите Алгебраический цикл (Simulink).

Осуществите рефакторинг Модель.  В этом сценарии многоскоростная модель состоит из двух моделей, на которые ссылаются, каждый содержащий много сигналов обработать во время каждого шага расчета. С неявным разделением каждая образцовая задача, на которую ссылаются, присвоена ядру. Чтобы улучшить чередование среди ядер процессора, разделите каждую модель, на которую ссылаются пополам. Каждая половина содержит половину количества сигналов в исходной модели, на которую ссылаются. Эта настройка производит то же количество моделей, на которые ссылаются, как ядра с каждой моделью, на которую ссылаются, имеющей меньшие требования центрального процессора, чем оригинал.

  1. Разделите Ref1 сослался на модели в две модели, на которые ссылаются, Ref1A и Ref1B. Каждый блок имеет половину количества сигналов как Ref1.

  2. Разделите Ref2 сослался на модели в две модели, на которые ссылаются, Ref2A и Ref2B. Каждый блок имеет половину количества сигналов как Ref2.

  3. Чтобы открыть эту модель, откройте эти файлы в последовательности:

Сконфигурируйте Явное Разделение.  Чтобы сконфигурировать явное разделение, включите параллелизм уровня задачи и явным образом сконфигурируйте задачи для каждой модели, на которую ссылаются.

  1. Чтобы увеличить чередование центрального процессора задач в реальном времени, откройте диалоговое окно Configuration Parameters для модели верхнего уровня.

  2. В панели Solver, установленной параметр Allow tasks to execute concurrently on target.

  3. Под Configure Tasks, установленным параметр Enable explicit model partitioning for concurrent behavior.

  4. Под Concurrent Execution> Tasks and Mapping, откройте CPU> Periodic.

  5. Создайте периодические задачи для каждого уровня в каждой модели, на которую ссылаются. Назовите задачи Model1_R1, Model1_R2, и так далее.

    Вы используете периодический триггер, чтобы представлять периодические источники прерывания, такие как таймер. Периодичность триггера является или базовой ставкой задачи или периодом триггера. Смотрите Концепции в Многоядерном программировании (Simulink).

  6. Присвойте каждую периодическую задачу соответствующему уровню в каждой модели, на которую ссылаются.

    • Model1, Model3 — Четыре задачи уровней Ts, 2*Ts, 3*Ts и 4*Ts.

    • Model2, Model4 — Три задачи уровней Ts, 3*Ts и 4*Ts

    В конце этого процесса окно Concurrent Execution похоже на фигуру.

  7. Во вкладке Verification снимите флажок MAT-file logging.

  8. Нажмите Simulation> Update Diagram.

Для этой модели цвета легенды шага расчета для верхнего уровня также применяются к Ref1A, и Ref1B сослался на модели. Отдельный набор цветов легенды шага расчета появляется для Ref2A, и Ref2B сослался на модели.

Протестируйте Против Требования.  Чтобы протестировать модель, установите ее основной шаг расчета на верхнюю часть необходимой области значений, 3.0e-4 s.

  1. Установите Ts = 3.0e-4.

  2. Создайте, загрузите и выполните приложение реального времени.

    Выполнения приложения реального времени. Ваша модель удовлетворила основное требование шага расчета.

Определите Минимальный Шаг расчета.  Чтобы оценить, где эта версия модели падает в области значений шага расчета и сколько поля это имеет:

  1. Откройте меню Analysis> Performance Tools и запустите Советника по вопросам Производительности Simulink.

  2. Выберите действие Execute real-time execution.

  3. Выберите и осуществите базовые проверки кроме Real-Time Performance Baseline, включая Determine minimum sample time. Вы не можете взять базовую линию, пока вы не определили минимальный шаг расчета.

  4. Оцените самый маленький шаг расчета, которого эта модель может достигнуть о 2.6e-4.

  5. Чтобы избежать перегрузок ЦП, вызванных случайными изменениями, установите Ts на значение о % 5 выше, чем тот шаг расчета или Ts = 2.7e-4.

Определите Базовую линию.  Используя Советника по вопросам Производительности, установите базовую линию и оцените, возможно ли улучшение для этой версии модели.

  1. Чтобы взять базовую линию, запустите Real-Time Performance Baseline.

    Выполнение следует и производит вывод как фигура.

    В самом низком достижимом шаге расчета это приложение реального времени использует три четверти доступных циклов ЦП. Самое маленькое поле перед перегрузкой ЦП о 27%, который является улучшением по сравнению с полем 5% в предыдущей версии.

  2. Как лучшая практика, осуществите все проверки Real-Time кроме Simscape checks.

    Real-Time проверяет передачу. Эта версия модели не может быть улучшена далее.

Оцените Выделение Задачи.  Оцените выделение задач через эти 4 ядра.

  1. В Командном окне запустите профилировщик:

    tg = slrt;
    startProfiler(tg);
    start(tg);
    stop(tg);  
  2. Получите данные профилировщика и отобразите результаты:

    profiler_data = getProfilerData(tg);
    plot(profiler_data);

    Чтобы пропустить инициализацию, запустите отображение в 3*Ts. Чтобы показать представительный пример параллелизма, используйте область значений 4*Ts.

    Задачи Model*_R3 начинают работать на всех четырех процессорах, но задачи Model*_R1 вытесняют их. Издержки вытеснения ограничивают повышение производительности, которого можно достигнуть при помощи одного только параллелизма.

Дополнительная оптимизация

В образцовом сценарии изменение, которое произвело самое большое улучшение, шло от односкоростного до многоскоростного выполнения с отображением задачи по умолчанию (по улучшению 5X). Другая оптимизация произвела меньше улучшения (1.5X), но потребовалась, чтобы достигать необходимого шага расчета 1.0e-4 ≤ Ts ≤ 3.0e-4.

ОптимизацияДостижимый шаг расчета Ts
Односкоростной2.3e-3
Многоскоростное, неявное отображение задачи4.4e-4
Разделенное многоскоростное, явное отображение задачи2.7e-4

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

Изолированные переходы уровня

Если многоскоростная модель содержит много блоков перехода уровня, покрывающих несколько перекрывающихся уровней, рассмотрите извлечение каждого подобного перехода уровня в новую модель, на которую ссылаются. Можно затем установить параметр Enable explicit model partitioning for concurrent behavior и создать явное периодическое отображение задачи для новых моделей, на которые ссылаются. Если модель, на которую ссылаются, не содержит блок с шагом расчета тарифной ставки, добавьте отдельную задачу тарифной ставки в таблицу отображения для той модели.

Для этой модели, факторизуя переходы уровня обеспечивает только маленькое улучшение. Чтобы открыть ex_slrt_multirate_refactor, откройте эти файлы в последовательности:

Явное разделение односкоростной модели

Если модель является односкоростной моделью с высоким вычислительным требованием для каждой модели, на которую ссылаются, без зависимостей по данным между ними, рассмотрите установку параметра Enable explicit model partitioning for concurrent behavior. Можно затем создать явное периодическое отображение задачи для каждой из моделей, на которые ссылаются.

Улучшение, которого можно достигнуть путем явного отображения задач односкоростной модели, ограничивается количеством ядер. Например, если у вас есть четыре ядра и задачи, запущенные на одном уровне, большинство, которого можно достигнуть, является улучшением 4X использования ЦП.

Функциональная оптимизация выполнения

Чтобы найти дополнительную оптимизацию, считайте выполнение профилировщика Simulink Real-Time с функциональным журналированием времени выполнения включенным (см. Профилирование и Оптимизацию). Профилировщик предоставляет подробную, низкоуровневую информацию о задачах центрального процессора. Можно затем идентифицировать блоки узкого места и заменить или улучшить их.

Совместная обработка FPGA

В случаях, где вы не можете соответствовать своим системным требованиям другими методами оптимизации, рассмотрите встраивание решающих алгоритмов в FPGA при помощи HDL Workflow Advisor HDL Coder.

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

| | | | | | |

Похожие темы