This subsection explains the interaction of active and inactive processor sets with explicitly mapped data. The rule of thumb is that allocating memory must be done locally; that is, if a processor stores part of an array, then that processor must be active when the array is created. Implications of this rule include:
It should be clear from the treatment of local and global objects that declarations may need to refer to two classes of processors arrangements. The first, used mainly for the declaration of global data, consists of arrangements of the universal processor set. These are known as universal processors arrangements. Since they always represent the same processors, these serve as a fixed frame of reference, allowing consistent declarations. A processors-directive (Rule H329) defines a universal processors arrangement by default. To accommodate active processors, two slight changes to the rules in Section 3.6 need to be made:
Restricted processors arrangements represent only processors that, at the time the arrangement is declared, are active. They are used for mapping local objects and dummy arguments. To declare a subset processors arrangement, one can use the SUBSET option of combined-attribute-extended (H801), defined on page . One can also use the statement form of the SUBSET attribute:
H901 subset-directive is SUBSET processors-name
Examples of the two forms are
!HPF$ PROCESSORS, SUBSET :: P(NP/4,4) !HPF$ PROCESSORS Q(ACTIVE_NUM_PROCS()) !HPF SUBSET Q
As for universal arrangements, there are some modified rules for the use of subset processors arrangements:
Note that it is permitted for a subset processors arrangements to have fewer than NUMBER_OF_PROCESSORS() elements; this reflects the way that the active processor set can shrink. Also note that there is an added condition before two subset processors arrangements are considered identical; this reflects the dynamic nature of the active processor set. Finally, note that a local, subset processors arrangement will be an arrangement of the set of active processors until such time as the active processor set is further restricted by an ON directive.