Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46469
  • 博文数量: 9
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-16 12:28
个人简介

Life is to be hacked and created

文章分类
文章存档

2013年(7)

2012年(2)

我的朋友

分类: LINUX

2013-04-21 16:16:04



结合最近的工作和这篇文章,把prefetch杂七杂八的想法整理一下。

最近在armv5t平台上调优,测试发现一次l1 dcache miss的开销是70cycle左右。对高性能要求的业务而言,这个开销是非常可观的。
比较可靠的提高dcache效率的方法:
1、减小数据结构。
2、重新组织数据结构,将访问概率大的成员放到一起。

比较不可靠的方法,prefetch就是其中名头最响的一种了,基本上性能调优的书都会推荐这个,呵呵。
按照lwn这篇文章解释,prefetch在x86平台上是无益甚至有害的,因为x86有硬件data prefetch单元(http://software.intel.com/en-us/blogs/2009/08/24/what-you-need-to-know-about-prefetching
而且工作的还相当好。呵呵,在真理面前,再牛逼的程序员也显得自以为是啊。。。

armv5下没有data prefetch单元,貌似cortex-a9才开始有。prefetch应该还是有用的,但是作用有限。我觉得有几个前提条件:
1)一般都是在循环中使用prefetch,其他代码不太合适。
2)循环次数够多。
3)循环体工作集不能过大。否则ache controller访问内存都忙不过来,哪里顾得过来prefetch啊。
4)循环体计算量要够大,能屏蔽掉prefetch本身的开销。
基本上,我觉得就是在一些计算密集型的算法代码使用prefetch,其他地方都得慎用。
阅读(2201) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~