An early output of the project was the definition of a common Distributed Array Descriptor (DAD) for languages and compilers dealing with HPF-like distributed arrays[22]. This DAD is a simple, flat table of parameters that describe the mapping from global index space to the local array space in each SPMD node program. The DAD structure can be made visible to (for example) C and Fortran SPMD programs.
The tabular DAD of [22] had a less direct influence on the development of our libraries and compilers than originally anticipated. The adoption of object-oriented languages and design principles favoured treatment of the array descriptor as an opaque object, accessed through suitable methods and inquiries. The tabular version of the DAD survives as a useful concrete model of the more abstract implementations adopted in practice, but the NPAC runtime kernel (for example) implements its array descriptor as a true C++ object. Fortran or C programs access its fields through suitable inquiry functions.
The descriptor implemented in the NPAC kernel handles a generalization of the HPF 1.0 distributed array model. It can describe arrays of any rank, any data distribution format supported by HPF 1.0 (plus distribution formats of some earlier data parallel languages such as C*), and any of the alignment options of HPF. The descriptor also handles Fortran 90-style any regular section of an array. Within certain limits, new distribution formats can be added by extending the class hierarchy that describes the layout of individual array dimensions. For example, support for HPF 2.0-like ghost regions has been added in this manner, and before the end of the extended project we expect to add support for at least the block-irregular distribution format of HPF 2.0.