exponenta event banner

Оценка количества операторов для алгоритма MATLAB

В этом примере показано, как оценить количество арифметических операторов в алгоритме, записанном в MATLAB. Проанализируйте алгоритм radix 2 FFT и создайте отчеты, показывающие использование оператора.

Алгоритм FFT Radix 2 и средства тестирования

Анализ количества арифметических операторов в soc_analyze_FFT_radix2 функция. Вычислите количество арифметических операторов, используемых при выполнении функции. Испытательный стенд soc_analyze_fft_tb обеспечивает стимул и проверяет реализацию алгоритма radix 2 FFT (soc_analyze_FFT_radix2) против функции MATLAB FFT (fft) .

Откройте окно soc_analyze_FFT_tb.m файл в редакторе MATLAB для изучения структуры тестовых средств.

open soc_analyze_FFT_tb

Испытательный стенд генерирует тестовый сигнал с двумя синусоидами, одна с частотой 50 Гц с амплитудой 0,7, а другая с частотой 120 Гц с амплитудой 1. Сигнал имеет частоту дискретизации 1 кГц с аддитивным случайным шумом. Testbench вычисляет выходной сигнал БПФ для вышеупомянутого тестового сигнала для длины БПФ, указанной как FFTLen аргумент. Testbench сравнивает вывод функции с выходом функции MATLAB FFT (fft) и строит графики результатов.

Создание отчетов о количестве операторов для 1024 точек Радиус 2 БПФ

Чтобы оценить количество операторов для радиуса 2 FFT, используйте socFunctionAnalyzer и обеспечить функцию testbench soc_analyze_FFT_tb в качестве аргумента. По умолчанию функция генерирует отчеты для всех функций, вызываемых из функции testbench, и перечисляет все используемые операторы.

Создание отчета только для алгоритма (soc_analyze_FFT_radix2), а не для тестирования, используйте 'RestrictFunction' аргумент пары имя-значение со значением 'soc_analyze_FFT_radix2.m'. Используйте 'RestrictOperator' аргумент пары «имя-значение» для фильтрации отчета и отображения только трех операторов путем установки для него значения {'ADD','MINUS','MUL'}. Установите 'OutputFolder' аргумент пары имя-значение, чтобы указать расположение папки для созданных отчетов.

Эта команда используется для генерации отчетов для моделирования алгоритма FFT с радиусом 1024 точки и радиусом 2. Команда моделирует конструкцию при подсчете операторов и создании отчета.

socFunctionAnalyzer('soc_analyze_FFT_tb.m','FunctionInputs',1024, ...
    'Folder','report_1024','IncludeFunction','soc_analyze_FFT_radix2.m', ...
    'IncludeOperator',{'ADD','MINUS','MUL'});
Generating operators analysis report for /tmp/BR2021ad_1584584_202060/publish_examples0/tpe5d849aa/ex65369380/soc_analyze_FFT_tb.m ...
Saving report files in /tmp/BR2021ad_1584584_202060/publish_examples0/tpe5d849aa/ex65369380/report_1024.
Operator estimate: <a href="matlab: socAlgorithmAnalyzerReport('/tmp/BR2021ad_1584584_202060/publish_examples0/tpe5d849aa/ex65369380/report_1024/soc_analyze_FFT_tb.mat')">Open report viewer</a> 
Done.

Проверьте алгоритм radix 2 FFT и эталонную функцию MATLAB FFT (fft) приводит к приведенному выше графику моделирования. Убедитесь, что эти результаты очень похожи, и разница между этими результатами составляет порядка 10e-12.

Анализ отчета об оценке оператора

Откройте отчет, щелкнув ссылку Открыть средство просмотра отчетов на консоли MATLAB. Кроме того, можно использовать socAlgorithmAnalyzerReport функция. Отчет содержит два представления. Первое представление представляет собой представление оператора, которое представляет данные таким образом, что каждая строка соответствует оператору. Для использования этого представления щелкните «Представление оператора» на панели инструментов отчета. Второе представление представляет собой представление алгоритма, где каждая строка соответствует функции MATLAB. Чтобы использовать это представление, щелкните Представление алгоритма на панели инструментов отчета.

По умолчанию отчет открывается с представлением оператора. Отчет открывает статистическое представление каждого оператора и типа данных. Например, для 1024 точек радиусом 2 БПФ имеется в общей сложности 91 649 добавлений [ADD (+)] типа данныхdouble и 67 094 вычитания [MINUS (-)] типа данныхint32. Чтобы получить подробный отчет для каждого оператора, разверните этот оператор. Отчет показывает количество операторов, используемое в различных функциях. Например, функция бабочки l_butterfly содержит четыре double дополнения, которые выполнялись 5120 раз каждый. Выполните трассировку оператора, щелкнув по одной из ссылок в последнем столбце отчета, чтобы выделить местоположение оператора в soc_analyze_FFT_radix2 файл.

Переключитесь в представление алгоритма, нажав кнопку Algorithm View. Разверните отчет и просмотрите количество операторов для всех функций в файле. soc_analyze_FFT_radix2.m. Счетчики каждого оператора с их типами данных можно просмотреть, развернув другой уровень. Для навигации по отчету можно также использовать кнопки «Развернуть все» и «Свернуть все» на панели инструментов отчета. Для трассировки определенного оператора по коду MATLAB щелкните соответствующую ссылку в столбце Link to source в отчете.

Создание отчетов для 512 точек Радиус 2 БПФ

Чтобы наблюдать корреляцию между количеством операций и количеством точек в БПФ, сравните предыдущий отчет с отчетом для 512 точек радиусом 2 БПФ. Создание отчетов для 512 точек радиусом 2 БПФ путем передачи значения 512 в 'FunctionInputs' аргумент пары имя-значение, как в этой команде.

 socFunctionAnalyzer('soc_analyze_FFT_tb.m','FunctionInputs',512, ...
    'Folder','report_512','IncludeFunction','soc_analyze_FFT_radix2.m', ...
    'IncludeOperator',{'ADD','MINUS','MUL'});
Generating operators analysis report for /tmp/BR2021ad_1584584_202060/publish_examples0/tpe5d849aa/ex65369380/soc_analyze_FFT_tb.m ...
Saving report files in /tmp/BR2021ad_1584584_202060/publish_examples0/tpe5d849aa/ex65369380/report_512.
Operator estimate: <a href="matlab: socAlgorithmAnalyzerReport('/tmp/BR2021ad_1584584_202060/publish_examples0/tpe5d849aa/ex65369380/report_512/soc_analyze_FFT_tb.mat')">Open report viewer</a> 
Done.

Для 512 точек radix 2 FFT агрегированный отчет показывает оценочное количество 41 473 добавлений типа данных double, 32 026 вычитаний типа int32 и 11 316 вычитаний типа данных double. Ранее, с 1024 точками radix 2 FFT, эти значения были 91 649 70 173 и 25 146 соответственно. Разверните отчет, чтобы получить подробную информацию об использовании оператора в l_butterfly функция. В этом случае функция выполняется 2304 раза для длины 512, против 5120 раз для длины 1024).

Заключение

Используйте socFunctionAnalyzer для оценки и анализа количества арифметических операторов в функции MATLAB для radix 2 FFT. Используйте различные параметры просмотра для анализа отчета.

  • в ракурсе совокупного итога

  • подробно по ракурсу оператора и по функции MATLAB

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

Этот анализ можно использовать для получения оценки стоимости реализации алгоритма на данной аппаратной платформе.