next up previous contents
Next: The DISTRIBUTE Directive Up: Data Mapping Previous: Model

Syntax of Data Alignment and Distribution Directives

Specification directives in HPF have two forms: specification statements, analogous to the DIMENSION and ALLOCATABLE statements of Fortran; and an attribute form analogous to type declaration statements in Fortran using the ``::'' punctuation.

The attribute form allows more than one attribute to be described in a single directive. HPF goes beyond Fortran in not requiring that the first attribute, or indeed any of them, be a type specifier.
H301combined-directive is combined-attribute-list :: combined-decl-list
H302combined-attribute is ALIGN align-attribute-stuff
or DISTRIBUTE dist-attribute-stuff
or INHERIT
or TEMPLATE
or PROCESSORS
or DIMENSION ( explicit-shape-spec-list )
H303 combined-decl is hpf-entity [ ( explicit-shape-spec-list ) ]
or object-name
H303 hpf-entity is processors-name
or template-name
XBNF

The INHERIT attribute is related to subroutine call conventions and will be discussed in Section 4.

The following rules constrain the declaration of various attributes, whether in separate directives or in a combined-directive.

If the DISTRIBUTE attribute is present, then every name declared in the combined-decl-list is considered to be a distributee and is subject to the constraints listed in section 3.3.

If the ALIGN attribute is present, then every name declared in the entity-decl-list is considered to be an alignee and is subject to the constraints listed in section 3.4.

The HPF keywords PROCESSORS and TEMPLATE play the role of type specifiers in declaring processor arrangements and templates. The HPF keywords ALIGN, DISTRIBUTE, and INHERIT play the role of attributes. Attributes referring to processor arrangements, to templates, or to entities with other types (such as REAL) may be combined in an HPF directive without having the type specifier appear.

No entity may be given a particular attribute more than once.

Dimension information may be specified after an hpf-entity or in a DIMENSION attribute. If both are present, the one after the object-name overrides the DIMENSION attribute (this is consistent with the Fortran standard). For example, in:

!HPF TEMPLATE,DIMENSION(64,64) :: A,B,C(32,32),D

A, B, and D are templates; C is .

Directives mapping a variable must be in the same scoping unit where the variable is declared.

If a specification expression includes a reference to the value of an element of an array specified in the same specification-part, any explicit mapping or INHERIT attribute for the array must be completely specified in prior specification-directives. (This restriction is inspired by and extends F95:7.1.6.2 in the Fortran standard, which states in part: If a specification expression includes a reference to the value of an element of an array specified in the same specification-part, the array bounds must be specified in a prior declaration.)

A comment on asterisks: The asterisk character ``*'' appears in the syntax rules for HPF alignment and distribution directives in three distinct roles:

An asterisk can also be used in the PASS_BY attribute in an interface block to describe dummy arguments passed by reference to an extrinsic routine written in C (see Section 11.2).


next up previous contents
Next: The DISTRIBUTE Directive Up: Data Mapping Previous: Model