Next: TEMPLATE Directive Up: Data Alignment and Previous: Allocatable Arrays and
The PROCESSORS directive declares one or more rectilinear processor arrangements, specifying for each one its name, its rank (number of dimensions), and the extent in each dimension. It may appear only in the specification-part of a scoping unit. Every dimension of a processor arrangement must have nonzero extent; therefore a processor arrangement cannot be empty.
In the language of section 14.1.2 of the Fortran 90 standard, processor arrangements are local entities of class (1); therefore a processor arrangement may not have the same name as a variable, named constant, internal procedure, etc., in the same scoping unit. Names of processor arrangements obey the same rules for host and use association as other names in the long list in section 126.96.36.199.1 of the Fortran 90 standard.
If two processor arrangements have the same shape, then corresponding elements of the two arrangements are understood to refer to the same abstract processor. (It is anticipated that language-processor-dependent directives provided by some HPF implementations could overrule the default correspondence of processor arrangements that have the same shape.)
If directives collectively specify that two objects be mapped to the same abstract processor at a given instant during the program execution, the intent is that the two objects be mapped to the same physical processor at that instant.
The intrinsic functions NUMBER_OF_PROCESSORS and PROCESSORS_SHAPE may be used to inquire about the total number of actual physical processors used to execute the program. This information may then be used to calculate appropriate sizes for the declared abstract processor arrangements.
XBNF processors-directive -to -rule to to is PROCESSORS processors-decl-list
processors-decl -to -rule to to is processors-name [ ( explicit-shape-spec-list ) ]
processors-name -to -rule to to is object-name XBNF
!HPF PROCESSORS Q(NUMBER_OF_PROCESSORS()), & !HPF PROCESSORS BIZARRO(1972:1997,-20:17) !HPF PROCESSORS :: RUBIK(3,3,3) !HPF PROCESSORS, DIMENSION(3,3,3) :: & !HPF PHYSICAL PROCESSORS(8) !Declaration for mpp by XYZ Incorporated !XYZ PHYSICAL PROCESSORS(2,2,2,2,2,2,2,2,2,2) !Declaration for two-dimensional grid machine by TLA GmbH !TLA PROCESSORS P(NUMBER_OF_PROCESSORS()) It may furthermore be desirable to have a way for the user to specify the precise mapping of the processor arrangement declared in a PROCESSORS statement to the physical processors of the executing hardware. Again, this might be specified either by a language-processor-dependent directive or through the programming environment (for example, as a UNIX command-line argument); such facilities are beyond the scope of the HPF specification, but as food for thought we offer the following illustrative hypothetical example: !PDQ PROCESSORS G(8,64,16) !PDQ MACHINE LAYOUT G(:GRAY(0:2),:GRAY(6:11),:BINARY(3:5,12)) This might specify that the first dimension of G should use hypercube axes 0, 1, 2 with a Gray-code ordering; the second dimension should use hypercube axes 6 through 11 with a Gray-code ordering; and the third dimension should use hypercube axes 3, 4, 5, and 12 with a binary ordering. (End of advice to implementors.) list