3. 累加和
  把N个数的顺序相加变为并行相加。
  
  串行求和的FORTRAN程序如下:
  C(-1)=0
  DO 10 I=0, N
  10 C(I)=C(I-1)+A(I)
  在并行处理机上,采用递归加法,FORTRAN程序如下:
  DO 10 I=0,log2N-1
  10 A=A+SRL(A, 2**I) ;把A向量逻辑右移个PE
  只需做log2N次加法。
  当N=8时,在SISD计算机要用8次加法时间。如果在并行处理机上,采用成对递归相加的算法,则只需log2 8=3次加法时间就够了。首先,  原始数据A(I),,存放在8个PEM的a单元中,然后按照下面的步骤求累加和:
  第一步 置全部PE为活动状态
  第二步 全部A(I), , 从PE的a单元读到相应PE的RGA中;
  第三步 令K=0;
  第四步 全部PE的(RGA)转送到RGR;
  第五步 全部PE的(RGR)经过互连网络向右传送2k步距;
  第六步 ;
  第七步 置PE0至PEj为不活动状态;
  第八步 处于活动状态的PE执行(RGA):=(RGA)+(RGR)操作;
  第九步 k:=k+1'
  第十步 若k<3, 则转回第四步,否则继续往下执行;
  第十一步 置全部PE为活动状态;
  第十二步 全部PE的(RGA)存入相应PEM的a+1单元中。
  图10.10为其计算过程示意图。其中,有0输入控制的处理单元表示被屏蔽。
图10.10 SIMD计算机上求累加和的计算过程示意图

  采用SIMD并行算法,运算速度提高:加速比为N/log2N倍,运算次数增加:从N次增加到N·log2N次,效率降低:实际效率为1/log2N

  例如:N=1024,速度提高100倍,运算参数增加10到倍,效率只有1/10
  如果N=220,即100万个数求和,速度可以提高5万倍。

  这种方法也称为级联求和,或递归求和。与流水线中采用的方法相同,它利用结合律来提高并行度。

  可以利用结合律求解的问题还有:求最大数,求最小数,a与b进行异或运算,a与b进行逻辑或运算,a与b进行逻辑与运算。求a与b的点积,等等。