В этом примере показано, как развернуть приложение шумоподавления на многоядерном целевом компьютере с помощью Потока данных
Чтобы запустить этот пример, необходимо было установить следующее программное и аппаратное обеспечение и настроить:
Пакет поддержки Embedded Coder для платформы Xilinx Zynq
Плата Zynq
Для получения дополнительной информации при установке пакета поддержки и подготовке оборудование Zynq, относитесь, чтобы Установить Поддержку Платформы Xilinx Zynq (Пакет Поддержки Embedded Coder для Платформы Xilinx Zynq).
Область выполнения потока данных позволяет вам использовать несколько ядер на целевом компьютере для в вычислительном отношении интенсивных систем обработки сигналов.
В этом примере показано, как задать поток данных как область выполнения подсистемы и улучшать производительность путем генерации многожильного кода. Пример использует процессор в цикле (PIL) симуляция для развертывания приложения на центральном процессоре ARM в оборудовании Zynq и время выполнения, профилируя для того, чтобы измерить уровень.
Модель в этом примере использует два Переменных БИХ-блока фильтра Пропускной способности, сконфигурированные в качестве lowpass и фильтра высоких частот соответственно. Фильтры соединяются последовательно в Подсистеме Потока данных, чтобы коллективно сформировать полосовую шумовую систему фильтрации. Исходный сигнал является случайным шумом. Откройте dataflowzynq модель.
Сконфигурируйте модель, чтобы сгенерировать код для находящегося в Zynq оборудования. Этот пример использует Оценочный комплект Zynq-7000 SoC ZC702 и выполняет процессор в цикле (PIL) симуляция на целевом компьютере.
Сконфигурируйте модель, чтобы сгенерировать блок PIL, когда код будет сгенерирован для подсистемы. Это позволяет вам измерять время, потраченное для блока Subsystem Потока данных на целевом компьютере. Для получения дополнительной информации при конфигурировании PIL симуляции с блоками PIL, смотрите Симуляцию с Блоками Из Подсистем (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.