7.3 REDISTRIBUTE指令 |
REDISTRIBUTE指令类似于DISTRIBUTE指令,但是被认为是可执行的。如果一个数组(或模板)被定义为DYNAMIC(见7.5节),则可以在任意时刻对它进行重分配。当对一个数组(或模板)进行重分配时,当前任何与它根本对准的其它数组也要进行重映射以便反映新的分配,并以这种方式保存对准关系(见2.4节)。(这可能在运行时需要大量的计算和通信,因此程序员在使用这一特征时,必须考虑到这一点。)
DISTRIBUTE指令仅可以出现在作用域单元的说明部分。而REDISTRIBUTE指令仅可以出现在作用域单元的执行部分。DISTRIBUTE和REDISTRIBUTE的主要不同是在DISTRIBUTR中必须只能以说明表达式作为参数来表示分配格式,例如,BLOCK或CYCLIC,而在REDISTRIBUTE中这一参数可以是任意整数表达式。另一个不同是DISTRIBUTE是一个属性,因此可以与其它属性组合在一起作为合成指令的一部分,而REDISTRIBUTE不是属性(虽然REDISTRIBUTE语句可以以属性语法的风格书写,使用“::”)
DISTRIBUTE和REDISTRIBUTE指令的形式化语法是:
H702 redistribute-directive is REDISTRIBUTE distributee dist-directive-stuff or REDISTRIBUTE dist-attribute-stuff :: distributee-list
约束:出现在REDISTRIBUTE指令中的对准子必须具有DYNAMIC属性(见7.5节)
约束:REDITRIBUTE中的dist-format-clause和dist-target都不能以“*”开头。
如果使用一个范围指令(见7.11节)来限制一个分配子所允许的分配格式的集合,则新映射应匹配范围指令中所指定的格式之一。
不能使用REDISTRIBUTE指令对任何通过存储相联(COMMON或EQUIVALENCE)与对准子相关联的数据对象进行映射,因为这样会导致一个标量数据对象的存储单元被分割到多个处理器上。见2.8节中关于存储相联的进一步讨论。
REDISTRIBUTE指令的语句形式可被认为是碰巧只有一个对准子的属性形式的简写;例如:
!HPF$ REDISTRIBUTE distributee (dist-format-list) ONTO dist-target
等价于:
!HPF$ REDISTRIBUTE (dist-format-list) ONTO dist-target :: distributee
Copyright: NPACT |