本周我的任务中有这个问题,我不明白缓存是如何被打败的,或者我如何用汇编程序展示它。有人能指出我正确的方向吗?
使用汇编程序示例显示如何消除两个不同的缓存(关联和直接映射)。解释为什么会发生这种情况以及如何解决这个问题。用于击败缓存的相同程序是否相同?
注意:这是作业。不要只为我回答问题,它不会帮助我理解材料。
答案 0 :(得分:6)
缓存可以提高性能。因此,取消缓存意味着找到一种内存访问模式,这会降低性能(存在缓存)而不是增加它。
请记住,缓存的大小有限(例如,比主内存小),因此通常打败缓存需要将其填满,以便在您访问之前将其丢弃即将访问的数据它
答案 1 :(得分:3)
如果您正在寻找提示,请考虑将数据字分成两个缓存行。
(如果您还在寻找答案,x264开发人员遇到了类似的问题 - 可用的更多信息here和here。这些链接信息丰富,我真的建议你在找到答案后阅读它们。)
答案 2 :(得分:0)
要记住的另一件事是,您处理的缓存是虚拟还是物理索引/标记。在某些变体中,缓存别名强制执行行替换,即使缓存本身未完全填充也是如此。在其他变体中,缓存/页面着色冲突可能会导致驱逐。最后,在某些工作负载下的多处理器系统中, cacheline迁移(在不同CPU的缓存之间)可能会限制CPU缓存的有用性。