exponenta event banner

Генерация многоядерного кода для домена потока данных

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

Перед началом работы

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

  • Пакет поддержки встроенного кодера для платформы Xilinx Zynq

  • Плата Zynq

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

Введение

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

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

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

Модель в этом примере использует два блока фильтра IIR переменной полосы пропускания, сконфигурированных как фильтр нижних частот и фильтр верхних частот соответственно. Фильтры соединены последовательно в подсистеме потока данных для формирования системы фильтрации полосового шума. Сигнал источника представляет собой случайный шум. Открыть модель dataflowzynq.

Настройка параметров оборудования

Настройте модель для создания кода для аппаратных средств на основе Zynq. В этом примере используется оценочный комплект Zynq-7000 SoC ZC702 и выполняется моделирование процессора в цикле (PIL) на целевом оборудовании.

Конфигурирование моделирования PIL и профилирования времени выполнения

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

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

Создание кода и моделирование на цели

Создайте блок подсистемы потока данных. На этом шаге генерируется блок PIL из подсистемы потока данных.

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

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

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

Укажите домен выполнения потока данных для подсистемы

Домены потока данных автоматически секционируют модель и генерируют код с несколькими потоками для многоядерных целей. В Simulink в качестве области выполнения для подсистемы можно указать поток данных, установив для параметра Domain значение Dataflow с помощью инспектора свойств. Можно просмотреть инспектор свойств подсистемы, сначала выбрав подсистему, а затем выбрав «Вид» > «Инспектор свойств». В Инспекторе свойств можно задать для домена значение «Поток данных», выбрав «Задать спецификацию домена», а затем «Поток данных» для параметра «Домен». Можно также использовать блок «Подсистема потока данных» из библиотеки потоков данных панели инструментов DSP System, чтобы получить подсистему, предварительно настроенную с доменом выполнения потока данных.

Для увеличения пропускной способности системы может быть выгодно увеличить задержку системы. Укажите значение задержки на вкладке «Выполнение» инспектора свойств. Установка значения Latency, равного 1, добавит задержку конвейера для разрыва зависимости между блоками фильтров и позволит домену потока данных достичь параллелизма.

Генерация многоядерного кода подсистемы потока данных

Чтобы включить генерацию многоядерного кода, необходимо выбрать параметр Разрешить одновременное выполнение задач в целевом параметре на панели Решатель (Solver) окна Параметры конфигурации (Configuration Parameters) в разделе Сведения о решателе (Solver details).

Перестроить блок подсистемы потока данных для генерации многоядерной версии блока PIL.

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

Блок подсистемы потока данных генерирует две функции потока: 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.