【发布时间】:2014-05-08 14:50:02
【问题描述】:
我正在为即将到来的考试学习旧考试,最后的问题包括标题所描述的内容。现在,我熟悉汇编语言指令,并且知道代码的含义。但是考试题实际上要我做的是令人困惑的。如果有人能为我解释这个问题,我将不胜感激。 那么问题来了:
我有一个缓存内存,它有 512 个字节的空间,每行有 8 个字节长。内存是直接映射的,地址是 32 位长。此外,缓存内存从一开始就是空的。 在那之后,我得到了一些说明,我将解释它是缓存命中还是未命中。还应该假设指令是顺序的,并且在一条指令中添加的所有数据都存在于下一条。
我得到的指令是
- movia r8, 0xBEDA12C4
- ldw r10, 0( r8 )
- ldw r11, 8( r8 )
- stw r10, 16(r8)
- ldw r10, 24(r8)
- ldw r18, 32(r8)
现在,如果有人可以向我解释详细信息,我将不胜感激: - 缓存内存总共有 512 个字节的空间。这是什么?它是它能够存储的总内存吗?另外,我从某处听说这就是您在缓存中计算行的方式。例如 512 字节的内存,每行 16 字节。 512/16 = 缓存中的 32 行。对于此示例,512/8 = 64 行。这是什么意思!?
它还指出每一行都是 16 字节长。我已经看到了带有 TAG、ROW、BYTE 的示例,他们试图在其中说明缓存。但是我怎么理解这里每行 16 个字节呢?至少它似乎没有占用 TAG、ROW、BYTE 的长度。这是干什么用的?
直接映射缓存。这一点我有点理解。它只是一排空的订单槽,是吗?我在这里找到了一些关于此的信息。 http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/direct.html
现在到主要部分。如果每条指令是缓存未命中或命中,我该如何计算?可能第一条指令应该是未命中,因为问题说高速缓存从一开始就是空的。第二个也必须是缓存未命中,但从这一点开始,我不确定我将如何实际计算它是缓存命中还是未命中。老实说,我什至不确定会是什么打击。
如果有人能告诉我如何计算每个步骤以及我如何知道它的缓存命中或未命中,我将非常感激。我们得到的计算指令真的很混乱。非常感谢!
【问题讨论】: