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

矩阵相乘的并行算法的设计与实现

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

仲恺农业工程学院实验报告纸

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

学号:200810224311 姓名:李志冬 实验日期:2011-05-19 教师评定

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

一、

实验目的

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

实验内容

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

实验步骤

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); 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(\ for(i=0;i

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(\ for(i=0;iMASTER) { 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

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

四、 实验结果

单机运行结果: 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 sending 6 rows to task 9 Master=0,mtype=1 offset=0

rows=7

a[0][0]=0.000000e+00 b=

after computer after send

Master=0,mtype=1 offset=7 rows=7

a[0][0]=7.000000e+00 b=

after computer after send

Master=0,mtype=1 offset=14 rows=7

a[0][0]=1.400000e+01 b=

after computer after send

Master=0,mtype=1 offset=28 rows=7

8imhg0ajmz3uh255c6he20sz532aec00ccd
领取福利

微信扫码领取福利

微信扫码分享