for
-LoopsWhen the code generator unrolls a for
-loop, instead of producing a for
-loop in the generated code, it produces a copy of the loop body for each iteration. For small, tight loops, unrolling can improve performance. However, for large loops, unrolling can significantly increase code generation time and generate inefficient code.
coder.unroll
The code generator uses heuristics to determine when to unroll a
for
-loop. To force loop unrolling, use
coder.unroll
. This affects only the for
loop that is immediately after coder.unroll
. For
example:
function z = call_myloop() %#codegen z = myloop(5); end function b = myloop(n) b = zeros(1,n); coder.unroll(); for i = 1:n b(i)=i+n; end end
Here is the generated code for the for-loop:
z[0] = 6.0; z[1] = 7.0; z[2] = 8.0; z[3] = 9.0; z[4] = 10.0;
To control when a for
-loop is unrolled, use the
coder.unroll
flag
argument. For example, unroll the loop only when the number of
iterations is less than
10.
function z = call_myloop() %#codegen z = myloop(5); end function b = myloop(n) unroll_flag = n < 10; b = zeros(1,n); coder.unroll(unroll_flag); for i = 1:n b(i)=i+n; end end
To unroll a for
-loop, the code generator must be able to
determine the bounds of the for
-loop. For example, code generation
fails for the following code because the value of n
is not known at
code generation
time.
function b = myloop(n) b = zeros(1,n); coder.unroll(); for i = 1:n b(i)=i+n; end end