(infor v=0 to n-l do if((v≠)and(v≠)then end if end for (iv)for I=0 to m-l do /*对两个主列在本处理器内的其余元素的旋转变换* if(v≠r)and(v≠)then biv]=av, i* av小]*sinl av=-alv i*sinl +alv* cosl if(v≠p)and(v≠D))then a[, i]= bilv] a[r, i]=bpp, alt=bqg, a[r=bpq, a[t, i]=bqp /*用 templ保存本处理器主行的行号和旋转参数* templ[0]=sinl, templ[l=cosl templ[2=(float)i, templ]=(float y (vii )Compute templ[0]=0, templ[1=0 templ[2]=0, templ3=0 end if (1.3)将所有处理器empl中的旋转参数及主行的行号 按处理器编号连接起来并广播给所有处理器,存于temp2中 (1.5)for I=l to p do *根据temp2中的其它处理器的旋转参数及主行的行号对相关的 列在本处理器的部分进行旋转变换* (i)Compute sl=temp2[(-1)*4+0],cl=temp2(y-1)*4+1], il=(int)temp2((1-1)*4+2],j1=(int )temp2[(1-1)*4+3] (i)if(sl、cl、il、jl中有一不为o)then if (my-rank current)then zi[-=a[=,1]'cl+a{=/1]*sl q[=/l]=a[=,]*sl+a[=/1]*cl end for for=0 to m- doend for (iii)for v=0 to n-1 do if ((v ≠ i) and ( v ≠ j)) then a[r,v]=br[v] end if end for (iv)for v=0 to m-1 do /*对两个主列在本处理器内的其余元素的旋转变换*/ if (( v ≠ r) and ( v ≠ t)) then bi[v] = a[v,i]*cos1 + a[v,j]*sin1 a[v,j]= - a[v,i]* sin1 + a[v,j]* cos1 end if end for (v)for v=0 to m-1do if ((v ≠ r) and ( v ≠ t)) then a[v,i]= bi[v] end if end for (vi)Compute: a[r,i]=bpp , a[t,j]=bqq , a[r,j]=bpq , a[t,i]=bqp, /*用 temp1 保存本处理器主行的行号和旋转参数*/ temp1[0]=sin1, temp1[1]=cos1, temp1[2]=(float)i ,temp1[3]= (float)j else (vii)Compute: temp1[0]=0, temp1[1]= 0, temp1[2]= 0 , temp1[3]= 0 end if (1.3)将所有处理器 temp1 中的旋转参数及主行的行号 按处理器编号连接起来并广播给所有处理器,存于 temp2 中 (1.4)current=0 (1.5)for v=1 to p do /*根据 temp2 中的其它处理器的旋转参数及主行的行号对相关的 列在本处理器的部分进行旋转变换*/ (i)Compute: s1=temp2[(v-1)*4+0] , c1=temp2[(v-1)*4+1], i1=(int)temp2[(v-1)*4+2], j1=(int)temp2[(v-1)*4+3] (ii )if (s1、c1、 i1、 j1 中有一不为 0) then if (my-rank ≠ current) then for z=0 to m-1 do zi[z]=a[z,i1]*c1 + a[z,j1]*s1 a[ z,j1]=- a[z,i1]*s1 + a[z,j1]*c1 end for for z=0 to m-1 do