Многоядерное выполнение с использованием области Dataflow

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

Введение

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

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

Семейная система радиосвязи

Этот пример использует блоки Digital Up-Converter (DUC) и Digital Down-Converter (DDC), чтобы создать передатчик и приемник Family Radio Service (FRS). Блок Digital Up-Converter (DUC) преобразует комплексный цифровой сгенерированный модулированный сигнал в реальный сигнал полосы пропускания. Блок Digital Down-Converter (DDC) преобразует оцифрованный действительный сигнал назад в комплексный сигнал основной полосы частот. Откройте модель familyRadioServiceExample.

Симулируйте модель и измерьте время выполнения. Время выполнения измеряется с помощью выхода команды sim, которая возвращает время выполнения симуляции модели. Чтобы измерить время, затраченное в основном на подсистему Dataflow, закомментируйте блоки Spectrum Analyzer и блок Аудио Устройство Writer.

Simulation execution time for single-threaded model = 3.48s

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

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

Подсистема Dataflow автоматически разделяет блоки для многоядерного выполнения.

Многоядерная симуляция области Dataflow

Области Dataflow автоматически разделяют вашу модель и моделируют систему с помощью нескольких потоков для повышения эффективности симуляции. Можно использовать Dataflow Simulation Assistant, чтобы проанализировать Подсистему Dataflow и дополнительно улучшить эффективность симуляции. Можно открыть ассистента, нажав на кнопку Dataflow assistant под параметром Автоматическое вычисление формата кадра в Property Inspector.

Помощник по симуляции Dataflow предлагает изменение настроек модели для оптимальной эффективности симуляции. Чтобы принять предложенные настройки модели, рядом с параметрами Предлагаемой модели для эффективности симуляции, нажмите Принять все. Также можно развернуть раздел, чтобы изменить настройки по отдельности. В Dataflow Simulation Assistant нажмите кнопку Analyze, чтобы начать анализ области dataflow для эффективности симуляции. После завершения анализа помощник по симуляции Dataflow показывает, сколько потоков будет использовать подсистема dataflow во время симуляции.

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

Следующая схема показывает Dataflow Simulation Assistant, где Подсистема Dataflow в настоящее время задает значение задержки 0, и предложенная задержка для системы равна 3.

Чтобы использовать рекомендуемую задержку для подсистемы Dataflow, нажмите кнопку «Принять» рядом с полем «Предлагаемая задержка» в ассистенте симуляции Dataflow. Это значение можно также ввести непосредственно в Property Inspector для параметра «Latency». Simulink показывает значение параметров задержки, используя$Z^{-1}$ теги в выходных портах подсистемы dataflow.

Dataflow Simulation Assistant теперь показывает количество потоков как 2, что означает, что блоки внутри подсистемы dataflow моделируются параллельно с использованием 2 потоков.

Компенсация задержек

Когда задержка увеличивается в области выполнения dataflow, чтобы разбить зависимости данных между блоками и создать параллелизм, эта задержка должна учитываться в других частях модели. Для примера сигналы, которые сравниваются или объединяются с сигналами в портах выхода Подсистемы Dataflow, должны быть задержаны, чтобы выровняться во времени с сигналами в портах выхода Подсистемы Dataflow. В этом примере аудиосигнал от исходного блока, который поступает в Аудио устройство Средства записи, должен быть задержан, чтобы выровняться с другими сигналами. Чтобы компенсировать задержку, заданную в подсистеме dataflow, используйте блок задержки, чтобы задержать этот сигнал на 2 системы координат. Для этого сигнала длина системы координат составляет 1000. Значение задержки 2000 устанавливается в блоке задержки для выравнивания сигнала от источника и сигнала, обработанного через Подсистему Dataflow.

Эффективность симуляции Dataflow

Симулируйте модель и измерьте время выполнения модели. При измерении времени, затраченного на симуляцию модели, закомментируйте блоки Spectrum Analyzer и блоки Аудио Устройство Writer, чтобы измерить время, затраченное, в основном, на Подсистему Dataflow. Время выполнения измеряется с помощью команды sim, которая возвращает время выполнения симуляции модели. Мы можем измерить количество скорости, полученной путем деления времени выполнения, занятого моделью, с помощью нескольких потоков со временем выполнения, принятым исходной моделью. Это число вычисляется и показано ниже.

Эти цифры и анализ были опубликованы на рабочем компьютере Windows с процессором Intel ® Xeon ® CPU W-2133 @ 3,6 ГГц 6 ядер 12 потоков.

Simulation execution time for multithreaded model = 2.21s
Actual speedup with dataflow: 1.6x

Генерация кода

Для генерации кода требуется Simulink Coder™ или лицензия Embedded Coder ®. Нажмите Ctrl + B, чтобы создать модель и сгенерировать одноядерный код для рабочего стола. Если ваша настольная машина является Windows или Linux, можно сгенерировать многоядерный код для модели. Чтобы включить генерацию многоядерного кода для модели, необходимо выбрать Разрешить задачи для выполнения одновременно с целевым параметром на панели Решатель в разделе Детали решателя. Выбор этого параметра позволяет:

  • Каждая скорость в модели для выполнения как независимой параллельной задачи на целевом процессоре

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

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

Сводные данные

Этот пример показывает, как задать dataflow как область выполнения в модели, чтобы проектировать вычислительно-интенсивные системы обработки сигналов, улучшить эффективность симуляции модели и сгенерировать многоядерный код.

Приложение

В этом примере используются следующие вспомогательные функции.