The /interleave
qualifier controls loop unrolling
and rescheduling by turning on interleaved unrolling. Interleaved
unrolling can help the compiler recognize quad-word loads and
stores, which are more efficient than ordinary loads and stores. It
does this by first unrolling the loop as in ordinary loop unrolling.
Second, the statements in the loop are interchanged where possible
to make references to the same array adjacent to each other.
The following example demonstrates interleaved unrolling:
REAL A(100),B(100) DO I = 1, 100 A(i) = 99. B(i) = 100. ENDDO PRINT *,a,b END
The output from KAP with interleaved unrolling turned on is as follows:
REAL A(100), B(100) DO I=1,97,4 A(I) = 99. A(I+1) = 99. A(I+2) = 99. A(I+3) = 99. B(I) = 100. B(I+1) = 100. B(I+2) = 100. B(I+3) = 100. ENDDO PRINT *, A, B END
The default value is /interleave
.