4.3.2 HPF库模式 |
HPF定义一个函数和子程序库,包括了大量用于表达高级的数据并行算法的子程序。也有子程序 用于查询实际数组的运行时的实际对准和分配情况。子程序收集在一个库模式中(由一个HPF实现来提供这个)为存取这些子程序,要求把USE语句放在定义的范围内。注意这些子程序不是内部的(所以编译器自动地了解)因为多个参数表和类型特别行为的灵活性是不必要的。
提供这些许多子程序的基本理论是在大范围的数据并行算法中,这些操作是必要的。希望生产商提供的实现比一个用户的实现更有效,用户只能为一种特定的机器实现必要的优化。
在HPF_LIBRARY模式中可得到的子程序在下面进行简单地介绍。更详细的参看7节提到的HPF文件。
映射查询子程序( Mapping inquiry subroutines )
数组的映射通过一种实现来完成的,该实现考虑程序中的劝告。为查询运行时映射情况,有子程序PF_ALIGNMENT, HPF_TEMPLATE和HPF_DISTRIBUTION。
二进制位操作函数(Bit manipulation function)
这些二进制位操作函数被提供
LEADZ( I )
POPCNT( I )
POPPAR( I )
分别返回主要的零二进制位数,一个二进制位数和整形I的二进制位。
数组归并函数(Array reduction functions)
数组归并函数定义了附加的归并函数,其扩展了在Fortran90中已有的集合(ANY,ALL,COUNT,PRODUCT, SUM,MAXVAL和MINVAL)。新的子程序是IALL,IANY,IPARITY和PARITY。相应于二进制的 这些操作分别是IAND,IOR,IEOR和.NEQV.。
数组组合分放函数k(Array combining scatter functions)
数组组合分放函数为允许在向量V中的重复值,这些子程序判断赋值
Y( V ) = X
赋给同一数组元素的值由一个组合器XXX组合,其中XXX( ALL, ANY, COPY, COUNT, IALL, IANY,IPARITY, MAXVAL,MINVAL, PARITY, PRODUCT, SUM).这些函数有如下形式:
XXX_SCATTER( ARRAY, BASE, INDX1, ... , INDXn, MASK)
其中XXX指定一个组合器。这些子程序必须返回一个结果,其等价于BASE和ARRAY中各元素的一些组合。这些元素被送到INDX数组的坐标所定义的位置。
数组前缀和后缀函数(Array prefix and suffix functions)
一个前缀函数--或scan--沿一个向量应用一个操作,以便任何元素是对其前面元素操作的结果。例如:
SUM_PREFIX( ( / 1, 2, 0, 1/) ) = ( / 1, 3, 3, 4 / )
象分放函数一样,有同样的组合器,有一些可选项控制前缀或后缀操作:
XXX_PREFIX( ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE)
XXX_SUFFIX( ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE)
后缀函数与前缀函数以不同的方向进行操作:在给定位置的结果依赖于后序元素。mask定义激活元素,并沿着数组ARRAY的一个特定维,应用scan . scan也可以被分段。如果( 可选的 )DIM参数不出现,那么ARRAY被作为按数组元素顺序存在的一个向量。
数组排序函数(Array sorting functions)
为产生数组的等级转换,有两个函数。这些能对全部多维数组或沿数组的特定维进行操作。
GRADE_DOWN( ARRAY, DIM )
GRADE_UP( ARRAY, DIM )
Copyright: NPACT |