2.2 数据对准和分配指令的语法 | ![]() ![]() |
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 | ![]() ![]() |