This pragma instructs the compiler to completely unroll a loop. It has an effect only if the compiler can determine the number of iterations the loop has.
Both vectorized and nonvectorized loops can be unrolled using
#pragma unroll_completely. That is,
#pragma unroll_completely applies to both
This pragma is only applicable if you are compiling with
-O3 -Otime. When
-O3 -Otime, the compiler automatically unrolls loops where it is beneficial to
do so. You can use this pragma to ask the compiler to completely unroll a loop that has not
automatically been unrolled completely.
#pragma only when you have evidence, for example from
--diag_warning=optimizations, that the compiler is not unrolling loops
optimally by itself.
You cannot determine whether this pragma is having any effect unless you compile with
--diag_warning=optimizations or examine the generated assembly code, or
This pragma can only take effect when you compile with
-O3 -Otime. Even
then, the use of this pragma is a request to the compiler
to unroll a loop that has not been unrolled automatically. It does not guarantee that the
loop is unrolled.
#pragma unroll_completely can only be used immediately before a
for loop, a
while loop, or a
#pragma unroll_completely on an outer loop can prevent
vectorization. On the other hand, using
#pragma unroll_completely on an
inner loop might help in some cases.