好文档 - 专业文书写作范文服务资料分享网站

【DOC】-矩阵相乘的并行算法的设计与实现

天下 分享 时间: 加入收藏 我要投稿 点赞

【DOC】-矩阵相乘的并行算法的设计与实现

矩阵相乘的并行算法的设计与实现 仲恺农业工程学院实验报告纸

计算机科学与工程学院(院、系) 网络工程 专业 083 班 组 并行计算 应用试验 课

实验三 矩阵相乘的并行算法的设计与实现 一、 实验目的

理解和掌握矩阵相乘的并行算法的设计思想以及实现原理 二、 实验内容

编译和运行一个两矩阵相乘算法的并行程序 三、 实验步骤

1 使用vi编辑器输入并行计算的代码,保存在multi.c中 #include #include \#define NRA 62 #define NCA 15 #define NCB 7 #define MASTER 0 #define FROM_MASTER 1 #define FROM_WORKER 2 MPI_Status status;

int main(int argc, char *argv[]) {

int numtasks, taskid, numworkers, source, dest, nbytes, mtype, intsize, dbsize, rows,

averow,extra,offset, i,j,k, count;

double a[NRA][NCA],b[NCA][NCB],c[NRA][NCB]; intsize = sizeof(int); dbsize = sizeof(double); 第 1 页 共 7 页

MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&taskid); MPI_Comm_size(MPI_COMM_WORLD,&numtasks); numworkers = numtasks-1; if(taskid==MASTER) { printf(\= %d\\n\a[i][j]=i+j; for(i=0;i

averow=NRA/numworkers; extra=NRA%numworkers; offset=0; mtype=FROM_MASTER;

for(dest=1;dest<=numworkers;dest++) { rows=(dest<=extra)?averow+1:averow; printf(\

MPI_Send(&offset,1,MPI_INT,dest,mtype,MPI_COMM_WORLD);

MPI_Send(&rows,1,MPI_INT,dest,mtype,MPI_COMM_WORLD); count=rows*NCA;

MPI_Send(&a[offset][0],count,MPI_DOUBLE,dest,mtype,MPI_COMM_WORLD); count=NCA*NCB;

MPI_Send(&b,count,MPI_DOUBLE,dest,mtype,MPI_COMM_WORLD); offset=offset+rows; } mtype=FROM_WORKER; for(i=1;i<=numworkers;i++) { source = i;

MPI_Recv(&offset,1,MPI_INT,source,mtype,MPI_COMM_WORLD,&status); MPI_Recv(&rows,1,MPI_INT,source,mtype,MPI_COMM_WORLD,&status); count=rows*NCB;

MPI_Recv(&c[offset][0],count,MPI_DOUBLE,source,mtype,MPI_COMM_WORLD,&status); } printf(\{ printf(\printf(\第 2 页 共 7 页

if(taskid>MASTER) { mtype=FROM_MASTER; source=MASTER;

printf(\

MPI_Recv(&offset,1,MPI_INT,source,mtype,MPI_COMM_WORLD,&status); printf(\

MPI_Recv(&rows,1,MPI_INT,source,mtype,MPI_COMM_WORLD,&status); printf(\

count=rows*NCA;

MPI_Recv(&a,count,MPI_DOUBLE,source,mtype,MPI_COMM_WORLD,&status); printf(\

count=NCA*NCB;

MPI_Recv(&b,count,MPI_DOUBLE,source,mtype,MPI_COMM_WORLD,&status); printf(\

for(k=0;k

c[i][k]=c[i][k]+a[i][j]*b[j][k]; }

mtype=FROM_WORKER;

printf(\

MPI_Send(&offset,1,MPI_INT,MASTER,mtype,MPI_COMM_WORLD); MPI_Send(&rows,1,MPI_INT,MASTER,mtype,MPI_COMM_WORLD); MPI_Send(&c,rows*NCB,MPI_DOUBLE,MASTER,mtype,MPI_COMM_WORLD); printf(\

}

MPI_Finalize(); return 0; }

2 编译multi.c

mpicc –o multi.o multi.c

3 启动mpd后台程序 mpd&

4 在单机上运行multi.o mpirun –np 10 ./multi.o 5 在多台计算机上运行multi.o (1) 编辑并行计算的主机文件nodelist node1:5 node2:4 node3:8

(2) 运行并行计算程序

mpirun -machinefile nodelist -np 2 ./multi.o 四、 实验结果 第 3 页 共 7 页 Master=0,mtype=1 Master=0,mtype=1

Number of worker tasks = 9 sending 7 rows to task 1 sending 7 rows to task 2 sending 7 rows to task 3 sending 7 rows to task 4 sending 7 rows to task 5 sending 7 rows to task 6 sending 7 rows to task 7 sending 7 rows to task 8

【DOC】-矩阵相乘的并行算法的设计与实现

【DOC】-矩阵相乘的并行算法的设计与实现矩阵相乘的并行算法的设计与实现仲恺农业工程学院实验报告纸计算机科学与工程学院(院、系)网络工程专业083班组并行计算应用试验课实验三矩阵相乘的并行算法的设计与实现一、实验目的理解和掌握矩阵相乘的并行算法的设计思想以及实现原理二、实验内容
推荐度:
点击下载文档文档为doc格式
7qa1t7ugxa2p7v43zg0p6rgfk15t3500h9z
领取福利

微信扫码领取福利

微信扫码分享