再谈cache

droplet's picture
Detailed cache simulation for detecting bottleneck, miss reason and optimization potentialities

 

这篇文章不错,可以看看。

cache miss的三个原因

1)first access (也叫compulsory miss,第一次访问时肯定是要miss)

  对策:prefetch

2)cache conflict (一个cache set被写满了,就需要替换,就产生冲突)

  对策:padding,在数据结构里面加入padding,让需要访问的成员映射到不同的set,

3)capacity miss (cache里面已经没有空间了,需要替换)

  对策:减小code/data的大小

其中2和3是很难区分的两种miss,结合实际的cache访问模式来定

4)false sharing,这个在多线程(多核)环境里面会碰到

  对策:padding或者cache line align也就是把两个变量放到不同的cache里面去。

在针对cache优化时,需要对整个cache的使用情况有详细的了解,这需要工具支持,如果能够

支持到function level,就很不错了,如果function不是很大的话,代码分析可以找到最终的答案,如果function非常复杂,做起来就有点麻烦了。

AttachmentSize
Cachesim.pdf160.08 KB
1
Your rating: None Average: 1 (1 vote)

Comments

有个疑问,prefetch是如何减少cache miss

有个疑问,prefetch是如何减少cache miss times的? 请大侠指点。

将要访问的内存已经在cache里面了

第一次访问会有cache miss,如果是prefetch,很显然,访问的时候已经在cache里面了。

多谢,prefetch是因为并行处理:当计算部件在执行时同

多谢,prefetch是因为并行处理:当计算部件在执行时同时访存部件进行处理,且不谈计算量多少对并行处理效率的影响。

就针对cache miss次数来看,prefetch仅仅是提前处理,但对cache miss的总次数应该没有减少吧?还有 cache miss rate? 

 

从pipeline的角度去考虑

prefetch可以填充pipeline,而cache miss会让流水线停顿

谢谢,其实我想量化之,直接通过数据去评测。

谢谢,其实我想量化之,直接通过数据去评测。

这篇论文真的很不错,谢谢分享.

这篇论文真的很不错,谢谢分享.