The roundoff
directive allows you to specify the
amount of difference in roundoff error that is acceptable. Certain
reductions are sensitive to the algorithms used to compute them.
In particular, if an arithmetic reduction is accumulated in a
different order than in the scalar program, the roundoff error is
accumulated differently and the final result may differ from that
of the original program's output. While the difference is usually
insignificant, some restructuring transformations performed by KAP
must be disabled to get precisely the same results as the scalar
program.
KAP classifies its transformations by the amount of difference in
roundoff error that can accumulate. You can decide what level of
roundoff error differences is allowable. The roundoff
directive value ranges from 0 to 3.
The meaning of each roundoff
level is as follows:
Value | Meaning |
---|---|
0 | Allow no roundoff-changing transformations. |
1
| Enable expression simplification and code floating.
Allow loop interchanging around serial arithmetic reductions.
Allow loop rerolling, if /scalaropt > 1. |
2 | Enable reciprocal substitution. |
3 |
Enable recognition of REAL induction variables. Enable memory
management, if /scalaropt=3 . INTEGER division rotation
is allowed. |
The /roundoff
command qualifier acts like a global
C*$* roundoff
directive.