欢迎来到天天文库
浏览记录
ID:59224865
大小:440.00 KB
页数:6页
时间:2020-09-09
《分块矩阵乘法的程序性能.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四分块矩阵乘法的程序性能一、实验目的本次实验比较分块矩阵乘法与普通矩阵乘法的性能,并考察分块大小对分块矩阵乘法性能的影响。二、实验原理1、矩阵相乘为简单起见,本次实验矩阵相乘中的矩阵都是方阵,行数和列数都为n。2、程序性能本次实验中考察的程序性能指的是程序的CPU执行时间。在C语言程序中,可以考虑利用clock()函数来计算某段代码执行的CPU时间。注意,clock()的精度为1ms,对于比较小的矩阵相乘,可能精度不够。如果需要使用高精度的计时方法,可以考虑利用CPU内的实时时钟计数器(RTSC),或性能计数器(PerformanceCoun
2、ter)。3、分块矩阵乘法1、普通矩阵乘法是采用三层循环完成,如下图所示。2、分块的矩阵乘法为了利用局部性提高Cache(高速缓存)利用率,采用了如下所示代码。请编写普通矩阵乘法和分块矩阵乘法的实验和测试代码,记录实验结果。另外,本次实验还需要研究不同分块大小对性能的影响,请编写相应的实验和测试代码,并记录实验结果。三、实验步骤voidmmm(double*a,double*b,double*c,intn){inti,j,k;for(i=0;i3、a[i*n+k]*b[k*n+j];}}}}voidmmm2(double*a,double*b,double*c,intn){constintB=10;inti,j,k;inti1,j1,k1;for(i=0;i4、te_time(clock_tbegin,clock_tend){returnstatic_cast(static_cast((end-begin))/static_cast(CLOCKS_PER_SEC));}intmain(){double*a=(double*)malloc(sizeof(double)*n*n);double*b=(double*)malloc(sizeof(double)*n*n);double*c=(double*)malloc(sizeof(double)*n*n);m5、emset(a,0,sizeof(double)*n*n);memset(b,0,sizeof(double)*n*n);memset(c,0,sizeof(double)*n*n);clock_tstart=clock();mmm(a,b,c,n);std::cout<6、结果如下图所示:2、N=150和N=200时,结果如下图所示:3、N=250和N=300时,结果如下图所示:4、N=350和N=400时,结果如下图所示:5、N=450和N=500时,结果如下图所示:6、N=550和N=600时,结果如下图所示:7、N=650和N=700时,结果如下图所示:8、N=750和N=800时,结果如下图所示:9、N=850和N=900时,结果如下图所示:10、N=950和N=1000时,结果如下图所示:五、结果分析1、数据列表如下:N50100150200250300350400450500未分块0.0010.00607、.0190.0450.1140.1840.3730.4460.8661.375分块00.0070.0180.0440.0920.1450.2350.3310.5230.69N5506006507007508008509009501000未分块2.2581.8194.2133.9576.7455.2599.8638.6539.8639.801分块0.8951.1151.6271.8722.4662.7423.6864.2043.6865.4482、数据散点图如下:3、由上图可看出,分块算法比普通算法执行的CPU时间明显缩短了,分块算法更为实用。六、8、实验感想通过本次实验了解了不同算法执行的CPU时间之间的差别。
3、a[i*n+k]*b[k*n+j];}}}}voidmmm2(double*a,double*b,double*c,intn){constintB=10;inti,j,k;inti1,j1,k1;for(i=0;i4、te_time(clock_tbegin,clock_tend){returnstatic_cast(static_cast((end-begin))/static_cast(CLOCKS_PER_SEC));}intmain(){double*a=(double*)malloc(sizeof(double)*n*n);double*b=(double*)malloc(sizeof(double)*n*n);double*c=(double*)malloc(sizeof(double)*n*n);m5、emset(a,0,sizeof(double)*n*n);memset(b,0,sizeof(double)*n*n);memset(c,0,sizeof(double)*n*n);clock_tstart=clock();mmm(a,b,c,n);std::cout<6、结果如下图所示:2、N=150和N=200时,结果如下图所示:3、N=250和N=300时,结果如下图所示:4、N=350和N=400时,结果如下图所示:5、N=450和N=500时,结果如下图所示:6、N=550和N=600时,结果如下图所示:7、N=650和N=700时,结果如下图所示:8、N=750和N=800时,结果如下图所示:9、N=850和N=900时,结果如下图所示:10、N=950和N=1000时,结果如下图所示:五、结果分析1、数据列表如下:N50100150200250300350400450500未分块0.0010.00607、.0190.0450.1140.1840.3730.4460.8661.375分块00.0070.0180.0440.0920.1450.2350.3310.5230.69N5506006507007508008509009501000未分块2.2581.8194.2133.9576.7455.2599.8638.6539.8639.801分块0.8951.1151.6271.8722.4662.7423.6864.2043.6865.4482、数据散点图如下:3、由上图可看出,分块算法比普通算法执行的CPU时间明显缩短了,分块算法更为实用。六、8、实验感想通过本次实验了解了不同算法执行的CPU时间之间的差别。
4、te_time(clock_tbegin,clock_tend){returnstatic_cast(static_cast((end-begin))/static_cast(CLOCKS_PER_SEC));}intmain(){double*a=(double*)malloc(sizeof(double)*n*n);double*b=(double*)malloc(sizeof(double)*n*n);double*c=(double*)malloc(sizeof(double)*n*n);m
5、emset(a,0,sizeof(double)*n*n);memset(b,0,sizeof(double)*n*n);memset(c,0,sizeof(double)*n*n);clock_tstart=clock();mmm(a,b,c,n);std::cout<6、结果如下图所示:2、N=150和N=200时,结果如下图所示:3、N=250和N=300时,结果如下图所示:4、N=350和N=400时,结果如下图所示:5、N=450和N=500时,结果如下图所示:6、N=550和N=600时,结果如下图所示:7、N=650和N=700时,结果如下图所示:8、N=750和N=800时,结果如下图所示:9、N=850和N=900时,结果如下图所示:10、N=950和N=1000时,结果如下图所示:五、结果分析1、数据列表如下:N50100150200250300350400450500未分块0.0010.00607、.0190.0450.1140.1840.3730.4460.8661.375分块00.0070.0180.0440.0920.1450.2350.3310.5230.69N5506006507007508008509009501000未分块2.2581.8194.2133.9576.7455.2599.8638.6539.8639.801分块0.8951.1151.6271.8722.4662.7423.6864.2043.6865.4482、数据散点图如下:3、由上图可看出,分块算法比普通算法执行的CPU时间明显缩短了,分块算法更为实用。六、8、实验感想通过本次实验了解了不同算法执行的CPU时间之间的差别。
6、结果如下图所示:2、N=150和N=200时,结果如下图所示:3、N=250和N=300时,结果如下图所示:4、N=350和N=400时,结果如下图所示:5、N=450和N=500时,结果如下图所示:6、N=550和N=600时,结果如下图所示:7、N=650和N=700时,结果如下图所示:8、N=750和N=800时,结果如下图所示:9、N=850和N=900时,结果如下图所示:10、N=950和N=1000时,结果如下图所示:五、结果分析1、数据列表如下:N50100150200250300350400450500未分块0.0010.0060
7、.0190.0450.1140.1840.3730.4460.8661.375分块00.0070.0180.0440.0920.1450.2350.3310.5230.69N5506006507007508008509009501000未分块2.2581.8194.2133.9576.7455.2599.8638.6539.8639.801分块0.8951.1151.6271.8722.4662.7423.6864.2043.6865.4482、数据散点图如下:3、由上图可看出,分块算法比普通算法执行的CPU时间明显缩短了,分块算法更为实用。六、
8、实验感想通过本次实验了解了不同算法执行的CPU时间之间的差别。
此文档下载收益归作者所有