实验题目:程序性能调优实验
实验目的:
kernel.c 文件中主要有两个需要进行优化的函数:rotate 和 smooth,并分别给出了 naive_rotate 和
naive_smooth 两个函数的基本实现作为 baseline 作为你改进后的程序的比较对象。你需要读懂
rotate 和 smooth 函数,并对其进行优化。你每写一个新版本的、优化的 rotate 和 smooth 函数,均可
在成注册后使用 driver 进行测试,并得到对应的 CPE 和加速比。本次实验,要求针对每个函数、
每个人均至少写出 3 种优化版本、并根据 driver 报告的结果进行性能分析。
实验环境:
Vmware 虚拟机 ubuntu12.04 linux 终端
实验步骤和结果分析:
函数源码:
rotate 函数:
void naive_rotate(int dim, pixel *src, pixel *dst)
{
int i, j;
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
dst[RIDX(dim-1-j, i, dim)] = src[RIDX(i, j, dim)];
}
rotate 函数的作用是通过将每个像素进行行列调位,将一副点阵图像进行 90 度旋转。其中
RIDX(i,j,n)即((i)*(n)+(j))。函数缺点为程序局部性不好,循环次数过多。可以对其进行分块来提高
空间局部性,也可以进行循环展开。
smooth 函数:
void naive_smooth(int dim, pixel *src, pixel *dst)
{
int i, j;
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
dst[RIDX(i, j, dim)] = avg(dim, i, j, src);
}
smooth 函数的作用是通过对图像每几点像素求平均值来对图像进行模糊化处理。函数缺点是
循环次数过多和频繁调用 avg 函数,avg 函数中又包含许多函数。应该减少 avg 函数的调用次数,
且进行循环展开。
第一种版本:
CPE 分析:
评论0