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向量逻辑右移 ![]() 只需做log2N次加法。 当N=8时,在SISD计算机要用8次加法时间。如果在并行处理机上,采用成对递归相加的算法,则只需log2 8=3次加法时间就够了。首先, 原始数据A(I), ![]() 第一步 置全部PE为活动状态 第二步 全部A(I), ![]() 第三步 令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万倍。 这种方法也称为级联求和,或递归求和。与流水线中采用的方法相同,它利用结合律来提高并行度。 |