本系列文章为中国科学技术大学计算机专业学科基础课《计算机系统》布置的实验,上课所用教材和内容为黑书CSAPP,当时花费很大精力和弯路,现来总结下各个实验,本文章为第四个实验——性能优化实验(Perflab)。
一、实验名称:perflab
二、实验学时: 3
三、实验内容和目的:
此次实验进行图像处理代码的优化。图像处理提供了许多能够通过优化而得到改良的函数。在此次实验中,我们将考虑两种图像处理操作:roate, 此函数用于将图像逆时针旋转90°;以及smooth,对图像进行“平滑”或者说“模糊”处理。
对于此次实验,我们将认为图像是以一个二维矩阵 M 来表示的,并以 Mi,j 来表记(i,j)位置的像素值。像素值是由红,绿,蓝(RGB)三个值构成的三元组。我们仅考虑方形图像。以 N 来表记图像的行数(同时也是列数)。行和列均以C风格进行编号——从0到 N - 1 。
在这种表示方法之下,rotate 操作可以借由以下两种矩阵操作的结合来简单实现:
- 转置:对于每个(i,j),交换 Mi,j 与 Mj,i 。
- 行交换:交换第 i 行与第 N - 1 - i 行。
详情见下图:
smooth 操作可以通过求每个像素与周围像素(最多是以该像素为中心的3×3的九宫格)的均值。详见图2,像素 M2[1][1] 与 M2[N - 1][N - 1] 由下式给出:
四、实验步骤及结果:
首先将 perflab-handout.tar 拷贝至一个受保护的文件夹,用于完成此次实验。
然后在命令行输入命令:tar xvf perflab-handout.tar 这将使数个文件被解压至当前目录。
你可以进行修改并最终提交的唯一文件是 kernels.c 程序 driver.c 是一个驱动程序,你可以用它来评估你解决方案的性能。使用命令:make driver 来生成驱动代码,并用命令 ./driver 来使其运行。
查看文件 kernels.c,你会发现一个C 结构体:team。你需要将你小组成员的信息填入其中。请马上填写,以防你忘记。
1.naive_rotate
/*
*naive_rotate - The naive