The overlap shift communications optimization recognizes computations with
arrays that contain an overlap pattern as shown in table 6-1.
When the array involved in an overlap shift computation is allocated
the overlap area [55] is also allocated and remains available
until a computation requiring an overlap shift area.
Immediately before the computation,
the overlap shift area is filled with the current value(s) of the overlap
data (this requires communications). By allocating an overlap shift area,
the compiler localizes a portion of a computation prior to the computation
that would otherwise require communication during the computations.
Figure graphically shows the
overlap shift optimization for code similar to the following.
PROGRAM TEST_OVERLAP
INTEGER I, A(8), B(8)
!F90D$ DECOMPOSITION T(8)
!F90D$ ALIGN A(J) WITH T(J)
!F90D$ ALIGN B(J) WITH T(J)
!F90D$ DISTRIBUTE T(BLOCK)
FORALL(I=1:7) A(I)=B(I+1)
In the first stage of the overlap shift communication, the compiler determines that a computation involving the array B requires an overlap shift area in the positive direction (Fortran 90D/HPF also permits negative overlaps shift areas). A portion of B is then allocated with the extra overlap location(s).