一、向量处理方式
1)横向处理方式
2)纵向处理方式
3)纵横处理方式
下面以计算表达式 D = A * ( B + C )
(1)横向处理方式
逐个求出结果向量的各个元素
d1=a1×(b1+c1)
d2=a2×(b2+c2)
…
dN=aN×(bN+cN)
逐个求D中的N个分量,先进行相加k←b1+c1,其中k为暂存单元,然后相乘d1←k×a1 。
在每个向量元素的加乘运算中,都会发生数据相关的情况,而且当采用静态流水线时,还要进行2次
乘和加功能的转换。这样共会出现N次相关和2N次功能转换。因此,这种横向加工方式只适合于标量
循环算法,不适合于向量流水处理。
(2)纵向处理方式
纵向(垂直)加工方式:先对所有元素执行一种相同的运算,再对所有元素执行另一种相同的运算。
先算:
k1=b1+c1
k2=b2+c2
…
kN=bN+cN
再算:
d1=a1×k1
d2=a2×k2
…
dN=aN×kN
在两条向量指令间仅有一次数据相关,流水线功能的切换只需一次。
(3)纵横处理方式
对向量元素分组,每个组内采用纵向加工方式,组之间采用横向加工方式。
因为向量寄存器的长度有限。当向量长度超过向量寄存器可表示的最大限度n时,就必须分组加以处理。
设向量长度为N,则:N=s×n+r
其中n≤N,r<n,n、s、r均为正整数,s为组数,r为余数(余下的部分也作为一组处理)。
第一组计算:
k1~n=b1~n+c1~n
d1~n=a1~n×k1~n
第二组计算:
kn+1~2n=bn+1~2n+cn+1~2n
dn+1~2n=an+1~2n×kn+1~2n
…
每组内各有两条向量指令,各组内有一次数据相