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 for
loops:
- bad intrinsic call - Loop optimization may give
unpredictable results.
- bad operator - Loop optimization may give
unpredictable results.
- branches out of-into loop - Code may be iteration-
order dependent.
- 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
executed.
- 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
be order-dependent.
- left as DO loop - Usually, a data dependence
prevented concurrentization.
- left as DOALL - Loop was already explicitly
concurrent in the input dialect of C.
- left as a serial loop - Usually, too much
synchronization required.
- nested IFs - The branching pattern was too
complicated.
- 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
assertion.
- replaced by calls - Some loop nests can be replaced
by a call to a library routine.
- scalar directive - A directive or assertion turned
off optimization.
- scalar inner loop - Inside a parallel loop already.
- scalar mode preferable - Usually, too much
synchronization needed.
- too many inner loops - LIMIT > integer VERY
complicated loop nest; KAP will try to optimize the inner loops.
Try increasing
/limit
.
- 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
effects.
- unoptimizable operation - Character string
manipulation.
- unoptimizable statements in loop - Usually I/O.
- unoptimizable symbol use - Variable used in a
complicated way.
- 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
dropped entirely.
- 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
Command-Line Qualifiers