В этом примере показано, как ускорить выполнение моделей с помощью области потока данных в 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.
В этом примере показано, как задать поток данных как область выполнения в модели, чтобы спроектировать в вычислительном отношении интенсивные системы обработки сигналов, улучшайте производительность симуляции модели и сгенерируйте многожильный код.
Следующие функции помощника используются в этом примере.