Этот пример показывает, как ускорить выполнение моделей с помощью области потока данных в Simulink. Мы используем цифровое конвертер и цифровой вниз блоки конвертера, чтобы создать сервисный передатчик радио семейства и получатель.
Область выполнения потока данных позволяет вам использовать несколько ядер в симуляции в вычислительном отношении интенсивных систем обработки сигналов.
Этот пример показывает, как задать поток данных как область выполнения подсистемы, улучшать производительность симуляции модели и сгенерировать многожильный код.
Этот пример использует блоки Цифрового повышающего преобразователя (DUC) и Цифрового понижающего преобразователя (DDC), чтобы создать передатчик Сервиса радио семейства (FRS) и получатель. Блок Digital Up-Converter (DUC) преобразовывает комплексный цифровой основополосный сигнал в действительный сигнал полосы пропускания. Блок Digital Down-Converter (DDC) преобразовывает оцифрованный действительный сигнал назад в основополосный комплексный сигнал. Откройте familyRadioServiceExample модель.
Моделируйте модель и измерьте время выполнения. Время выполнения измеряется с помощью вывода sim команды, которая возвращает время выполнения симуляции модели. Чтобы измерить время, потраченное, в основном, для подсистемы Потока данных, прокомментируйте Спектр блоки Анализатора и блок Audio Device Writer.
Simulation execution time for single-threaded model = 4.20s
В Simulink вы задаете поток данных как область выполнения для подсистемы путем установки Доменного параметра на Поток данных с помощью Property Inspector. Можно просмотреть Property Inspector для подсистемы, сначала путем выбора подсистемы и затем выбора View> Property Inspector. В Property Inspector можно установить область на поток данных путем выбора спецификации области Set и затем выбора "Dataflow" для установки "Domain". Можно также использовать блок Subsystem Потока данных от библиотеки Dataflow DSP System Toolbox, чтобы получить подсистему, которая предварительно сконфигурирована с областью выполнения потока данных.
Подсистема Потока данных автоматически делит блоки для многожильного выполнения.
Области потока данных автоматически делят вашу модель и моделируют систему с помощью нескольких потоков для лучшей производительности симуляции. Можно использовать Ассистент Симуляции Потока данных, чтобы анализировать Подсистему Потока данных и далее улучшать производительность симуляции. Можно открыть ассистент путем нажатия на ассистент Потока данных кнопка ниже Автоматического параметра вычисления формата кадра в Property Inspector.
В Ассистенте Симуляции Потока данных нажмите кнопку Analyze, чтобы запустить анализ области потока данных для производительности симуляции. Если анализ закончен, Ассистент Симуляции Потока данных показывает, сколько потоков подсистема потока данных будет использовать во время симуляции.
После анализа модели ассистент показывает один поток, потому что зависимость по данным между блоками в модели препятствует тому, чтобы блоки были выполнены одновременно. Путем конвейеризации информационно-зависимых блоков Подсистема Потока данных может увеличить параллелизм для более высокой пропускной способности. Ассистент Симуляции потока данных показывает рекомендуемое количество конвейерных задержек как Предложенная Задержка. Предложенное значение задержки вычисляется, чтобы дать лучшую производительность.
Следующая схема показывает Ассистенту Симуляции Потока данных, где Подсистема Потока данных в настоящее время задает значение задержки 0, и предложенная задержка для системы равняется 3.
Нажмите кнопку Accept рядом с Предложенной Задержкой в Ассистенте Симуляции Потока данных, чтобы использовать рекомендуемую задержку для Подсистемы Потока данных. Это значение может также быть введено непосредственно в Property Inspector для параметра "Задержки". Simulink показывает значение параметров задержки с помощью тегов в выходных портах подсистемы потока данных.
Ассистент Симуляции потока данных теперь показывает количество потоков как 2 подразумевать, что блоки в подсистеме потока данных моделируют в параллели с помощью 2 потоков.
Когда задержка увеличена в области выполнения потока данных, чтобы повредить зависимости по данным между блоками и создать параллелизм, та задержка должна составляться в других частях модели. Например, сигналы, которые сравнены или объединены с сигналами в выходных портах Подсистемы Потока данных, должны быть задержаны, чтобы выровняться вовремя с сигналами в выходных портах Подсистемы Потока данных. В этом примере звуковой сигнал от исходного блока, который переходит к Средству записи Аудио устройства, должен быть задержан, чтобы выровняться с другими сигналами. Чтобы компенсировать задержку, заданную на подсистеме потока данных, используйте блок задержки, чтобы задержать этот сигнал 2 кадрами. Для этого сигнала длина кадра 1000. Значение задержки 2 000 установлено в блоке задержки, чтобы выровнять сигнал из источника и сигнал, обработанный через Подсистему Потока данных.
Моделируйте модель и время выполнения модели меры. При измерении времени, потраченного для симуляции модели, прокомментируйте Спектр блоки Анализатора и блоки Средства записи Аудио устройства, чтобы измерить время, потраченное, в основном, для Подсистемы Потока данных. Время выполнения измеряется с помощью sim команды, которая возвращает время выполнения симуляции модели. Мы можем измерить сумму ускорения, полученного путем деления времени выполнения, потраченного моделью с помощью нескольких потоков со временем выполнения, потраченным исходной моделью. Этот номер вычислен и показан ниже.
Эти числа и анализ были опубликованы на рабочем компьютере Windows с Intel® Xeon® CPU E5-1650 v3 3.5 процессора GHz 6 Cores 12 Threads.
Simulation execution time for multithreaded model = 2.87s Actual speedup with dataflow: 1.5x
Генерация кода требует Simulink Coder™ или лицензии Embedded Coder®. Нажмите Ctrl+B, чтобы создать модель и сгенерировать одножильный код для вашей настольной цели. Если ваша настольная машина является Windows или Linux, можно сгенерировать многожильный код для модели. Чтобы включить многожильную генерацию кода для модели, необходимо выбрать задачи Allow выполниться одновременно на целевом параметре в панели Решателя под деталями Решателя. Выбор этого параметра позволяет:
Каждый уровень в модели, чтобы выполниться как независимая параллельная задача на целевом процессоре
Подсистема потока данных, чтобы сгенерировать дополнительные параллельные задачи путем автоматического разделения блоков
В сгенерированном коде можно наблюдать сгенерированные функции для каждой параллельной задачи, созданной областью потока данных и реализованной как раздел OpenMP.
Этот пример показывает, как задать поток данных как область выполнения в модели, чтобы разработать в вычислительном отношении интенсивные системы обработки сигналов, улучшайте производительность симуляции модели и сгенерируйте многожильный код.
Следующие функции помощника используются в этом примере.