As we expect communication at the displacement level to be relatively
inexpensive nearest-neighbor communication,
we do not consider sacrificing parallelism
to avoid communication due to displacements.
However, the algorithm minimizes any communication caused by
conflicting displacements whenever possible.
The displacements are calculated
after the partitions and orientations have already been determined.
Our compiler uses a simple greedy strategy that takes into account
branch predictions and the offset sizes
to find displacements that minimize communication along the most frequently
executed paths.
Eqn. 2 says that given the full data decomposition,
,
for array x referenced in a loop nest j (with the array index
function
)
the computation displacement
.
The data displacement,
, for another array y accessed
in the same loop nest can be calculated using
.