Многожильная генерация кода для области потока данных

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

Прежде чем вы начнете

Чтобы запустить этот пример, необходимо было установить следующее программное и аппаратное обеспечение и настроить:

  • Пакет поддержки Embedded Coder для платформы Xilinx Zynq

  • Плата Zynq

Для получения дополнительной информации при установке пакета поддержки и подготовке оборудование Zynq, относитесь, чтобы Установить Поддержку Платформы Xilinx Zynq (Пакет Поддержки Embedded Coder для Платформы Xilinx Zynq).

Введение

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

В этом примере показано, как задать поток данных как область выполнения подсистемы и улучшать производительность путем генерации многожильного кода. Пример использует процессор в цикле (PIL) симуляция для развертывания приложения на центральном процессоре ARM в оборудовании Zynq и время выполнения, профилируя для того, чтобы измерить уровень.

Система шумоподавления

Модель в этом примере использует два Переменных БИХ-блока фильтра Пропускной способности, сконфигурированные в качестве lowpass и фильтра высоких частот соответственно. Фильтры соединяются последовательно в Подсистеме Потока данных, чтобы коллективно сформировать полосовую шумовую систему фильтрации. Исходный сигнал является случайным шумом. Откройте dataflowzynq модель.

Сконфигурируйте аппаратные настройки

Сконфигурируйте модель, чтобы сгенерировать код для находящегося в Zynq оборудования. Этот пример использует Оценочный комплект Zynq-7000 SoC ZC702 и выполняет процессор в цикле (PIL) симуляция на целевом компьютере.

Сконфигурируйте PIL симуляцию и время выполнения, профилируя

Сконфигурируйте модель, чтобы сгенерировать блок PIL, когда код будет сгенерирован для подсистемы. Это позволяет вам измерять время, потраченное для блока Subsystem Потока данных на целевом компьютере. Для получения дополнительной информации при конфигурировании PIL симуляции с блоками PIL, смотрите Симуляцию с блоками Subsystem (Embedded Coder).

Позвольте профилировать функциональных времен выполнения для подсистем. Для получения дополнительной информации при профилировании с PIL, смотрите, что Выполнение кода Профилирует с SIL и PIL (Embedded Coder).

Сгенерируйте код и симулируйте на цели

Создайте блок Subsystem Потока данных. Этот шаг генерирует блок PIL из Подсистемы Потока данных.

Замените блок Subsystem Потока данных в исходной модели со сгенерированным блоком PIL.

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

Average execution time of generated code for single-core = 5.6 ms

Задайте область выполнения потока данных для подсистемы

Области потока данных автоматически делят вашу модель, и генерирует код с несколькими потоками для многожильных целей. В Simulink вы задаете поток данных как область выполнения для подсистемы путем установки Доменного параметра на Поток данных с помощью Property Inspector. Можно просмотреть Property Inspector для подсистемы, сначала путем выбора подсистемы и затем выбора View> Property Inspector. В Property Inspector можно установить область на поток данных путем выбора спецификации области Set и затем выбора "Dataflow" для установки Domain. Можно также использовать блок Subsystem Потока данных от библиотеки Dataflow DSP System Toolbox, чтобы получить подсистему, которая предварительно сконфигурирована с областью выполнения потока данных.

Чтобы увеличить пропускную способность системы, может быть выгодно увеличить задержку системы. Задайте значение Задержки во вкладке Execution Property Inspector. Устанавливание значения Задержки 1 добавит конвейерную задержку, чтобы повредить зависимость между блоками фильтра и позволить области потока данных достигнуть параллелизма.

Многожильная генерация кода подсистемы потока данных

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

Восстановите блок Subsystem Потока данных, чтобы сгенерировать многожильную версию блока PIL.

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

Блок Subsystem Потока данных генерирует две функции потока, Dataflow_ThreadFcn0 и Dataflow_ThreadFcn1.

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

Многожильная эффективность выполнения

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

Average execution time of generated code for multicore = 3.9 ms

Actual speedup with dataflow: 1.44x

Copyright 2020 The MathWorks, Inc.