10.1 扩展内部过程的规格说明 BACKWARD FORWARD


10.1.1 ACTIVE_NUM_PROCS(DIM)

可选参数:DIM

描述:返回当前执行程序的处理器的总个数或者沿处理器数组的一个指定维执行程序的处理器的个数,处理器数组由最内层的ON块所确定。

分类:处理器查询函数。

参数:

DIM(可选的) 必须是整型标量,其值得范围是1DIMn,其中n是处理器数组的维数。

结果类型,类型参数和形状:缺省整型标量。

结果值:结果值等于最内层ON块所确定的处理器数组第DIM维的范围,或者如果不存在DIM,则结果是这个处理器数组的全部元素数。结果总是大于零。在任意ON块的外面,结果与NUMBER_OF_PROCESSORS()的返回值相同。

例子:在下列程序段中

 INTEGER X(16,3)
 !hpf$ TEMPLATE T(16,8)
 !hpf$ PROCESSORS PROCS(4,4)
 !hpf$ ALIGN X(I,J) WITH T(I, 3*J-1)
 !hpf$ DISTRIBUTE T(CYCLIC(2), BLOCK) ONTO PROCS
 !hpf$ ON  (PROCS(:,:)) BEGIN
 !hpf$ ON  HOME(X(2:12:10,:)) BEGIN
 PRINT *,ACTIVE_NUM_PROCS()
 PRINT *,ACTIVE_NUM_PROCS(DIM=1)
 PRINT *,ACTIVE_NUM_PROCS(DIM=2)
 !hpf$ END ON
 !hpf$ END ON

不管运行程序的硬件处理器数组的大小和形状,都打印6,2,3。

10.1.2 ACTIVE_PROCS_SHAPE()

描述:返回当前活动处理器数组的形状,该处理器数组由最内层ON块所确定。

分类:处理器查询函数。

参数:无。

结果类型,类型参数,和形状:结果是一个缺省的整数一维数组,其大小等于最内层ON块所确定的处理器数组的维数。

结果值:结果值是最内层ON块所确定的处理器数组的形状。在任意ON块的外面,结果与PROCESSORS_SHAPE()的返回值相同。

例子:在下列程序段中

 INTEGER X(16,3)
 !hpf$ TEMPLATE T(16,8)
 !hpf$ PROCESSORS PROCS(4,4)
 !hpf$ ALIGN X(I,J) WITH T(I, 3*J-1)
 !hpf$ DISTRIBUTE T(CYCLIC(2), BLOCK) ONTO PROCS
 !hpf$ ON  (PROCS(:,:)) BEGIN
  PRINT *,ACTIVE_PROCS_SHAPE()
  !hpf$ ON HOME(X(2:12:10,:))BEGIN
  PRINT *,ACTIVE_PROCS_SHAPE()
  !hpf$ END ON
 !hpf$ END ON

不管运行程序的硬件处理器数组的大小或形状,都打印|4 4|和|2 3|。

10.1.3 TRANSPOSE(ARRAY,ORDER)

可选参数:ORDER。

描述:对数组的维进行置换(一个一般化的转置)

分类:转换函数。

参数:

ARRAY:可以是任意类型,且必须是有值的数组。

ORDER(可选的):必须是整型,一维,且大小等于ARRAY的维数。其元素必须是(1,2,...,n)的一个置换,其中n等于RANK(ARRAY)。

结果类型,类型参数,和形状:结果是一个与ARRAY具有相同维数,类型和类型参数的数组。其形状满足关系RS(ORDER)==AS,其中RS是结果的形状且AS是SHAPE(ARRAY)。如果不存在ORDER,则它缺省为(n,n-1,...,1),其中n是RANK(ARRAY)。

结果值:结果的元素(j1,j2,...,jn)是ARRAY(jorder(1),jorder(2),...,jorder(n))。

例子:对于一个二维数组,TRANSPOSE(ARRAY)通常是矩阵转置。

如果ARRAY的形状是且ARRAY(1,:,:)是且ORDER是,则结果的形状是;如果R是结果,则R(:,:,1)等于ARRAY(1,:,:)。规则是ARRAY的第i维变成结果的ORDER(i)维。


Copyright: NPACT BACKWARD FORWARD