
[英]When I know that I have a capacity miss in direct-mapped or N-associative cache?
[英]How do I map a memory address to a block when there is an offset in a direct-mapped cache?
首先,第一个高速缓存具有16个单字块。 作为示例,我将使用0x03内存引用。 索引有4位(0011)。 显然,这些位等于3mod16 (0011 = 0x03 = 3)。 但是,我对于使用此mod方程来确定具有偏移量位的缓存中的块位置感到困惑。
第二个高速缓存的总大小为八个双字块。 这意味着有1个偏移位。 由于现在有8个块,因此只有3个索引位。 例如,我将使用相同的内存引用0x03。 但是现在我在使用以前使用的mod方程映射到块时遇到了麻烦。 我尝试将3mod8设为 3,但是在这种情况下,由于存在偏移位,因此索引位为001。001不等于3,所以我做错了什么? 有偏移位时,mod不起作用吗? 我的印象是mod方程将始终等于索引位。
它全部在地址中。 您得到地址,然后从末尾掩盖位数,原因如下。
现在,您还需要考虑“ WAY”。 如果它是直接映射的缓存,则适用上面的方法。 如果它是2方式设置的关联缓存,则您没有1024行,而您有512个块,每个块中有2行。 这意味着您只需要9位即可确定块的索引。 如果采用4种方式,那么您将获得256个块,其中包含4行,这意味着您只需要8位的索引即可。
在一组关联的高速缓存中,可以从索引中选择一个块,一旦选择了一个块,则可以在缓存未命中的情况下使用LRU之类的策略来填充条目。 通过比较所选区块中的标签来确定点击数。
最重要的是,块的位置不是由地址决定的,只有一个块是由地址选择的,然后对其标记进行比较以找到数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.