阵列的MIPS直接映射缓存

问题描述 投票:0回答:1

我需要对MIPS中的直接映射的缓存如何用于数组进行一些澄清。例如,对于十个项a [0]到a [9]的数组,以及以下直接映射缓存配置:直接映射缓存,总缓存大小为32字节,块大小为16字节。每个内存地址为32位。

将产生:4位偏移,1位索引,27位标记

我的缓存看起来像这样:

| Index | Valid | Tag | W0 | W1 | W2 | W3 |
|   0   |   0   |     |    |    |    |    |
|   1   |   0   |     |    |    |    |    |

我的问题是,在我第一次加载a [0]时,我知道在每个缓存索引中,我们可以存储4个单词。这是否意味着a [0],a [1],a [2],a [3]在对a [0]进行加载访问时都被加载到缓存中?因此,a [1],a [2]和a [3]将很受欢迎。

还是我理解错误?

caching assembly memory-management mips mips32
1个回答
0
投票

取决于a[0]的对齐方式。

假设a[0]位于0x10010000。然后,已加载的16个字节的块从0x10010000开始,一直到0x1001000F。

[a[0]位于0x10010000,a[1]位于0x10010004,依此类推。全部在该高速缓存行中。


但是,如果a[0]位于0x10010004,则已加载的16个字节的块仍与0x10010000处的块相同,但现在包含a[0]a[0]a[1]前面的单词,和a[2],但不包括a[3]

但是,如果a[0]位于0x10010008,则已加载的16个字节的块仍与0x10010000处的块相同,但现在包含a[0]a[0]a[1]前面的两个字,但不是a[2]而不是a[3]

© www.soinside.com 2019 - 2024. All rights reserved.