Estimate Number of Operators for MATLAB Algorithm

This example shows how to estimate the number of arithmetic operators in an algorithm written in MATLAB. Analyze a radix 2 FFT algorithm and generate reports showing operator usage.

Radix 2 FFT Algorithm and Testbench

Analyze the number of arithmetic operators in the soc_analyze_FFT_radix2 function. Calculate the number of arithmetic operators used during the execution of the function. The testbench soc_analyze_fft_tb provides stimulus and verifies the implementation of the radix 2 FFT algorithm (soc_analyze_FFT_radix2) against the MATLAB FFT (fft) function.

Open the soc_analyze_FFT_tb.m file in the MATLAB editor to examine the structure of the testbench.

open soc_analyze_FFT_tb

The testbench generates a test signal with two sinusoids, one at 50 Hz with an amplitude of 0.7 and another at 120 Hz with an amplitude of 1. The signal has a sampling frequency of 1 kHz with additive random noise. The testbench calculates the FFT output for the above test signal for the FFT-length specified as the FFTLen argument. The testbench compares the output of the function to the output of the MATLAB fft function and plots the results.

Generate Operator-Count Reports for 1024 Points Radix 2 FFT

To estimate the number of operators for the radix 2 FFT, use the socFunctionAnalyzer function, and provide the testbench function soc_analyze_FFT_tb as an argument. By default, the function generates reports for all the functions called from within the testbench function and lists all the operators used.

To generate a report for only the algorithm (soc_analyze_FFT_radix2), and not for the testbench, use the 'RestrictFunction' name-value pair argument with the value 'soc_analyze_FFT_radix2.m'. Use the 'RestrictOperator' name-value pair argument to filter the report and show only three operators by setting its value to {'ADD','MINUS','MUL'}. Set the 'OutputFolder' name-value pair argument to specify a folder location for generated reports.

Excecute this command to generate reports for a simulation of a 1024-point radix 2 FFT algorithm. The command simulates the design while counting operators and generating a report.

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 \\fs-58-ah\vmgr$\home08\jchevali\Documents\MATLAB\Examples\soc-ex65369380\soc_analyze_FFT_tb.m ...
Saving report files in \\fs-58-ah\vmgr$\home08\jchevali\Documents\MATLAB\Examples\soc-ex65369380\report_1024.
Operator estimate: <a href="matlab: socAlgorithmAnalyzerReport('\\fs-58-ah\vmgr$\home08\jchevali\Documents\MATLAB\Examples\soc-ex65369380\report_1024\soc_analyze_FFT_tb.mat')">Open report viewer</a> 
Done.

The simulation results in the plot above. Observe that radix 2 FFT algorithm produces very similar results as the reference fft function and the difference between the results are of order of 10e-12.

Analyze Operator Estimation Report

Open the report by clicking the Open report viewer link on the MATLAB console. Alternatively, you can use the socAlgorithmAnalyzerReport function. The report provides two views. The first view is the operator view, which presents the data such that each row corresponds to an operator. To use this view, click Operator View on the report toolstrip. The second view is the algorithm view, where each row corresponds to a MATLAB function. To use this view, click Algorithm View on the report toolstrip.

By default, the report opens with the operator view. The report opens the aggregate view of each operator and data type. For example, for a 1024 points radix 2 FFT there are a total of 91,649 additions [ADD(+)] of data type double and 67,094 subtractions [MINUS(-)] of data type int32. To get the detailed report for each operator, expand that operator. The report shows the operator count as used in various functions. For example, the butterfly function l_butterfly contains four double additions that executed 5,120 times each. Trace the operator by clicking on one of the links in the last column of the report to highlight the location of the operator in the soc_analyze_FFT_radix2 file.

Switch to the algorithm view, by clicking the Algorithm View button. Expand the report and view the operator counts for all the functions under the file soc_analyze_FFT_radix2.m. You can view the counts of each operator with their data types by expanding another level. You can also use the Expand All and Collapse All buttons on the report toolstrip to navigate the report. To trace a specific operator to the MATLAB code, click the corresponding link in the column Link to source in the report.

Generate Reports for 512 Points Radix 2 FFT

To observe the correlation between the number of operations and the number of points in the FTT, compare the previous report with the one for a 512-point radix 2 FFT. Generate reports for a 512-point radix 2 FFT by passing a value of 512 to the 'FunctionInputs' name-value pair arugment as in this command.

 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 \\fs-58-ah\vmgr$\home08\jchevali\Documents\MATLAB\Examples\soc-ex65369380\soc_analyze_FFT_tb.m ...
Saving report files in \\fs-58-ah\vmgr$\home08\jchevali\Documents\MATLAB\Examples\soc-ex65369380\report_512.
Operator estimate: <a href="matlab: socAlgorithmAnalyzerReport('\\fs-58-ah\vmgr$\home08\jchevali\Documents\MATLAB\Examples\soc-ex65369380\report_512\soc_analyze_FFT_tb.mat')">Open report viewer</a> 
Done.

For the 512-point radix 2 FFT, the aggregated report shows an estimated number of 41,473 additions of data type double, 32,026 subtractions of type int32 and 11,316 subtractions of data type double. Previously, with the 1024-point radix 2 FFT, these values were 91,649, 70,173 and 25,146 respectively. Expand the report to get the detailed operator utilization in the l_butterfly function. In this case, the function is executed 2304 times for the 512 length, versus 5120 times for the 1024 length).

Conclusion

Use the socFunctionAnalizer function to estimate and analyze the number of arithmetic operators in the MATLAB function for radix 2 FFT. Use various viewer options to analyze the report.

  • in aggregate total view

  • detailed per operator view and per MATLAB function

Analyze the report by passing different arguments as inputs to your algorithm and observing the differences.

You can use this analysis to get an estimate of the cost of implementing an algorithm on a given hardware platform.