缓存如何被攻破?

18
我这周的作业中有这样一个问题,我不理解如何攻破缓存,或者说如何用汇编程序来演示。有人可以指导我一下吗?
请用汇编程序的例子展示两种不同的缓存(联想式缓存和直接映射缓存)是如何被攻破的,解释其原因以及如何修复。攻破这些缓存所使用的程序是否相同?
注意:这是一道作业题,请勿直接为我回答问题,那并不能帮助我理解材料。

1
下次请标记为作业。 - the_drow
1
感谢您正确地识别出这是作业 :) 已为您重新标记。 - Jesus Ramos
11
你因为不仅承认了家庭作业,而且明确表示希望理解材料,因此获得了一票赞成。 - Moo-Juice
3个回答

6

缓存的作用是提高性能。因此,击败缓存意味着找到一种内存访问模式,会降低性能(在缓存存在的情况下),而不是提高性能。

请记住,缓存的大小有限(比主内存小),因此通常击败缓存涉及填满缓存,以便它在您访问数据之前丢弃您即将要访问的数据。


那么,我认为展示这个的最佳方式是创建一个循环,其大小至少比缓存大一个缓存行,或者结合循环和读取/存储数据的方式,使得数据必须分割成两个缓存行。 - John
你的想法是正确的。但要记住,你正在尝试找到一种比没有缓存更不高效的模式。根据缓存的确切细节,仅仅顺序读取大量数据可能不会击败它(你可能不会从中获得太多好处,但也不会对你造成伤害)。诀窍在于找到一种模式,其中缓存的成本超过了它给你带来的好处。 - Paul Butcher

3
如果你需要提示,可以考虑将数据字跨越2个缓存行。
(如果你还在寻找答案,x264开发人员遇到了类似的问题——更多信息可以在这里这里找到。这些链接非常有启发性,即使在找到答案后,我也建议你阅读它们。)

0
另一件需要记住的事情是你处理的缓存是虚拟索引/标记还是物理索引/标记。在某些变体中,即使缓存本身没有完全填满,缓存别名也会强制进行行替换。在其他变体中,缓存/页面着色冲突可能会导致驱逐。最后,在某些工作负载下的多处理器系统中,缓存行迁移(在不同CPU的缓存之间)可能会限制CPU缓存的有用性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接