2.1 模型 BACKWARD FORWARD


HPF向Fortran中增加了一些指令, 以允许用户建议编译器如何将数据对象分配到处理器存储器中. 本模型被称作"抽象处理器", 它有一个数据对象向存储区域的二级映射. 数据对象(主要是数组元素)首先要相互之间进行对准; 然后将这组数组分配到一个线性排列的抽象处理器中. ( 可使用与物理处理器相同的数目, 或者一些小数目来实现这些抽象处理器. 抽象处理器向物理处理器的映射是依赖于实现的)

下表阐述了这一模型:

    

在这里, 一个根本的假设是如果一个操作作用于两个或更多的数据对象且这些数据对象存在于同一处理器中, 则此操作将执行得非常快. 如果这种操作可在不同处理器上执行, 则有可能同时执行它们.

Fortran提供了大量特征, 特别是数组语法, 使得编译器能够很容易地确定许多操作是否能同时执行. HPF指令提供了一种方法来向编译器推荐某些数据对象应保留在同一处理器中: 如果两个数据对象被映射(通过对准和分配这二级映射)到同一抽象处理器上, 则强烈推荐实现时应将它们保留在同一物理处理器上. 另外还推荐了另一种方式, 即将一个数据对象存在多个处理器上, 这样做可能使对象的更改变得复杂化, 但同时却能使多处理器对此对象的读操作变得很快.

作为说明语句的指令和作为可执行语句的指令之间的区分是很明显的(依据Fortran标准). 说明语句在程序单元的入口处被执行, 就好象所有的这些语句的执行一下就完成了; 然后才是可执行语句的执行. (通常我们可以很方便地将说明语句看成是在编译时处理的, 但一些说明语句含有说明表达式, 这些表达式包括哑元等, 它们被允许依赖于运行时的量值, 因此这些表达式的值只有在运行时才能得到, 尤其是在程序控制进入作用域单元的时刻).

HPF中的一个基本的概念是通过向某个实体进行一些对准, 来创建每一个数组(实际上是每一个对象), 实际上就是在对准后依次将这些数组分配到抽象处理器的一些排列上. 如果说明语句包含显式说明指令, 指明了数组A与另一个数组B对准, 则A的分配将由B的分配所指定; 否则, A的分配可以自己显式指定. 无论在哪种情况下, 所有这样的说明信息都将在创建数组时被使用.

对实现者的建议: 这个模型与另外一个模型相比具有更好的优越性, 在那个模型中数组首先被创建在某些缺省位置中, 仅当出现某个显式指令时, 再将其重对准或重分配. 使用ALIGN和DISTRIBUTE说明指令在运行时并不比采用实现缺省导致更大的工作量. (对实现者的建议结束)

对于一个可分配的对象, 我们说该对象的创建是与它的分配同时发生的. 可分配对象的说明指令可以出现在程序单元的说明部分, 但是每当数组创建时它都要起作用, 而不是仅在作用域单元的入口处起作用.

可将对准看成是数据对象的一个属性(在Fortran意义上). 如果对象A与对象B对准, 而对象B已与对象C对准, 则可认为A与C直接对准, 在这里B只是在说明时作为中间量而已. 我们说A与B直接对准但根本上与C对准. 如果一个对象没有与另外一个对象显式对准, 我们说它与其自身根本对准. 这些对准关系构成了一棵树, 树上的每个对象都和树根上的对象根本对准; 但是这棵树总是立即就"坍塌"了, 以便每个对象可以与树根建立直接的关系.

作为对准树根的每一个对象都有一个相关联的模板(template)或索引空间. 一般来说, 此模板同与其关相联的对象具有相同的维数而且每一维的大小也是相同的. (这一规则的一个最重要的例外是具有INHERIT属性的哑元, 见4.4.2节)我们所经常说的"一个数组的模板", 指的是该数组所根本对准的数据对象的模板. (当使用显式TEMPLATE(见2.7节)指令时, 数组与之显式对准的可以只是一个简单的模板).

HPF模型的分配(distribute)步骤在技术上适用于数组的模板, 但由于上面所注意到的它们之间的紧密关系我们经常松散地统称为数组的分配. 分配就是根据一个给定的模式在一组抽象处理器上对模板进行划分的. 对准(从数组到模板)和分配(从模板到处理器)合在一起就决定了数组同处理器之间的关系; 我们把这种关系称之为数组的映射. (这些评论也适用于标量, 我们可以把标量看成是具有一个索引空间, 其唯一的位置由一系列空下标表达式指定)

可根据一整套完整的说明指令来创建每一个对象; 但如果程序中没有包含某些对象映射的完整说明, 则由编译器提供缺省值. 根据缺省值, 一个对象不与其它任何对象对准, 它只与其自身根本对准. 缺省的分配是依赖于实现的, 但该实现必须能用某些显式指令解释. 无须为同一表示的对象提供同样的缺省分配说明; 编译器能够考虑这些对象在执行代码中所使用的上下文. 程序员可通过显式指定分配来强迫同一表示的对象具有同一分配方式. (另一方面, 同一表示的处理器排列能够保证描述出"相同处理器安排相同的方式", 2.6节将更详细讨论这一点)

有时考虑将一些较小的数组对准到一个大的索引空间是可行的, 但是不允许将任何数组跨越整个索引空间. HPF允许定义一个TEMPLATE, TEMPLATE类似一个元素没有值的数组, 因此不为其分配存储空间; 它只是一个抽象的索引空间, 可对其进行分配, 数组也可以向其对准.

如果一个对象出现于一个HPF映射指令中且该指令位于声明它的作用域单元内, 则可考虑对其进行显式映射; 否则对其进行隐式映射. 映射指令包括ALIGN指令, DISTRIBUTE指令, INHERIT指令或者其它任何能够说明对准, 分配, 以及INHERIT属性的指令.

注意, 我们将在第七节对此模型进行扩展, 以允许对象的动态重分配和重映射.


Copyright: NPACT BACKWARD FORWARD