我希望确定具有 16 个单字块的高速缓存和使用 8 个 2 字块的高速缓存的二进制地址、标记、索引和命中或未命中,所有高速缓存在开始时都假定为空
假设我有参考指令 4、4、32、31、5、32
对于第一个缓存(16 个单字块),您必须首先将 4 转换为二进制,然后将该二进制值拆分以获取标记,然后如果您再次找到该索引,它将被标记为命中
话虽这么说,我相信使用这种方法下表是正确的。
Ref | Binary | Tag | Index | Hit or Miss
4 00000100 0000 0100 miss
4 00000100 0000 0100 hit
32 00100000 0010 0000 miss
31 00011111 0001 1111 miss
5 00000101 0000 0101 miss
32 00100000 0010 0000 hit
Run Code Online (Sandbox Code Playgroud)
我希望对第二个缓存(8 个双字块)执行相同的操作,但我不确定如何继续。
我认为二进制文件的数字是相同的,但是我对如何从中确定标签和索引以及与第一个缓存相同的引用指令是否命中或未命中感到困惑。
如何确定标签、索引以及它在该缓存中是否命中或未命中?
它的不同之处在于,您需要使用一半的高速缓存行,在高速缓存行内提供 4 位标记、3 位索引和 1 位位移(指示对两字块中的哪个字进行寻址)。对于给出的示例,更广泛的获取将获得额外的一次命中,因为访问 4 也会获取 5。
Ref | Binary | Tag | Index | Disp | Hit or Miss
4 00000100 0000 010 0 miss
4 00000100 0000 010 0 hit
32 00100000 0010 000 0 miss
31 00011111 0001 111 1 miss
5 00000101 0000 010 1 *hit
32 00100000 0010 000 0 hit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8797 次 |
| 最近记录: |