分块矩阵乘法的程序性能

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

湖南大学软件1204班计算机组成实验四201226010427张松磊第1页共6页实验四分块矩阵乘法的程序性能一、实验目的本次实验比较分块矩阵乘法与普通矩阵乘法的性能,并考察分块大小对分块矩阵乘法性能的影响。二、实验原理1、矩阵相乘为简单起见,本次实验矩阵相乘中的矩阵都是方阵,行数和列数都为n。2、程序性能本次实验中考察的程序性能指的是程序的CPU执行时间。在C语言程序中,可以考虑利用clock()函数来计算某段代码执行的CPU时间。注意,clock()的精度为1ms,对于比较小的矩阵相乘,可能精度不够。如果需要使用高精度的计时方法,可以考虑利用CPU内的实时时钟计数器(RTSC),或性能计数器(PerformanceCounter)。3、分块矩阵乘法1、普通矩阵乘法是采用三层循环完成,如下图所示。2、分块的矩阵乘法为了利用局部性提高Cache(高速缓存)利用率,采用了如下所示代码。湖南大学软件1204班计算机组成实验四201226010427张松磊第2页共6页请编写普通矩阵乘法和分块矩阵乘法的实验和测试代码,记录实验结果。另外,本次实验还需要研究不同分块大小对性能的影响,请编写相应的实验和测试代码,并记录实验结果。三、实验步骤voidmmm(double*a,double*b,double*c,intn){inti,j,k;for(i=0;in;i++){for(j=0;jn;j++){for(k=0;kn;k++){c[i*n+j]+=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;in;i+=B){for(j=0;jn;j+=B){for(k=0;kn;k+=B){for(i1=i;i1i+B;i1++){for(j1=j;j1j+B;j1++){for(k1=k;k1k+B;k1++){c[i1*n+j1]+=a[i1*n+k1]*b[k1*n+j1];}}湖南大学软件1204班计算机组成实验四201226010427张松磊第3页共6页}}}}}inlinedoublecompute_time(clock_tbegin,clock_tend){returnstatic_castdouble(static_castdouble((end-begin))/static_castdouble(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);memset(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::coutcompute_time(start,clock())std::endl;;start=clock();mmm2(a,b,c,n);std::coutcompute_time(start,clock())std::endl;}四、实验结果1、N=50和N=100时,结果如下图所示:2、N=150和N=200时,结果如下图所示:湖南大学软件1204班计算机组成实验四201226010427张松磊第4页共6页3、N=250和N=300时,结果如下图所示:4、N=350和N=400时,结果如下图所示:5、N=450和N=500时,结果如下图所示:6、N=550和N=600时,结果如下图所示:湖南大学软件1204班计算机组成实验四201226010427张松磊第5页共6页7、N=650和N=700时,结果如下图所示:8、N=750和N=800时,结果如下图所示:9、N=850和N=900时,结果如下图所示:10、N=950和N=1000时,结果如下图所示:湖南大学软件1204班计算机组成实验四201226010427张松磊第6页共6页五、结果分析1、数据列表如下:N50100150200250300350400450500未分块0.0010.0060.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时间明显缩短了,分块算法更为实用。六、实验感想通过本次实验了解了不同算法执行的CPU时间之间的差别。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功