Этот пример показывает, как развернуть приложение шумоподавления на многоядерном целевом компьютере с помощью потока данных.
Область выполнения потока данных позволяет вам использовать несколько ядер на целевом компьютере для в вычислительном отношении интенсивных систем обработки сигналов.
Этот пример показывает, как задать поток данных как область выполнения подсистемы и улучшать производительность путем генерации многожильного кода. Пример использует процессор в цикле (PIL) симуляция для развертывания приложения на центральном процессоре ARM в оборудовании Zynq и время выполнения, профилируя для того, чтобы измерить уровень.
Модель в этом примере использует различные фильтры biquad в подсистеме, соединенной последовательно, чтобы уменьшать шум на сигнале. Исходный сигнал является синусоидой с добавленным случайным шумом. Откройте dspdataflowzynq модель.
Сконфигурируйте аппаратные настройки
Сконфигурируйте модель, чтобы сгенерировать код для находящегося в Zynq оборудования. Этот пример использует Оценочный комплект Zynq-7000 SoC ZC702 и выполняет процессор в цикле (PIL) симуляция на целевом компьютере.
Для получения дополнительной информации при подготовке оборудования Zynq, смотрите Начало работы С Оборудованием Xilinq Zynq
Сконфигурируйте PIL симуляцию и время выполнения, профилируя
Сконфигурируйте модель, чтобы сгенерировать блок PIL, когда код будет сгенерирован для подсистемы. Это позволяет вам измерять время, потраченное для блока Subsystem Потока данных на целевом компьютере. Для получения дополнительной информации при конфигурировании PIL симуляции с блоками PIL, смотрите Симуляцию с Блоками От Подсистем.
Позвольте профилировать функциональных времен выполнения для подсистем. Для получения дополнительной информации при профилировании с PIL, смотрите, что Выполнение кода Профилирует с SIL и PIL.
Сгенерируйте код и моделируйте на цели
Создайте блок Subsystem Потока данных. Этот шаг генерирует блок PIL от Подсистемы Потока данных.
Замените блок Subsystem Потока данных в исходной модели со сгенерированным блоком PIL.
Моделируйте модель и среднее время выполнения меры подсистемы с помощью профильных результатов, полученных в конце PIL симуляции. Среднее время выполнения может быть получено путем деления общего времени выполнения, потраченного подсистемой количеством вызовов подсистемы. Этот номер вычислен и показан ниже.
Average execution time of generated code for single-core = 13.2 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 = 8.5 ms
Actual speedup with dataflow: 1.55x
Copyright 2018 The MathWorks, Inc.