1.3 HPF 2.0语言特征概述 |
本文档所定义的语言包含两个主要部分:
. HPF 2.0语言(第二部分)
. HPF 2.0所认可的扩展(第三部分)
HPF 2.0语言所包括的特征期望在语言规格说明发布一年内都能实现. 这些特征包括数据分配特征, 数据并行特征, 内部及库例程, 以及外部机制. 它所认可的扩展包括那些能够满足特殊需求的高级特征, 但是这些扩展在最初的编译器实现中不可能被支持.
当所访问的数据显示出引用的局部性时, 大多数并行和串行体系结构都能获得最高的速度. 然而由Fortran标准所暗示的串行存储规则往往同体系结构所要求的局部性相冲突. 为避免这一点, HPF中包含了一些能够描述数据共同定位(ALIGN)以及在存储区域或抽象处理器之间进行数据划分(DISTRIBUTE)的特征. 编译器可以解释这些注释以增强数据的存储分配, 所依据的约束是在程序的任一点每一个数据对象只能有唯一的值. 第四节定义了在跨越子程序边界的地方这些映射特征是怎样相互作用的.
虽然HPF的一个目标是维护与Fortran的兼容性, 但是对Fortran中顺序和存储相联的完全支持, 却与HPF中通过数据分配获得高性能的目标不兼容. 第二和第四节描述了同存储和顺序相联有关的约束和指令.
1.3.1.2 数据并行执行特征(第三节)
为显式地解释并行计算, HPF定义了INDEPENDENT指令. 它表明某一部分代码中的语句没有显示出任何串行依赖. 当正确使用时, 它可以做到既不改变结构的语义, 又能为语言处理器提供更多的用于优化的信息. REDUCTION子句可与INDEPENDENT指令一起使用来标致某一类变量, 这些变量可由交互和相联操作所修改. 在一个变量修改的积累次序无关紧要的循环上下文中, 这一特征对于以归约操作利用并行性是很方便的.
1.3.1.3 外部(Extrinsic)程序单元(第五节)
因为HPF被设计成了一个高层次的, 与机器无关的语言, 所以某些操作很难或不可能直接解释. 例如, 在某种机器上, 一个应用可能从经过很好调节的脉动(finely-tuned systolic)通信中获益最大; 但是HPF的全局地址空间却不能对这一点进行很好的解释. 为此HPF定义了外部(Extrinsic)机制, 它使得HPF同用其它模式所书写的过程之间的接口变得很容易, 例如显式消息传递子程序库或诸如C这样的其它语言.
1.3.1.4 内部函数和标准库(第六节)
大规模并行机器的经验已经识别出了许多在并行算法设计中有用的基本操作. Fortran的数组内部函数定义了一些这种操作. HPF以内部函数和标准库函数的形式将几类并行操作加入了到语言定义中. HPF中还提供了几个对于控制并行执行有用的查询函数.
1.3.2.1 数据映射扩展(第七节)
扩展的映射特征允许对数据映射进行更多的控制, 包括在运行时对数组进行动态重排列和重分配(REALIGN, REDISTRIBUTE, DYNAMIC指令), 在处理器的子集之间进行数据映射, 以及对不规则数据分配的支持(GEN_BLOCK和INDERECT指令). 另外, HPF还定义了一些机制允许程序员向编译器提供信息, 这些信息包括一个数组所能采取的可能的分配范围(RANGE指令)以及与某种数组共同使用的缓冲数, 这种数组涉及基于模板 的最近相邻计算(SHADOW).
1.3.2.2 数据和任务并行的扩展(第八节)
ON指令方便了显式计算划分. 一个计算的推荐执行位置可以以下列方式指定: 或者以一个能够显式识别的处理器排列子集的方式, 或者间接地以数组(区域)或模板所映射到的处理器集合的方式.
为帮助编译器产生高效的代码, 定义了RESIDENT指令, 可由程序员将其与ON指令连接在一起. 可用它来声明ON指令范围内所有对指定变量的访问都可在正执行的处理器的本地被找到. TASK_REGION指令允许用户指定不连贯的处理器子集上不同代码段的同时执行.
1.3.2.3 异步I/O的扩展(第九节)
为允许I/O同计算重叠, HPF中定义了直接, 非格式化数据的异步READ/WRITE. 可通过在Fortran的READ/WRITE语句中增加一个I/O控制参数指定非阻塞执行以及一个新语句(WAIT)来作到这一点.
1.3.2.4 内部及库过程的扩展(第十节)
HPF的内部及库例程的扩展同映射查询子过程关系最密切. 扩展中定义了一些新的查询例程, 同时对HPF 2.0所定义的其它例程进行了扩展以方便对于所扩展的映射特征的查询, 例如对处理器子集的映射, GEN_BLOCK, INDERECT和DYNAMIC分配. 还对Fortran中TRANSPOSE内部函数进行了一般化定义.
1.3.2.5 HPF外部函数所认可的扩展(第十一节)
第十一节中定义了许多专门的外部接口作为所认可的HPF 2.0扩展. 其中包括能够方便地同其它语言(例如C和Fortran 77)进行互操作的接口, 以及为不同的并行模型所建立的接口(LOCAL用于SPMD并行, SERIAL用于单进程串行). 第11.7节中所定义的库例程在外部模型中很有用.
Copyright: NPACT |