正在加载图片...
aF( float*)malloc( floatsize*m*N) 储器中离主对角线最近的行块元 e=(float*)malloc( floatsize"m*N) 素进行消去 b=(int")malloc(intsize"m); for(F=myid·m;i<(myid+1)*m-1计+) bt=(float)malloc(floatsize"N) b(float)malloc(floatsize"m) om, tj%m; b(float")malloc(floatsizem) /消去a(rj)元素* ZF(float)malloc(floatsize*m) if((, I=0) zF(float)malloc(floatsize"m) templ=(float")malloc(floatsize4): mp2=(foat· mallow( fontsize4·p) g=(a(tjr-a(r, i))2: if((myid==p-l)&&(myid%21=0)) sqrt(ff+g·g) buffer(float")malloc(floatsize*m/2"N); sinl=h/sqrt(2(1+ buffer=(float)malloc(floatsize"m/2 N) buffet=(float*)malloc(floatsize*m*N) bqq a(r, i)*sinl*sinI buf(int)malloc(intsize" m); +al(t)cosl cosl 0号处理器采用行块划分将矩阵A和I划分 bpq=0; bqp=0 为m*N的p块子矩阵,依次发送给1至 p1号处理器 对子块a的第t,r两 行元素进行行变 get ao for(v=0; V<N; v++) if((vl=i)&&(vl=D) se for(0; K<m,i++ *sinI for(v=0; V<N; v++) ∧每轮计算开始,各处理器对其局部存 a(r,ibrva=(float*)malloc(floatsize*m*N); e=(float*)malloc(floatsize*m*N); b=(int*)malloc(intsize*m); br=(float*)malloc(floatsize*N); bt=(float*)malloc(floatsize*N); bi=(float*)malloc(floatsize*m); bj=(float*)malloc(floatsize*m); zi=(float*)malloc(floatsize*m); zj=(float*)malloc(floatsize*m); temp1=(float*)malloc(floatsize*4); temp2=(float*)malloc(floatsize*4*p); if ((myid==p-1)&&(myid%2!=0)) { buffer=(float*)malloc(floatsize*m/2*N); buffee=(float*)malloc(floatsize*m/2*N); buf=(int*)malloc(intsize*m/2); } if ((myid%2!=0)&&(myid!=p-1)) { buffer=(float*)malloc(floatsize*m*N); buffee=(float*)malloc(floatsize*m*N); buf=(int*)malloc(intsize*m); } /*0 号处理器采用行块划分将矩阵 A 和 I 划分 为 m*N 的 p 块子矩阵,依次发送给 1 至 p-1 号处理器*/ if (myid==0) { get_a(); send_a(); } else get_a(); for(i=0;i<m;i++) b(i)=myid*m+i; while (fabs(max)>E) { loop++; /*每轮计算开始,各处理器对其局部存 储器中离主对角线最近的行块元 素进行消去*/ for(i=myid*m;i<(myid+1)*m-1;i++) for(j=i+1;j<=(myid+1)*m-1;j++) { r=i%m; t=j%m; /*消去 a(r,j)元素*/ if(a(r,j)!=0) { f=(-a(r,j)); g=(a(t,j)-a(r,i))/2; h=sgn(g)*f/ sqrt(f*f+g*g); sin2=h; sin1=h/sqrt(2*(1+ sqrt(1-h*h))); cos1=sqrt(1-sin1*sin1); bpp=a(r,i)*cos1*cos1 +a(t,j)*sin1*sin1 +a(r,j)*sin2; bqq=a(r,i)*sin1*sin1 +a(t,j)*cos1*cos1 -a(r,j)*sin2; bpq=0; bqp=0; /*对子块 a 的第 t,r 两 行元素进行行变 换*/ for(v=0;v<N;v++) if ((v!=i)&&(v!=j)) { br[v]=a(r,v)*cos1 +a(t,v)*sin1; a(t,v)=-a(r,v) *sin1 +a(t,v)*cos1; } for(v=0;v<N;v++) if ((v!=i)&&(v!=j)) a(r,v)=br[v];
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有