Многоядерное программирование с Simulink

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

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

В секционированной системе отображение позволяет присвоить разделы элементам обработки во встроенной системе обработки. Используйте инструмент отображения Simulink, чтобы представлять и управлять деталями выполнения потоков, HDL-кодом на FPGA и работой, которую эти потоки или FPGA выполняют. При создании модели вам не нужно отслеживать разделы или передачу данных между ними, потому что инструмент делает эту работу. Кроме того, можно повторно использовать модель в нескольких архитектурах.

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

Базовый рабочий процесс

Чтобы развернуть модель к цели.

  1. Настройте свою модель для параллельного выполнения.

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

    Если вы хотите задать, как разбить модель, используйте явное разбиение. При явном разбиении необходимо задать целевую архитектуру, а затем явно разбить модель. Для получения дополнительной информации см. «Задание целевой архитектуры» и «Разбиение модели на разделы с помощью явного разбиения».

  2. Сгенерируйте код и разверните его на своей цели. Можно принять решение о развертывании на нескольких целевых объектах.

    • Для создания и развертывания на рабочем столе смотрите Сборка на рабочем столе.

    • Развертывание на целевых процессорах с помощью Embedded Coder®, см. Развертывание (Embedded Coder).

    • Чтобы создать и развернуть на цели в реальном времени с помощью Simulink Real-Time™, смотрите Автономную работу (Simulink Real-Time).

    • Развертывание на FPGA с использованием HDL- Coder™ смотрите в разделе Развертывание (HDL Coder).

      Примечание

      Развертывание в FPGA поддерживается только для явно секционированных моделей.

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

    ПродуктИнформация
    Целевой компьютер на рабочем столеПрофилирование и оценка явно секционированных моделей на рабочем столе
    Simulink Real-Time
    Embedded Coder Профилирование выполнения кода (Embedded Coder)
    HDL Coder Оптимизация скорости и площади ( HDL Coder)

Как Simulink помогает вам преодолеть проблемы в многоядерном программировании

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

Мобильность

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

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

Эффективность развертывания

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

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

Циклическая зависимость данных

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

В некоторых случаях алгебраический цикл является искусственным. Для примера можно иметь искусственный алгебраический цикл из-за разбиения на блоки Модели. Алгебраический цикл с участием блоков Model является искусственным, если удаление использования разбиения Модели устраняет цикл. Можно минимизировать вхождение искусственных циклов. В Параметр конфигурации диалоговых окнах для моделей, участвующих в алгебраическом цикле, выберите Model Referencing > Minimize algebraic loop occurrences.

Кроме того, если модель сконфигурирована для цели Generic Real-Time (grt.tlc) или Встроенный объект реального времени (ert.tlc) в диалоговом окне Параметры конфигурации снимите флажок Single output/update function.

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

Следующие примеры показывают, как реализовать различные типы параллелизма в Simulink. Эти примеры содержат модели, которые разделены и сопоставлены с простой архитектурой с одним центральным процессором и одним FPGA.

Похожие примеры

Подробнее о

Для просмотра документации необходимо авторизоваться на сайте