正在加载图片...
void Environment Finalize(float *a, float*b, float for(=0,i<M,i++) for(=0, J<M,J++) fscanf(fdA, %f, A+i*M+D fscanf(fdA, "%f", B+i) fclose( fdA) 0号处理器将M广播给所有处理器* int main(int argc, char**argv) MPI Bcast(&M, I, MPI INT,O, API COMM WORLD) int i,j, t, k, my rank, group size; int il 12 if(M%p!=0)m++ Int vw: 各处理器为主行元素建立发送和接收缓冲 float *sum: 分配至各处理器的子矩阵大小为m·M F(float")malloc(sizeof(float)"m*M) float Imax. 棒分配至各处理器的子向量大小为m b=(float)malloc(sizeof(float "m); float *b sum=(float)malloc(sizeof(float)"m); FILE *fdA 'fdB if(a=NULL b==NULLE=NULLI MPI Init(&argc, &argv ); sum=NULL==NULL shift-=NULL MPI Comm size(MPI COMM WORLD, fatal("allocate errorin"); MPI Comm rank(MPI COMM WORLD for(=0,<Mi++) &my rank) shift=i 0号处理器采用行交叉划分将矩阵A划分为 大小为m*M的p块子矩阵将B划分为 大小为m的p块子向量,依次发送给1 fdA=fopen(dataIn. txt,r"); 至p-l号处理器* fscanf(fdA, "%d %d",&M, &N) if (my rank==0) if (MI=N-1) for(F=0;<m;H++) printf("the input is wrong"); for(F=0 j<M; j++) ex(1) a(J)=A(’pJ)} void Environment_Finalize(float *a,float *b,float *x,float *f) { free(a); free(b); free(x); free(f); } int main(int argc, char **argv) { int i,j,t,k,my_rank,group_size; int i1,i2; int v,w; float temp; int tem; float *sum; float *f; float lmax; float *a; float *b; float *x; int *shift; FILE *fdA,*fdB; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD, &group_size); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); p=group_size; if (my_rank==0) { fdA=fopen("dataIn.txt","r"); fscanf(fdA,"%d %d", &M, &N); if (M != N-1) { printf("the input is wrong\n"); exit(1); } A=(float *)malloc(floatsize*M*M); B=(float *)malloc(floatsize*M); for(i = 0; i < M; i++) { for(j = 0; j < M; j++) fscanf(fdA,"%f", A+i*M+j); fscanf(fdA,"%f", B+i); } fclose(fdA); } /*0 号处理器将 M 广播给所有处理器*/ MPI_Bcast(&M,1,MPI_INT,0, MPI_COMM_WORLD); m=M/p; if (M%p!=0) m++; /*各处理器为主行元素建立发送和接收缓冲 区(M+1) */ f=(float*)malloc(sizeof(float)*(M+1)); /*分配至各处理器的子矩阵大小为 m*M*/ a=(float*)malloc(sizeof(float)*m*M); /*分配至各处理器的子向量大小为 m*/ b=(float*)malloc(sizeof(float)*m); sum=(float*)malloc(sizeof(float)*m); x=(float*)malloc(sizeof(float)*M); shift=(int*)malloc(sizeof(int)*M); if (a==NULL||b==NULL||f==NULL|| sum==NULL||x==NULL||shift==NULL) fatal("allocate error\n"); for(i=0;i<M;i++) shift[i]=i; /*0 号处理器采用行交叉划分将矩阵 A 划分为 大小为 m*M 的 p 块子矩阵,将 B 划分为 大小为 m 的 p 块子向量,依次发送给 1 至 p-1 号处理器*/ if (my_rank==0) { for(i=0;i<m;i++) for(j=0;j<M;j++) a(i,j)=A(i*p,j);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有