10.2 扩展库过程的规格说明 |
可选参数:LB,UB,STRIDE,AXIS_MAP,IDENTITY_MAP,DYNAMIC,NCOPIES
描述:返回关于变量和它所根本对准的对准目标(数组或模板)之间的对应关系。
分类:映射查询子程序。
参数:
ALIGNEE:
可以是任意类型。可以是标量或有值的数组。不能是一个假定大小的数组。不能是一个已释放的指针或一个尚未分配空间的可分配数组。它是一个INTENT(IN)参数。
如果ALIGNEE具有指针属性,则返回其目标的对准信息。目标不能是一个假定大小的哑参或者假定大小哑参的一个区域。
LB(可选的):
必须是缺省整型且是一维的。其大小至少等于ALIGNEE的维数。它是一个INTENT(OUT)参数。ALIGNEE第i维的第一个元素沿与ALIGNEE的第i维相关联的对准目标的维同第LB(i)个对准目标元素根本对准。如果ALGNEE的第i维是一个坍塌维,则LB(i)依赖于实现。
UB(可选的):
必须是缺省整型且是一维的。其大小至少等于ALIGNEE的维数。它是一个INTENT(OUT)参数。ALIGNEE第i维的最后一个元素沿与ALIGNEE的第i维相关联的对准目标的维同第UB(i)个对准目标元素根本对准。如果ALGNEE的第i维是一个坍塌维,则UB(i)依赖于实现。
STRIDE(可选的):
必须是缺省整型且是一维的。其大小至少等于ALIGNEE的维数。它是一个INTENT(OUT)参数。STRIDE的第i个元素被置为对准ALIGNEE第i维的元素时所使用的步长。如果ALIGNEE的第i维是坍塌维,则STRIDE(i)为0。
AXIS_MAP(可选的):
必须是缺省整型且是一维的。其大小至少等于ALIGNEE的维数。它是一个INTENT(OUT)参数。AXIS_MAP的第i个元素被置为与ALIGNEE的第i维相关联的对准目标的维。如果ALIGNEE的第i维是坍塌维,则AXIS_MAP(i)为0。
IDENTITY_MAP(可选的):
必须是缺省逻辑型的标量。它是一个INTENT(OUT)参数。如果关联于ALIGNEE的根本对准目标的形状与ALIGNEE相同,使用特性置换(identity permutation)对各维进行映射,且步长都是正的(由于形状的限制,因此都等于1),则其值为真;否则其值为假。如果一个变量在ALIGN或REALIGN指令中不是以对准子出现,且不具有INHERIT属性,则INDENTITY_MAP必须为真;在其它条件下它也可为真。
DYNAMIC(可选的):
必须是缺省逻辑型标量。它是一个INTENT(OUT)参数。如果ALIGNEE具有DYNAMIC属性,则其值为真;否则其值为假。
NCOPIES(可选的):
必须是缺省整型标量。它是一个INTENT(OUT)参数。其值是与对准目标根本对准的ALIGNEE的拷贝数。对于一个非重复变量,它被置为1。
例子:如果ALIGNEE是标量,则不对LB,UB,STRIDE,或AXIS_MAP的任何元素置值。
给定说明:
REAL PI=3.1415927
DIMENSION A(10,10),B(20,30),C(20,40,10),D(40)
!HPF$ TEMPLATE T(40,20)
!HPF$ DYNAMIC A
!HPF$ ALIGN A(I,:) WITH T(1+3*I,2:20:2)
!HPF$ ALIGN C(I,*,J) WITH T(J,21-I)
!HPF$ ALIGN D(I) WITH T(I,4)
!HPF$ PROCESSORS PROCS(4,2), SCALARPROC
!HPF$ DISTRIBUTE T(BLOCK,BLOCK) ONTO PROCS
!HPF$ DISTRIBUTE B(CYCLIC,BLOCK) ONTO PROCS
!HPF$ DISTRIBUTE ONTO SCALARPROC :: PI
假定实际映射与指令指定的一样,HPF_ALIGNMENT的结果是:
A B C D ———————————————————————— LB [4,2] [1,1] [20,N/A,1] [1] UB [31,20] [20,30] [1,N/A,10] [40] STRIDE [3,2] [1,1] [-1,0,1] [1] AXIS_MAP [1,2] [1,2] [2,0,1] [1] IDENTITY_MAP false true false false DYNAMIC true false false false NCOPIES 1 1 1 1
其中“N/A”指明了一个依赖于实现的结果。为阐述NCOPIES的使用,考虑:
LOGICAL BOZO(20,20),RONALD_MCDONALD(20)
!HPF$ TEMPLATE EMMETT_KELLY(100,100)
!HPF$ ALIGN RONALD_MCDONALD(I) WITH BOZO(I,*)
!HPF$ ALIGN BOZO(J,K) WITH EMMETT_KELLY(J,5*K)
调用HPF_ALIGNMENT(RONALD_MCDONALD,NCOPIES=NC)将NC置为20。现在考虑:
LOGICAL BOZO(20,20),RONALD_MCDONALD(20)
!HPF$ TEMPLATE WILLIE_WHISTLE(100)
!HPF$ ALIGN RONALD_MCDONALD(I) WITH BOZO(I,*)
!HPF$ ALIGN BOZO(J,*) WITH WILLIE_WHISTLE(5*J)
调用HPF_ALIGNMENT(RONALD_MCDONALD,NCOPIES=NC)将NC置为1。
可选参数:AXIS_TYPE, AXIS_INFO, PROCESSORS_RANK,PROCESSORS_SHAPE, PLB, PUB, PSTRIDE, LOW_SHADOW, HIGH_SHADOW
描述:HPF_DISTRIBUTION子程序返回与一个变量相关联的根本对准目标的分配信息。
分类:映射查询子程序。
参数:
DISTRIBUTEE:
可以是任意类型。它可以是标量或有值的数组。不能是连续的。不能是一个已释放的指针或一个尚未分配空间的可分配数组。它是一个INTENT(IN)参数。
AXIS_TYPE(可选的):
必须是缺省字符型的一维数组。虽然为包含完整的值,其长度必须至少为9,但是允许它为任意长度。就好象通过一个字符内部赋值语句将它的元素置为下面的值。它的大小必须至少等于DISTRIBUTEE所根本对准的对准目标的维数;该值可由TEMPLATE_RANK中的HPF_TEMPLATE所返回。它是一个INTENT(OUT)参数。它的第i个元素包含了对准目标第i维的分配信息。HPF定义了下列值(实现时可定义其它的值):
‘BLOCK’:该维以BLOCK方式分配。AXIS_INFO的相应元素包含了块的大小。
‘GEN_BLOCK':该维以BLOCK(array)方式分配。AXIS_INFO的相应元素值依赖于实现。
‘COLLAPSED’:该维是坍塌的(用*说明分配)。AXIS_INFO的相应元素值依赖于实现。
‘CYCLIC’:该维以CYCLIC方式分配。AXIS_INFO的相应元素包含了块的大小。
‘INDIRECT’:该维以INDIRECT(map-array)方式分配。AXIS_INFO的相应元素值依赖于实现。
AXIS_INFO(可选的):
必须是缺省整型的一维数组,且大小至少等于DISTRIBUTEE所根本对准的对准目标的维数(该值可由TEMPLATE_RANK中的HPF_TEMPLATE所返回)。它是一个INTENT(OUT)参数。AXIS_INFO的第i个元素包含了DISTRIBUTEE所根本对准目标第i维的BLOCK或CYCLIC分配的块大小;如果该维是一个坍塌维,则其值依赖于实现。
PROCESSORS_RANK(可选的):
必须是缺省整型标量。其值被置为分配DISTRIBUTEE的处理器排列的维数。它是一个INTENT(OUT)参数。
PROCESSORS_SHAPE(可选的):
必须是缺省整型一维数组且其大小至少等于PROCESSORS_RANK中所返回的值m。它是一个INTENT(OUT)参数。它的前m个元素被置为映射DISTRIBUTEE的处理器排列的形状。(可能有必要调用HPF_DISTRIBUTEE两次,第一次得到PROCESSORS_RANK的值以便分配PROCESSORS_SHAPE)
PLB(可选的):
必须是缺省整型一维数组且大小至少等于DISTRIBUTEE所根本对准的对准目标的维数。它是一个INTENT(OUT)参数。第i个元素被置为DISTRIBUTEE根本对准目标第i维所映射到的最小处理器索引号;如果该维是坍塌的,则PLB的相应元素依赖于实现。返回值的范围是1到ei,其中ei是DISTRIBUTEE根本对准目标指定维所映射到的处理器排列维的范围。
PUB(可选的):
必须是缺省整型一维数组且大小至少等于DISTRIBUTEE所根本对准的对准目标的维数。它是一个INTENT(OUT)参数。第i个元素被置为DISTRIBUTEE根本对准目标第i维所映射到的最大处理器索引号;如果该维是坍塌的,则PUB的相应元素依赖于实现。返回值的范围是1到ei,其中ei是DISTRIBUTEE根本对准目标指定维所映射到的处理器排列维的范围。
PSTRIDE(可选的):
必须是缺省整型一维数组且大小至少等于DISTRIBUTEE的维数。它是一个INTENT(OUT)参数。第i个元素被置为DISTRIBUTEE的第i维进行映射时所使用的ONTO子句里的处理器间的步长;如果该维是坍塌的,则PSTRIDE的相应元素被置为0。
LOW_SHADOW(可选的):
必须是缺省整型的一维数组,且大小至少等于DISTRIBUTEE所根本对准的对准目标的维数(该值可由TEMPLATE_RANK中的HPF_TEMPLATE所返回)。它是一个INTENT(OUT)参数。LOW_SHADOW的第i个元素包含了DISTRIBUTEE根本对准目标第i维的BLOCK或CYCLIC分配里的下边阴影宽度;如果该维是一个坍塌维,则其值依赖于实现。
HIGH_SHADOW(可选的):
必须是缺省整型的一维数组,且大小至少等于DISTRIBUTEE所根本对准的对准目标的维数(该值可由TEMPLATE_RANK中的HPF_TEMPLATE所返回)。它是一个INTENT(OUT)参数。HIGH_SHADOW的第i个元素包含了DISTRIBUTEE根本对准目标第i维的BLOCK或CYCLIC分配里的上边阴影宽度;如果该维是一个坍塌维,则其值依赖于实现。
例子:给定6.7.15节例子中的说明,且假定实际映射与指令指定的相同,HPF_DISTRIBUTION的结果是:
A B PI ————————————————————————————— AXIS_TYPE ['BLOCK','BLOCK'] ['CYCLIC','BLOCK'] [ ] AXIS_INFO [10,10] [1,15] [ ] PROCESSORS_SHAPE [4,2] [2,2] [ ] PROCESSORS_RANK 2 2 0 PLB [4,1] [2,1] [ ] PUB [1,2] [3,2] [ ] PSTRIDE [-1,1] [1,1] [ ]
可选参数:TEMPLATE_RANK,LB,UB,AXIS_TYPE,AXIS_INFO,NUMBER_ALIGNED,DYNAMIC
描述:HPF_TEMPLATE子程序返回与一个变量相关联的根本对准目标的信息;HPF_TEMPLATE所返回的是从根本对准目标的角度所看到的变量的信息,而HPF_ALIGNMENT所返回的信息则是从变量的角度所看到的。
分类:映射查询子程序。
参数:
ALIGNEE:
可以是任意类型。可以是标量或有值的数组。不能是一个假定大小的数组。不能是一个已释放的指针或一个尚未分配空间的可分配数组。它是一个INTENT(IN)参数。
如果ALIGNEE具有指针属性,则返回其目标的对准信息。目标不能是一个假定大小的哑参或者假定大小哑参的一个区域。
TEMPLATE_RANK(可选的):
必须是缺省整型的标量。它是一个INTENT(OUT)参数。它被置为根本对准目标的维数。由于坍塌和重复使得它不同于ALIGNEE的维数。
LB(可选的):
必须是缺省整型且是一维的。其大小至少等于ALIGNEE所根本对准的对准目标的维数。这是TEMPLATE_RANK中所返回的值。它是一个INTENT(OUT)参数。LB的第i个元素包含了第i个模板维所定义的对准目标的下界。
UB(可选的):
必须是缺省整型且是一维的。其大小至少等于ALIGNEE所根本对准的对准目标的维数;这是TEMPLATE_RANK中所返回的值。它是一个INTENT(OUT)参数。UB的第i个元素包含了第i个模板维所定义的对准目标的下界。
AXIS_TYPE(可选的):
必须是缺省字符型的一维数组。虽然为包含完整的值,其长度必须至少为10,但是允许它为任意长度。就好象通过一个字符内部赋值语句将它的元素置为下面的值。它的大小必须至少等于ALIGNEE所根本对准的对准目标的维数;该值可由TEMPLATE_RANK中所返回。它是一个INTENT(OUT)参数。它的第i个元素包含了对准目标第i维的信息。HPF定义了下列值(实现时可定义其它的值):
‘NORMAL’:对准目标的各维具有与它对准的ALIGNEE的维。对于被赋成这一值的AXIS_TYPE的元素,AXIS_INFO的相应元素被置成与这个对准目标维对准的ALIGNEE的维数。
‘REPLICATED’:ALIGNEE沿这一对准目标维重复。对于被赋成这一值的AXIS_TYPE的元素,AXIS_INFO的相应元素被置成沿这一对准目标维的ALIGNEE的拷贝数。
‘SINGLE’:ALIGNEE与对准目标维的一个坐标对准。对于被赋成这一值的AXIS_TYPE的元素,AXIS_INFO的相应元素被置成ALIGNEE所对准的对准目标的坐标。
AXIS_INFO(可选的):
必须是缺省整型的一维数组,且大小至少等于ALIGNEE所根本对准的对准目标的维数;该值可由TEMPLATE_RANK中所返回。它是一个INTENT(OUT)参数。见上面AXIS_TYPE的描述。
NUMBER_ALIGNED(可选的):
必须是缺省整型标量。它是一个INTENT(OUT)参数。它被置成与根本对准目标对准的全部变量数。如果对准目标被重分配,则该值是被移动的变量数目。
DYNAMIC(可选的):
必须是缺省逻辑型标量。它是一个INTENT(OUT)参数。如果对准目标具有DYNAMIC属性,则其值为真;否则其值为假。
例子:给定6.7.15节例子中的说明,且假定实际映射与指令指定的相同,HPF_TEMPLATE的结果是:
A C D ————————————————————————————— LB [1,1] [1,1] [1,1] UB [40,20] [40,20] [40,20] AXIS_TYPE ['NORMAL', ['NORMAL', ['NORMAL', 'NORMAL'] 'NORMAL'] 'SINGLE'] AXIS_INFO [1,2] [3,1] [1,4] NUMBER_ALIGNED 3 3 3 TEMPLATE_RANK 2 2 2 DYNAMIC false false false
描述:返回与ARRAY相关联的根本对准目标第TEMPLATE_DIM维的间接分配中所使用的映射数组。
分类:映射查询子程序。
参数:
ARRAY:
可以是任意类型。不能是标量。不能是连续的。不能是一个已释放的指针或一个尚未分配空间的可分配数组。它是一个INTENT(IN)参数。
TEMPLATE_DIM:
必须是缺省整型标量。它的值必须在1和ARRAY的根本对准目标的维数之间。它是一个INTENT(IN)参数。
MAP_ARRAY:
必须是缺省整型的一维数组。它的大小必须至少等于分配与ARRAY相关联的根本对准目标的处理器排列的第PROCESSORS_DIM维的范围。它是一个INTENT(OUT)参数。MAP_ARRAY的第i个元素被置为ARRAY根本对准目标的第i个元素沿TEMPLATE_DIM维所映射到的处理器索引号。如果ARRAY根本对准目标的TEMPLATE_DIM维是坍塌的,则结果值的所有元素都为1。
例子:给定定义
DIMENSION A(2)
!HPF$ TEMPLATE T(4,8)
!HPF$ ALIGN A(I,*) WITH T(2*I,5)
!HPF$ PROCESSORS PROCS(2,2)
!HPF$ DISTRIBUTE T(INDIRECT((/1,2,2,1/)),BLOCK((/3,5/))) ONTO PROCS
假定实际映射与指令所指定的相同,则调用HPF_MAP_ARRAY(A,TEMPLATE_DIM=1,MAP_ARRAY=M)后,M的值为
。调用HPF_MAP_ARRAY(A,TEMPLATE_DIM=2,MAP_ARRAY=M)后,M的值为。
描述:返回映射到处理器排列第PROCESSORS_DIM维每个元素的ARRAY的根本对准目标的元素个数,ARRAY的根本对准目标在该处理器排列上进行分配。
分类:映射查询子程序。
参数:
ARRAY:
可以是任意类型。不能是标量。不能是连续的。不能是一个已释放的指针或一个尚未分配空间的可分配数组。
PROCESSORS_DIM:
必须是缺省整型的标量。其值必须介于1和分配ARRAY根本对准目标的处理器排列维数之间。
NUMBER_MAPPED:
必须是缺省整型的一维数组。其大小必须至少等于分配ARRAY根本对准目标的处理器排列第PROCESSORS_DIM维的范围。NUMBER_MAPPED的第i个元素被置为ARRAY根本对准目标某一维的元素数,这些元素被映射到分配ARRAY根本对准目标的处理器排列的第PROCESSORS_DIM维的第i个处理器上。如果分配ARRAY根本对准目标的处理器排列的第PROCESSORS_DIM维与一个BLOCK分配的维相关脸,则MAP_ARRAY被置为用于分配该维的块大小数组。
例子:给定定义
DIMENSION A(2,40)
!HPF$ TEMPLATE T(4,8,4,16)
!HPF$ ALIGN A(I,*) WITH T(2*I,5,*,*)
!HPF$ PROCESSORS PROCS(2,2,3)
!HPF$ DISTRIBUTE T(INDIRECT((/2,2,1,2/)),BLOCK((/3,5/)),*,BLOCK) ONTO
PROCS
假定实际映射与指令所指定的相同,则调用HPF_NUMBER_MAPPED(A,PROCESSORS_DIM=1,NUMBER_MAPPED=M)后,M的值为。调用HPF_NUMBER_MAPPED(A,PROCESSORS_DIM=2,NUMBER_MAPPED=M)后,M的值为。调用HPF_NUMBER_MAPPED(A,PROCESSORS_DIM=3,NUMBER_MAPPED=M)后,M的值为。
Copyright: NPACT |