正在加载图片...
∧各处理器通过扩展收集操 对子块e的第,j两列 作将自己的旋转参数及 元素进行列变换 第i列和第j列的列号按 r(V=0, V<m, v++ 处理器编号连接起来并 广播给所有处理器 +e(v,)"sinl; MPI Allgather( templ, 4, MPI FLOAT, temp2, 4 e(viFe(v, i*(-sinD) MPI FLOAT. e(vj)·cosl MPI COMM WORLD) for(v=0; V<m v++) e(v, iBrv 各处理器在收到这些旋转 参数和列号之后,按 /*对子块a的第i,j两 0,1,…p-1的顺序依次读 列元素进行列变 取旋转参数及列号并对 其m行中的第i列和第 r(v=0,v<m,v++ 列元素进行旋转列变 if((v!=r&&(v=t) 换 af(v, ibv templ[o=sin1; *cl+a(zjl) a(zjD= templ[3(float)j (-a(zi1) a(z JD) else eee templ[3]=0.0, z[2}=e(zi1)/*对子块 e 的第 i, j 两列 元素进行列变换*/ for(v=0;v<m;v++) br[v]=e(v,i)*cos1 +e(v,j)*sin1; for(v=0;v<m;v++) e(v,j)=e(v,i)*(-sin1) +e(v,j)*cos1; for(v=0;v<m;v++) e(v,i)=br[v]; /*对子块 a 的第 i,j 两 列元素进行列变 换*/ for(v=0;v<m;v++) if ((v!=r)&&(v!=t)) { bi[v]=a(v,i)*cos1 +a(v,j)*sin1; a(v,j)=-a(v,i) *sin1 +a(v,j)*cos1; } for(v=0;v<m;v++) if ((v!=r)&&(v!=t)) a(v,i)=bi[v]; a(r,i)=bpp; a(t,j)=bqq; a(r,j)=bpq; a(t,i)=bqp; temp1[0]=sin1; temp1[1]=cos1; temp1[2]=(float)i; temp1[3]=(float)j; } else { temp1[0]=0.0; temp1[1]=0.0; temp1[2]=0.0; temp1[3]=0.0; } /*各处理器通过扩展收集操 作将自己的旋转参数及 第 i列和第 j列的列号按 处理器编号连接起来并 广播给所有处理器*/ MPI_Allgather(temp1,4, MPI_FLOAT,temp2,4, MPI_FLOAT, MPI_COMM_WORLD); current=0; /*各处理器在收到这些旋转 参数和列号之后,按 0,1,…,p-1的顺序依次读 取旋转参数及列号并对 其 m 行中的第 i 列和第 j 列元素进行旋转列变 换*/ for(v=1;v<=p;v++) { s1=temp2[(v-1)*4+0]; c1=temp2[(v-1)*4+1]; i1=temp2[(v-1)*4+2]; j1=temp2[(v-1)*4+3]; if ((s1!=0.0)||(c1!=0.0) ||(i1!=0)||(j1!=0)) { if (myid!=current) { for(z=0;z<m;z++) { zi[z]=a(z,i1) *c1+a(z,j1) *s1; a(z,j1)= s1* (-a(z,i1)) +a(z,j1) *c1; } for(z=0;z<m;z++) a(z,i1)=zi[z]; for(z=0;z<m;z++) zi[z]=e(z,i1) *c1+e(z,j1) *s1;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有