并行计算累加和祥解.docVIP

  • 11
  • 0
  • 约 8页
  • 2017-04-21 发布于湖北
  • 举报
并行计算课程设计 班级:12级计科一班 姓名:郭慧敏 学号:121013040 一、实验内容: 使用MPI并行程序设计方法设计矩阵加法的并行程序。 随机产生所需的矩阵元素 尽量设计较高的加速比 程序段: 1、方法一:利用MPI_Send和MPI_Recv实现多进程并行 #define MPICH_SKIP_MPICXX #include mpi.h #include stdio.h #includestdlib.h int main(int arg,char ** arv){ int a[10][10]; int b[10][10]; int c[10][10]; int myrank,size,b1,c1,i,j,rows,offset; double end_time,start_time; MPI_Status status; MPI_Init(arg,arv); MPI_Comm_rank(MPI_COMM_WORLD,myrank); MPI_Comm_size(MPI_COMM_WORLD,size); if(myrank==0)printf(当前进程数是:%d\n,size); printf(进程号:%d ,myrank); if(myrank == 0) { //生成三个随机数组a、b、c for (i=0; i10; i++){ for (j=0; j10; j++){ a[i][j] = rand() % 10; b[i][j] = rand() % 10; c[i][j] = 0; } } //输出a数组的各元素 printf(a[][]\n) ; for(i=0; i10; i++){ for (j=0; j10; j++){ printf(%d ,a[i][j]) ; } printf(\n); } //输出a数组的各元素 printf(b[][]\n) ; for(i=0; i10; i++){ for (j=0; j10; j++){ printf(%d ,b[i][j]) ; } printf(\n); } b1=10/(size-1); c1=10%(size-1); offset = 0; for(i=1; isize; i++){ rows = (i = c1) ? b1+1 : b1;//把二维数组按行平均分配给进程 printf(sending %d rows to process %d\n, rows, i); MPI_Send(offset,1,MPI_INT,i,0, MPI_COMM_WORLD);//发送行偏移量 MPI_Send(rows,1,MPI_INT,i,0, MPI_COMM_WORLD);//发送行数 MPI_Send(a[offset][0],rows*10,MPI_INT,i,0, MPI_COMM_WORLD);//把数组a元素发送给其他进程 MPI_Send(b[offset][0],rows*10,MPI_INT,i,0, MPI_COMM_WORLD);//把数组b元素发送给其他进程 offset += rows; } } else{ MPI_Recv(offset,1,MPI_INT,0,0,MPI_COMM_WORLD,status); MPI_Recv(rows,1,MPI_INT,0,0,MPI_COMM_WORLD,status); MPI_Recv(a,rows*10,MPI_INT,0,0,MPI_COMM_WORLD,status); MPI_Recv(b,rows*10,MPI_INT,0,0,MPI_COMM_WORLD,status); //矩阵加法 for(i=0; irows; i++){ for (j=0; j10; j++){ c[i][j] = a[i][j]+b[i][j]; } } } if(myrank != 0) {

文档评论(0)

1亿VIP精品文档

相关文档