正在加载图片...
MPI Comm size(MPI COMM WORLD MPI Barrier(MPI COMM WORLD) MPI Comm rank(MPI COMM WORLD Flog(N)og(2) 主循环体:算法步骤(2)*/ p-group size if(myid==0) printf("Stage %d: n", i+1); MPI Barrier(MPI COMM WORLD) if( myid==0) *算法步骤(2.1) starttime=MPI WtimeO MPI Barrier(MPI COMM WORLD 陴处理器0读邻接矩阵* MPI Gather(&c[n myid], n, MPI INT,C, if(myid==0)readAO n MPl INTO MPI Barrier( MPI COMM WORLD); MPI COMM WORLD) MPI Bcast(&N, 1, MPI INT,0, bcast(C); MPI COMM WORLD) MPI Barrier(MPI COMM WORLD) n=N /*算法步骤(2.2)* if(N%p!=0)n++; C to CO; MPI Barrier(MPI COMM WORLD) D=(int*)malloc(sizeof(int) "(n"p)); MPI Gather(&c[nm MPI INT, C, MPI COMM WORLD A=(int")malloc(sizeof( int) *n"N) MPI Gather(&c[n"myid], n, MPI INT, D MPI INTO /初始化数组D,步骤(1)*/ MPI COMM WORLD) or(FO, Kn, i++) Dmyid*n+i]=myid*n+i, MPI Barrier(MPI COMM WORLD) MPI Barrier(MPI COMM WORLD) MPI Gather( &D[myid*n] n, MPI_ INT, D, n, /*算法步骤(23) MPI INT,O, MPI COMM WORLD) MPI Barrier(MPI COMM WORLD) DUFCO] 陴处理器0向其它处理器发送必要数据* 算法步骤(2.4 if(myid==0) for(k=0; k<l; k++ for(=1;<p;H++) MPI Send(&A(in, O), nN CC to CO MPI Gather(&C[n"myid),n, MPI COMM WORLD) MPI INT, C, n, MPI INT,O MPI COMM WORLD) MPI Recv(A, n*N, MPI INT, 0, myid, MPI COMM WORLD, bcast(c) &status); bcast(D)MPI_Comm_size(MPI_COMM_WORLD, &group_size); MPI_Comm_rank(MPI_COMM_WORLD, &myid); p=group_size; MPI_Barrier(MPI_COMM_WORLD); if(myid==0) starttime=MPI_Wtime(); /*处理器 0 读邻接矩阵*/ if(myid==0) readA(); MPI_Barrier(MPI_COMM_WORLD); MPI_Bcast(&N,1,MPI_INT,0, MPI_COMM_WORLD); if(myid!=0){ n=N/p; if(N%p!=0) n++; } D=(int*)malloc(sizeof(int)*(n*p)); C=(int*)malloc(sizeof(int)*(n*p)); if(myid!=0) A=(int*)malloc(sizeof(int)*n*N); /*初始化数组 D,步骤(1)*/ for(i=0;i<n;i++) D[myid*n+i]=myid*n+i; MPI_Barrier(MPI_COMM_WORLD); MPI_Gather(&D[myid*n],n,MPI_INT,D,n, MPI_INT,0,MPI_COMM_WORLD); bcast(D); MPI_Barrier(MPI_COMM_WORLD); /*处理器 0 向其它处理器发送必要数据*/ if(myid==0) for(i=1;i<p;i++) MPI_Send(&A(i*n,0),n*N, MPI_INT,i,i, MPI_COMM_WORLD); else MPI_Recv(A,n*N,MPI_INT, 0,myid,MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); l=log(N)/log(2); /*主循环体:算法步骤(2)*/ for(i=0;i<l;i++){ if(myid==0) printf("Stage %d:\n",i+1); /*算法步骤(2.1)*/ D_to_C(); MPI_Barrier(MPI_COMM_WORLD); MPI_Gather(&C[n*myid],n,MPI_INT,C, n,MPI_INT,0, MPI_COMM_WORLD); print(C); bcast(C); MPI_Barrier(MPI_COMM_WORLD); /*算法步骤(2.2)*/ C_to_C(); print(C); MPI_Barrier(MPI_COMM_WORLD); MPI_Gather(&C[n*myid],n,MPI_INT,C, n,MPI_INT,0, MPI_COMM_WORLD); MPI_Gather(&C[n*myid],n,MPI_INT,D, n,MPI_INT,0, MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); /*算法步骤(2.3)*/ if(myid==0) for(j=0;j<n;j++) D[j]=C[j]; /*算法步骤(2.4)*/ for(k=0;k<l;k++){ bcast(C); CC_to_C(); MPI_Gather(&C[n*myid],n, MPI_INT,C,n,MPI_INT,0, MPI_COMM_WORLD); } bcast(C); bcast(D);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有