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

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

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

Анализируйте количество арифметических операторов в 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 кГц с аддитивным случайным шумом. Тестбенч вычисляет выход БПФ для вышеуказанного тестового сигнала для длины БПФ, заданной как FFTLen аргумент. Тестбенч сравнивает вывод функции с выходом функции MATLAB FFT (fft) и строит графики результатов.

Сгенерируйте отчеты счетчика операторов для 1024 точек Radix 2 FFT

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

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

Выполните эту команду, чтобы сгенерировать отчеты для симуляции алгоритма БПФ с 1024 точками radix 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.

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

Откройте отчет, щелкнув ссылку Open report viewer на консоли MATLAB. Также можно использовать socAlgorithmAnalyzerReport функция. В докладе приводятся два представления. Первое представление является представлением оператора, которое представляет данные так, что каждая строка соответствует оператору. Чтобы использовать это представление, щелкните Вид оператора (Operator View) на панели инструментов отчета. Вторым видом является вид алгоритма, где каждая строка соответствует функции MATLAB. Чтобы использовать это представление, нажмите Algorithm View на панели инструментов отчета.

По умолчанию отчет открывается с ракурсом оператора. Отчет открывает совокупное представление каждого оператора и типа данных. Например, для 1024 точек radix 2 FFT существует в общей сложности 91 649 сложения [ADD (+)] типа данных double и 67 094 вычитания [МИНУС (-)] типа данных int32. Чтобы получить подробный отчет для каждого оператора, разверните этот оператор. В отчете показано количество операторов, используемых в различных функциях. Для примера функция butterfly l_butterfly содержит четыре double сложения, которые выполнялись 5 120 раз каждый. Проследите оператор, нажав на одну из ссылок в последнем столбце отчета, чтобы выделить местоположение оператора в soc_analyze_FFT_radix2 файл.

Перейдите в вид алгоритма, нажав кнопку Algorithm View. Разверните отчет и просмотрите счетчики операторов для всех функций под файлом soc_analyze_FFT_radix2.m. Можно просмотреть счетчики каждого оператора с их типами данных путем расширения другого уровня. Для навигации по отчету можно также использовать кнопки Развернуть все (Expand All) и Свернуть все (Collapse All) на панели инструментов отчета. Чтобы отследить конкретного оператора до кода MATLAB, щелкните соответствующую ссылку в столбце Ссылка на источник в отчете.

Сгенерируйте отчеты для 512 точек Radix 2 FFT

Чтобы наблюдать корреляцию между количеством операций и числом точек в БПФ, сравните предыдущий отчет с отчетом для 512 точек radix 2 FFT. Сгенерируйте отчеты для 512 точек radix 2 FFT, передав значение 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 2 FFT, эти значения были 91 649 70 173 и 25 146 соответственно. Разверните отчет, чтобы получить подробную информацию об использовании оператора в l_butterfly функция. В этом случае функция выполняется 2304 раза для длины 512 против 5120 раз для длины 1024).

Заключение

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

  • в совокупном общем виде

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

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

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