The Loop Table (
/listoptions=l ) includes an entry
for each loop indicating whether it was optimized, or why it was
not. This section lists the possible messages and gives a brief
explanation for each. The two most common reasons for a loop to be
left serial are that the iterations were not independent and that
the loop contained I/O statements.
Messsages referring to DO loops apply to C
- bad intrinsic call - Loop optimization may give
- bad operator - Loop optimization may give
- branches out of-into loop - Code may be iteration-
- cannot allocate temporary array - Usually, a data
dependence could have been lifted by expanding a scalar into an
array, but there was a name conflict.
- concurrentized - Should not appear. If it does,
indicates miscellaneous optimization.
- distributed - Loop divided into smaller loops, some
of which may be further optimized.
- DO statement not optimizable - For example, the
iteration count of a while loop is not known.
- ELSE IF - Some loops inside nested IFs require more
information to optimize than KAP can deduce.
- empty loop - Loop with no executable statements
inside (nothing to optimize), or loop whose body will never be
- fused with other loops - Adjacent loops joined into
a larger loop to reduce overhead.
- GOTO in loop - Possible flow patterns are too
complicated for KAP.
- I/O statement in loop - Input/Output is assumed to
- left as DO loop - Usually, a data dependence
- left as DOALL - Loop was already explicitly
concurrent in the input dialect of C.
- left as a serial loop - Usually, too much
- nested IFs - The branching pattern was too
- no optimizable statements - For example, no
arithmetic in loop.
- not enough work - Optimization overhead greater
than the expected gain.
- optimization disabled - By a directive or
- replaced by calls - Some loop nests can be replaced
by a call to a library routine.
- scalar directive - A directive or assertion turned
- scalar inner loop - Inside a parallel loop already.
- scalar mode preferable - Usually, too much
- too many inner loops - LIMIT > integer VERY
complicated loop nest; KAP will try to optimize the inner loops.
- too many stmts/DD arcs - VERY complicated loop
nest; try increasing /arclimit.
- too much synchronization - Loop iterations depend
on each other in a complicated way; the overhead from untangling
them would be greater than expected gain.
- unoptimizable call - Function with unknown side
- unoptimizable operation - Character string
- unoptimizable statements in loop - Usually I/O.
- unoptimizable symbol use - Variable used in a
- unoptimizable variable or operation type - Only
numerical work is easily concurrentized.
- unrolled - Loop could not be concurrentized, so KAP
unrolled it (see explanations of unrolling in Chapter 4 and Chapter 7).
- unrolled completely, fused or removed - Loop has
been turned into straight-line code, joined to another loop, or
- unrolled; already in a parallel loop - Loop could
be concurrentized, but target machine does not support nested
parallelism; KAP unrolled it.
- vectorized - Can be used for optimizations which
enhance the vectorization performed by the C compiler.
Previous Page Next Page Contents Index