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

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

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

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

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

Основной рабочий процесс

Развернуть вашу модель в цель.

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

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

    Если вы хотите задать, как разделить вашу модель, используйте явное разделение. С явным разделением необходимо задать целевую архитектуру, и затем явным образом разделить модель. Для получения дополнительной информации смотрите, Задают Целевую архитектуру и Делят Вашу Модель Используя Явное Разделение.

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

    • Чтобы создать и развернуться на настольной цели, смотрите, Основываются на Рабочем столе.

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

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

    • Чтобы развернуть на FPGAs использование HDL Coder™, смотрите Развертывание (HDL Coder).

      Примечание

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

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

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

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

Мобильность

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

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

КПД развертывания

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

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

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

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

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

Кроме того, если модель сконфигурирована для Типовой цели В реальном времени (grt.tlc) или Встроенная цель В реальном времени (ert.tlc) в диалоговом окне Configuration Parameters снимите флажок Single output/update function.

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

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

Связанные примеры

Больше о