2022年Cannon矩阵乘法的MPI实现及性能分析 .pdf
![资源得分’ 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)
《2022年Cannon矩阵乘法的MPI实现及性能分析 .pdf》由会员分享,可在线阅读,更多相关《2022年Cannon矩阵乘法的MPI实现及性能分析 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include #include #include #include #include #include MPI_Status status; double *A, *B, *C; /C=A*B double *a,*b,*c; / 各个进程的缓冲区int n; / 矩阵的行列数int np; / 每个进程控制的小矩阵的行列数int p,rank; / 进程个个数、当前进程的编号,笛卡尔进程编号double *tempa, *tempb; void ProduceABC(); / 在根处理器中生成矩阵AB,初始化矩阵C void PrintABC();/ 输出结果void ScatterAB
2、();/ 分发矩阵AB 中的元素到各个进程中void MainProcess(); /cannon 算法的主过程void collectC(); / 收集结果矩阵C void 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(r
3、ank = 0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - printf( 请输入矩阵的行列数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*s
4、izeof(double); b = (double*)malloc(np*np*sizeof(double); c = (double*)malloc(np*np*sizeof(double); memset(c, 0, np*np*sizeof(double); tempa = (double*)malloc(np*np*sizeof(double); tempb = (double*)malloc(np*np*sizeof(double); if(rank = 0) /在根处理器中为矩阵ABC 分配空间A = (double*)malloc(n*sizeof(double*); B =
5、(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*)malloc(n*sizeof(double); Ci = (double*)malloc(n*sizeof(double); ProduceABC(); / 在根处理器中随机生成矩阵AB ,初始化矩阵C ScatterAB();/ 分发矩阵AB 中的元素到各个进程中 名师资料总结 - - -精品资料欢迎
6、下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - else MPI_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(); /cannon 算法的主过程if(rank = 0) collectC(
7、); / 收集结果矩阵C PrintABC(); / 输出结果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); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
8、 - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - free(tempa); free(tempb); 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 ScatterA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Cannon矩阵乘法的MPI实现及性能分析 2022 Cannon 矩阵 乘法 MPI 实现 性能 分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内