Cannon矩阵乘法的MPI实现及性能分析.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Cannon矩阵乘法的MPI实现及性能分析.doc》由会员分享,可在线阅读,更多相关《Cannon矩阵乘法的MPI实现及性能分析.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include #include #include #include #include #include MPI_Status status;double *A, *B, *C; /C=A*Bdouble *a,*b,*c; /各个进程的缓冲区int n; /矩阵的行列数int np; /每个进程控制的小矩阵的行列数int p,rank; /进程个个数、当前进程的编号,笛卡尔进程编号double *tempa, *tempb;void ProduceABC(); /在根处理器中生成矩阵AB,初始化矩阵Cvoid PrintABC();/输出结果void ScatterAB();/ 分发矩阵A
2、B中的元素到各个进程中void MainProcess(); /cannon算法的主过程void collectC(); /收集结果矩阵Cvoid Mutiply(); /矩阵相乘void Printab();void Printc();int main(int argc, char *argv) int i;double starttime,endtime;MPI_Init(&argc, &argv);MPI_Comm_size(MPI_COMM_WORLD, &p);MPI_Comm_rank(MPI_COMM_WORLD, &rank);if(rank = 0)printf(请输入矩阵的
3、行列数n= ); fflush(stdout);scanf_s(%d, &n);printf(n);MPI_Bcast(&n, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);/ n = atoi(argv1);np = n/(int)sqrt(p);a = (double*)malloc(np*np*sizeof(double);b = (double*)malloc(np*np*sizeof(double);c = (double*)malloc(np*np*sizeof(double);memset(c, 0, np*np*sizeof(double);tempa =
4、 (double*)malloc(np*np*sizeof(double);tempb = (double*)malloc(np*np*sizeof(double); if(rank = 0) /在根处理器中为矩阵ABC分配空间A = (double*)malloc(n*sizeof(double*);B = (double*)malloc(n*sizeof(double*);C = (double*)malloc(n*sizeof(double*); for(i = 0; i n; i+)Ai = (double*)malloc(n*sizeof(double);Bi = (double*)
5、malloc(n*sizeof(double);Ci = (double*)malloc(n*sizeof(double);ProduceABC(); /在根处理器中随机生成矩阵AB,初始化矩阵CScatterAB();/ 分发矩阵AB中的元素到各个进程中 elseMPI_Recv(a, np*np, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD, &status);MPI_Recv(b, np*np, MPI_DOUBLE, 0, 2, MPI_COMM_WORLD, &status); starttime=MPI_Wtime(); /开始时间MainProcess();
6、 /cannon算法的主过程if(rank = 0)collectC(); /收集结果矩阵CPrintABC(); /输出结果endtime=MPI_Wtime(); printf(time used: %lfn,endtime - starttime);for(i = 0; i n; i+)free(Ai);free(Bi);free(Ci);free(A);free(B);free(C);else MPI_Send(c, np*np, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD);free(a);free(b);free(c);free(tempa);free(tem
7、pb);MPI_Finalize();return 0;void ProduceABC()/在根处理器中生成矩阵AB int i,j;for(i=0; in; i+)for(j=0; jn; j+)Aij=1.0;Bij=1.0;Cij=0.0;void PrintABC()/输出结果printf(A00=%fnB00=%fnC00=%fn,A00,B00,C00); void ScatterAB()/ 分发矩阵AB中的元素到各个进程中int imin,imax,jmin,jmax;int sp;int i,j,k,m;for(k=0; kp; k+)/*计算相应处理器所分得的矩阵块在总矩阵中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cannon 矩阵 乘法 MPI 实现 性能 分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内