Minimize Redundant Operations in Loops
This example shows how to minimize redundant operations in loops.
When a loop operation does not depend on the loop index, performing
it inside a loop is redundant. This redundancy often goes unnoticed
when you are performing multiple operations in a single MATLAB® statement
inside a loop. For example, in the following code, the inverse of
the matrix B
is being calculated 100 times inside
the loop although it does not depend on the loop index:
for i=1:100 C=C + inv(B)*A^i*B; end
Performing such redundant loop operations can lead to unnecessary processing. To avoid unnecessary processing, move operations outside loops as long as they do not depend on the loop index.
Define a function,
SeriesFunc(A,B,n)
, that calculates the sum ofn
terms in the following power series expansion:function C=SeriesFunc(A,B,n) % Initialize C with a matrix having same dimensions as A C=zeros(size(A)); % Perform the series sum for i=1:n C=C+inv(B)*A^i*B; end
Generate code for
SeriesFunc
with 4-by-4 matrices passed as input arguments forA
andB
:X = coder.typeof(zeros(4)); codegen -config:lib -launchreport SeriesFunc -args {X,X,10}
In the generated code, the inversion of
B
is performedn
times inside the loop. It is more economical to perform the inversion operation once outside the loop because it does not depend on the loop index.Modify
SeriesFunc
as follows:function C=SeriesFunc(A,B,n) % Initialize C with a matrix having same dimensions as A C=zeros(size(A)); % Perform the inversion outside the loop inv_B=inv(B); % Perform the series sum for i=1:n C=C+inv_B*A^i*B; end
This procedure performs the inversion of
B
only once, leading to faster execution of the generated code.