exponenta event banner

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

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

Введение

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

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

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

В этом примере используются блоки цифрового повышающего преобразователя (DUC) и цифрового понижающего преобразователя (DDC) для создания передатчика и приемника Family Radio Service (FRS). Блок цифрового повышающего преобразователя (DUC) преобразует сложный цифровой сигнал основной полосы в реальный сигнал полосы пропускания. Блок цифрового понижающего преобразователя (DDC) преобразует оцифрованный реальный сигнал обратно в комплексный сигнал основной полосы частот. Откройте модель familyRadioServiceExample.

Моделирование модели и измерение времени выполнения. Время выполнения измеряется с помощью выходных данных sim-команды, которая возвращает время выполнения моделирования модели. Чтобы измерить время, затрачиваемое главным образом на подсистему потока данных, прокомментируйте блоки анализатора спектра и блока записи аудиоустройств.

Simulation execution time for single-threaded model = 3.48s

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

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

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

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

Домены потока данных автоматически секционируют модель и моделируют систему с использованием нескольких потоков для повышения производительности моделирования. Помощник по моделированию потока данных можно использовать для анализа подсистемы потока данных и дальнейшего повышения производительности моделирования. Можно открыть ассистент, нажав кнопку «Ассистент потока данных» под параметром «Автоматический расчет размера кадра» в Инспекторе свойств.

Помощник по моделированию потока данных предлагает изменить параметры модели для обеспечения оптимальной производительности моделирования. Чтобы принять предложенные параметры модели, рядом с пунктом Предлагаемые параметры модели для производительности моделирования щелкните Принять все (Accept all). Можно также развернуть раздел, чтобы изменить настройки по отдельности. В ассистенте моделирования потока данных нажмите кнопку «Анализ», чтобы начать анализ области потока данных для обеспечения производительности моделирования. По завершении анализа ассистент моделирования потока данных показывает, сколько потоков подсистема потока данных будет использовать во время моделирования.

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

На следующей схеме показан ассистент моделирования потока данных, в котором подсистема потока данных в настоящее время указывает значение задержки, равное 0, и предложенная задержка для системы равна 3.

Нажмите кнопку «Принять» рядом с пунктом «Рекомендуемая задержка» в ассистенте моделирования потока данных, чтобы использовать рекомендуемую задержку для подсистемы потока данных. Это значение также можно ввести непосредственно в инспекторе свойств для параметра «Задержка». Simulink показывает значение параметра задержки с помощью$Z^{-1}$ тегов на выходных портах подсистемы потока данных.

Помощник по моделированию потока данных теперь показывает количество потоков как 2, что означает, что блоки внутри подсистемы потока данных моделируются параллельно с использованием 2 потоков.

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

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

Производительность моделирования потока данных

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

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

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

Создание кода

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

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

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

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

Резюме

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

Приложение

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