Integer lattice based methods for local address generation for block-cyclic distributions

  • Authors:
  • J. Ramanujam

  • Affiliations:
  • -

  • Venue:
  • Compiler optimizations for scalable parallel systems
  • Year:
  • 2001

Quantified Score

Hi-index 0.00

Visualization

Abstract

In data-parallel languages such as High Performance Fortran and Fortran D, arrays are mapped to processors through a two-step process involving alignment followed by distribution. A compiler that generates code for each processor has to compute the sequence of local memory addresses accessed by each processor and the sequence of sends and receives for a given processor to access non-local data. In this chapter, we present a novel approach to the address sequence generation problem based on integer lattices. When the alignment stride is one, the mapping is called a one-level mapping. In the case of one-level mapping, the set of elements referenced can be generated by integer linear combinations of basis vectors. Using the basis vectors we derive a loop nest that enumerates the addresses, which are points in the lattice generated by the basis vectors. The basis determination and lattice enumeration algorithms are linear time algorithms. For the two-level mapping (non-unit alignment stride) problem, we present a fast novel solution that incurs zero memory wastage and little overhead, and relies on two applications of the solution of the one-level mapping problem followed by a fix-up phase. Experimental results demonstrate that our solutions to the address generation problem are significantly faster than other solutions to this problem. In addition, we present a brief overview of our work on related problems such as communication generation, basis vector derivation, code generation for complex subscripts and array redistribution.