2.2 数据对准和分配指令的语法 BACKWARD FORWARD


HPF中的说明指令有两种形式: 一种是说明语句, 它类似于Fortran中的DIMENSION和ALLOCATABLE语句; 另一种是属性形式, 它类似于Fortran中使用"::"的类型说明语句.

属性形式允许在同一指令中描述多个属性. HPF与Fortran的不同点在于它不要求第一个属性, 或者说实际上任何一个属性是类型说明符.

H201 combined-directive  is  combined-attribute-list :: combined-decl-list
H202 combined-attribute  is  ALIGN align-attribute-stuff
                or  DISTRIBUTE dist-attribute-stuff
                or  INHERIT
                or  TEMPLATE
                or  PROCESSORS
                or  DIMENSION(explict-shape-spec-list)
H203  combined-decl      is  hpf-entity[(explicit-shape-spec-list)]
                 or  object-name 
H204  hpf-entity       is  processors-name
                 or  template-name

INHERIT属性与子程序调用习惯有关, 将在第四节对其进行讨论.

约束: 同一合成属性(combined-attribute)一定不能在给定的合成指令(combined-directive)中出现超过一次.

约束: 如果DIMENSION属性出现在合成指令中, 则它所应用的任何实体都必须是以HPF TEMPLATE或PROCESSORS类型说明符声明的.

不论是在分离指令还是在合成指令中, 各种属性的说明都必须受下面的规则的约束.

如果出现DISTRIBUTE属性, 则合成说明列表(combined-decl-list)所说明的每一个名字都被认为是一个分配子(distributee)并遵循2.3节所列举的约束.

如果出现ALIGN属性, 则实体说明列表(entity-decl-list)所说明的每一个名字都被认为是一个对准子(distributee)并遵循2.4节所列举的约束.

HPF的关键字PROCESSORS和TEMPLATE在说明处理器排列和模板时起类型说明符的作用. 而HPF的关键字ALIGN, DISTRIBUTE和INHERIT则起属性的作用. 可在没有类型说明符出现的情况下, 将具有其它类型(诸如REAL)的, 与处理器排列, 模板, 或实体相关的属性合并在HPF指令中.

不能赋予任何一个实体超过一个属性.

可在一个HPF实体(hpf-entity)后或DIMENSION属性中指定维信息. 如果二者都出现, 则以对象名(object-name)后面的信息为准.(这一点符合Fortran标准)例如,在下例中:

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

A,B和D是64*64的模板; 而C则是32*32

映射一个变量的指令必须与该变量在同一作用域单元内.

如果同一说明部分的说明表达式包含了对指定数组元素值的引用, 则在此说明指令前, 必须完成对此数组的所有显式映射或INHERIT属性的指定. (这一约束参照并扩展了Fortran标准中7.1.6.2节的内容, 该节部分说明了这一点: 如果同一说明部分的说明表达式包含了对指定数组元素值的引用, 则数组的边界必须在前面的说明中指定)

星号注释: HPF对准和分配指令的语法规则中所出现的星号字符"*"有三个不同的作用:

. 当单独一个星号出现在括弧列表中时, 它或者指明了一个坍塌映射, 在这里一个数组的许多元素可以映射到同一抽象处理器上; 或者指明了一个重复映射, 在这里一个数组的每个元素可以映射到多个抽象处理器上. 参见语法规则align-source和align-subsript(见2.4节)以及dist-format(见2.3节)

. 出现在一个align-subscript-use表达式中的星号, 代表的是通常的整数乘操作符.

. 当一个星号出现在一个左括弧"("前面或出现在关键字WITH或ONTO的后面时, 则它表示一个描述性或重复的映射, 此映射用于子程序哑元(见第四节)以及所认可扩展中的指针映射(见7.8节).

. 星号也可用于接口模块里的PASS_BY属性中, 以描述引用一个用C书写的外部例程时所需传递的哑元.


Copyright: NPACT BACKWARD FORWARD