《深入理解计算机系统》疑问

iampengxiaojin 2011-08-19 09:40:16
请问各位大侠:

最近在看《深入理解计算机系统》第6章存储器层次结构,在编写高速缓存友好的代码那儿有看到这样的总结,步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块,但是在第五章优化程序性能那一章提到为了考虑到流水线化的能力可在循环内使用多次展开,多路并行的方法,小弟这里疑问就是:那我们平时该如何取舍呢?还有书上练习题6.10引用地址0X0E34为什么会命中。谢谢。
...全文
102 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iampengxiaojin 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zmlovelx 的回复:]
循环展开也有限制的,不是展开越多越好.
而且也涉及到编译优化.
现代的编译器优化已经很好了, 除非检测到是瓶颈, 否则不建议手动循环展开.

for (; i<n; ++i) //这个每执行一次都有要判断i<n 循环展开可以消除掉一些判断次数.
dosomthing;

另外一个:
循环展开示例

以下循环展开示例显示在进行展开的同时如何使其它优化方法成为可能:

展……
[/Quote]还不是很理解,不过还是谢谢2楼。
iampengxiaojin 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wt_net 的回复:]
我有这样的问题哈,你说第6章的东西我的理解是在讲从cache获得数据,而在第5章讲的东西好像是在讲code的优化.你把针对数据获取与代码优化的不同方法做了以下比较是什么意思?不知道我是不是真的理解LZ了。
[/Quote]恩,我看书上的事例,都是从一个循环开始讨论,不过是从不同的方面,一个是从存储器那一级,讲如何编写可以防止抖动,而第五章是从流水线那一块,讲如何编写可以利用流水线的能力来优化代码,不会有空闲的指令周期,这仅仅是我的理解,也不知道对不对。
帅得不敢出门 2011-08-20
  • 打赏
  • 举报
回复
循环展开也有限制的,不是展开越多越好.
而且也涉及到编译优化.
现代的编译器优化已经很好了, 除非检测到是瓶颈, 否则不建议手动循环展开.

for (; i<n; ++i) //这个每执行一次都有要判断i<n 循环展开可以消除掉一些判断次数.
dosomthing;

另外一个:
循环展开示例

以下循环展开示例显示在进行展开的同时如何使其它优化方法成为可能:

展开之前:

do i=1,100

if (i mod 2 == 0) then a(i) = x

else a(i) = y

enddo

展开之后

do i=1,100,2

a(i) = y

a(i+1) = x

enddo

在本例中,执行 100 次的循环将 x 赋给偶数编号的每个元素,将 y 赋给每个奇数编号的元素。通过展开循环,可以在每个迭代中同时执行两个赋值,从而消除循环体中的一个分支。
不断修行 2011-08-20
  • 打赏
  • 举报
回复
我有这样的问题哈,你说第6章的东西我的理解是在讲从cache获得数据,而在第5章讲的东西好像是在讲code的优化.你把针对数据获取与代码优化的不同方法做了以下比较是什么意思?不知道我是不是真的理解LZ了。

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧