2021年perflab实验
资料2021年perflab实验报告资料PAGE/NUMPAGES2021年perflab实验报告资料课程试验汇报课程名称:计算机组成与结构试验项目名称:perflab-handout专业班级:姓名:学号:指导教师:杨科华完成时间:年5月27日信息科学与工程学院试验
目:perflab程序性能调优试验目:了解编译器,学习程序优化,从优化程序代码和程序实施速度两方面着手。试验要求:此次试验,要求针对每个函数、每个人均最少写出3种优化版本、并依据driver汇报结果进行性能
试验环境:ubuntu-15.10、x32系统、VMwareworkstation试验内容及操作步骤: 将下载下来kernels.c中rotate、smooth函数进行优化。 rotate函数作用是将图像逆时针旋转90°,smooth函数作用是对于图像中每一个像素点,取它和周围像素点平均值,让图片变得模糊。下面对代码进行逐一优化。源代码CPE测试:1.Naive_rotate1)源代码:charnaive_rotate_descr[]="naive_rotate:Naivebaselineimplementation";voidnaive_rotate(intdim,pixel*src,pixel*dst){inti,j;for(i=0;i
方案,由图可知,速度提升不大,性能优化结果也不是很好。再分析源代码,从cache友好性来分析,这个代码效率机会很低,所以根据cache大小,应在存放时候进行32个像素依次存放(列存放)。做到cache友好这么就能够能够大幅度提升效率。4)优化代码2以下:charrotate_descr2[]="rotate2:version2 break into 4*4 blocks";voidrotate2(intdim,pixel*src,pixel*dst){inti,j,ii,jj;for(ii=0;ii
>2;dst[RIDX(0,0,dim)].blue=(src[RIDX(0,0,dim)].blue+src[RIDX(1,0,dim)].blue+src[RIDX(0,1,dim)].blue+src[RIDX(1,1,dim)].blue)>>2;dst[RIDX(0,0,dim)].green=(src[RIDX(0,0,dim)].green+src[RIDX(1,0,dim)].green+src[RIDX(0,1,dim)].green+src[RIDX(1,1,dim)].green)>>2;dst[RIDX(0,dim-1,dim)].red=(src[RIDX(0,dim-1,dim)].red+src[RIDX(1,dim-1,dim)].red+src[RIDX(0,dim-2,dim)].red+src[RIDX(1,dim-2,dim)].red)>>2;dst[RIDX(0,dim-1,dim)].blue=(src[RIDX(0,dim-1,dim)].blue+src[RIDX(1,dim-1,dim)].blue+src[RIDX(0,dim-2,dim)].blue+src[RIDX(1,dim-2,dim)].blue)>>2;dst[RIDX(0,dim-1,dim)].green=(src[RIDX(0,dim-1,dim)].green+src[RIDX(1,dim-1,dim)].green+src[RIDX(0,dim-2,dim)].green+src[RIDX(1,dim-2,dim)].green)>>2;dst[RIDX(dim-1,0,dim)].red=(src[RIDX(dim-1,0,dim)].red+src[RIDX(dim-2,0,dim)].red+src[RIDX(dim-1,1,dim)].red+src[RIDX(dim-2,1,dim)].red)>>2;dst[RIDX(dim-1,0,dim)].blue=(src[RIDX(dim-1,0,dim)].blue+src[RIDX(dim-2,0,dim)].blue+src[RIDX(dim-1,1,dim)].blue+src[RIDX(dim-2,1,dim)].blue)>>2;dst[RIDX(dim-1,0,dim)].green=(src[RIDX(dim-1,0,dim)].green+src[RIDX(dim-2,0,dim)].green+src[RIDX(dim-1,1,dim)].green+src[RIDX(dim-2,1,dim)].green)>>2;dst[RIDX(dim-1,dim-1,dim)].red=(src[RIDX(dim-1,dim-1,dim)].red+src[RIDX(dim-1,dim-2,dim)].red+src[RIDX(dim-2,dim-1,dim)].red+src[RIDX(dim-2,dim-2,dim)].red)>>2;dst[RIDX(dim-1,dim-1,dim)].blue=(src[RIDX(dim-1,dim-1,dim)].blue+src[RIDX(dim-1,dim-2,dim)].blue+src[RIDX(dim-2,dim-1,dim)].blue+src[RIDX(dim-2,dim-2,dim)].blue)>>2;dst[RIDX(dim-1,dim-1,dim)].green=(src[RIDX(dim-1,dim-1,dim)].green+src[RIDX(dim-1,dim-2,dim)].green+src[RIDX(dim-2,dim-1,dim)].green+src[RIDX(dim-2,dim-2,dim)].green)>>2;//boarderfor(i=1;i