深入理解计算机系统——实验 Perflab

一、前言

1、对程序进行优化时要使优化后得到的程序和未优化的版本有一样的行为。
2、不依赖与目标机器的的特性的常见代码优化方法有:消除循环的低效率、减少过程调用、消除不必要的存储器引用
3、这次实验主要对两个函数进行优化,rotate函数和smooth函数


rotate函数要求将二维矩阵逆时针旋转90度



smooth函数要求将二维矩阵中每个元素的值替换为周围相邻元素的算术平均值
4、To make life easier, you can assume that N is a multiple of 32
5、以下测试结果仅供参考

 

二、rotate函数的优化

1、原rotate函数

其中:

2、利用循环分块,一种基于分块的循环优化, 旨在通过存储器引用重新排序来减少高速缓存失效率, 以提高存储访问的局部性[1],这里分成4*4的小块

3、利用循环展开(loop unrolling),循环是很重要的的程序结构, 虽然在源代码中描述很紧凑, 但循环语句往往要占用很大部分计算时间[1],这里采用32*32分块,4*4路循环展开

4、利用循环分块、循环展开以及消除不必要的存储器引用( 在临时变量中存放结果,消除了每次循环迭代中从存储器中读出并将更新值写回的需要(这里不是特别确定)),这里采用32*1分块,32路循环展开


下图是每一块的图示


先将src第一块中(32行dim列)的第一列(32行)转为dst第一块(dim行32列)中的最后一行(32列),
再将src第一块中(32行dim列)的第二列(32行)转为dst第一块(dim行32列)中的倒数第二行(32列),
……
再将src第二块中(32行dim列)的第一列(32行)转为dst第二块(dim行32列)中的最后一行(32列),
……

 

三、smooth函数的优化

1、原smooth函数

其中:
   



 

2、减少函数调用,将min、max函数设为inline函数;利用临时变量存放结果。

没多大用

3、这里将循环展开,分析不同的avg情况,四个角附近有3个点,四个边附近有5个点,中央部分附近有8个点。


 

参考资料:

[1]李根.关于嵌入式计算系统程序性能分析优化的研究[J].电脑编程技巧与维护,2019,(1):145-147.
[2]https://wenku.baidu.com/view/6a28f22ddd3383c4bb4cd2cb.html?sxts=1554297762751
[3]https://wenku.baidu.com/view/3a21f02b82c4bb4cf7ec4afe04a1b0717fd5b3f9.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值