再谈cache
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非常复杂,做起来就有点麻烦了。
| Attachment | Size |
|---|---|
| Cachesim.pdf | 160.08 KB |
(1 vote)
- droplet's blog
- Add new comment
- 1364 reads


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会让流水线停顿
谢谢,其实我想量化之,直接通过数据去评测。
谢谢,其实我想量化之,直接通过数据去评测。
这篇论文真的很不错,谢谢分享.
这篇论文真的很不错,谢谢分享.