Caching 计算缓存内存命中和未命中,以及计算缓存中的行

Caching 计算缓存内存命中和未命中,以及计算缓存中的行,caching,assembly,byte,Caching,Assembly,Byte,我正在为即将到来的考试学习一门旧的考试,最后的问题由题目所描述的内容组成。现在,我熟悉汇编语言指令,并且我知道代码的含义。但这道考题真正想让我做的是令人困惑的。如果有人能为我解释这个问题,我将不胜感激。 那么,问题是: 我得到了一个缓存,它有512字节的空间,每行8字节长。内存直接映射,地址为32位长。此外,缓存内存从一开始就是空的。 在那之后,我会得到一些指示,我会解释它是否是缓存命中或未命中。还应假定指令是顺序的,并且添加到指令中的所有数据都存在于下一条指令中 我得到的指示是 movia r

我正在为即将到来的考试学习一门旧的考试,最后的问题由题目所描述的内容组成。现在,我熟悉汇编语言指令,并且我知道代码的含义。但这道考题真正想让我做的是令人困惑的。如果有人能为我解释这个问题,我将不胜感激。 那么,问题是:

我得到了一个缓存,它有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个字节?至少它似乎不占标记、行和字节长度的一部分。这是干什么用的

    • 直接映射缓存。我对此有些理解。这只是一大排订单上的空位,是不是?我在这里找到了一些信息。

    • 现在进入主体部分。如果每个指令都是缓存未命中或命中,我如何计算它?可能第一条指令应该是未命中的,因为问题是缓存从一开始就是空的。第二个也必须是cachemiss,但从这一点上说,我不确定如果它是缓存命中或未命中,我将如何计算。老实说,我甚至不确定会有什么样的打击


    如果有人能告诉我如何计算每一步,以及我如何知道这是缓存命中还是未命中,我将不胜感激。我们得到的计算这些的指令真的很混乱。非常感谢你

    通常,您必须将其视为一个单独的内存空间,只有512字节,可寻址、可读写,每个数组8字节。如果需要字节2,地址将为0,则读取整个数组并从中选择字节3。如果需要字节8,地址将为1,从数组中选择字节0。这样小的内存有一个巨大的优势——速度快。它可以单独存储一些较大内存空间的内容,只有前512字节。如果您将某个内容存储到较大内存空间的地址1,它将转到较小的内存,该地址将变为0,偏移量为1,对于较小的内存量,它将在内部变为0。如果访问量超过该值,例如1000,则必须等待更多时间。在这种情况下,它将只是内存映射的“寄存器”-在某些情况下,它实际上比“缓存”更快更好-不幸的是,出于某些原因,处理器制造商通常不允许您以这种方式使用缓存(可能是营销和支持原因-以更高的价格作为单独的市场份额销售其他产品)。
    如果您向每个数组添加更多的空间来存储其他值,则可以在其中存储地址的一部分。如果没有硬件支持,您几乎可以在那里存储任何东西,第二部分称为标记。现在,如果您有一些地址FFFFF 000,您可以从地址0读取第二个空间(假设您有这样做的命令)-为了简单和速度,您可以通过屏蔽除位3..8和0-2(用于获取8字节数组中的偏移量)之外的所有位,从主内存空间获取地址,并从该地址检查标记部分。该标记中的一位可用于指示是否存在存储在那里的内容,其他位可用于存储来自主存储器的地址部分。如果要保存缓存在那里的内容,可以设置指示数组不是“空”的位,并在那里分配主地址的高位,然后从主内存复制8个字节。下次,在读取内存中该范围内的内容之前,首先读取较小内存阵列的标记部分,然后决定是从较慢的主内存中读取,还是从较小但较快的部分(即缓存命中)中读取。
    如果在主存中写入地址为(+-)x512字节的内容,则必须读取前面提到的8字节数组,将其复制到主存中,整个8字节,然后将所需内容写入同一单元格,然后使用新值修改地址。但是,您会在较小的内存区域(但速度更快)中丢失数据的前一个副本。如果再次需要上一个值(这8个字节中的任何一个),则必须从主内存中再次复制它(缓存未命中)。 这同样适用于该“缓存”内存的所有其他阵列。因此,我们有一系列的缓存检查、写入、读取和复制数据到主内存或从主内存复制数据。
    这就是所谓的单向关联性,对于两种方式,将有一个512字节的多个数组(相同),可以存储不同的地址(通过从主存读取512的步骤),但可以同时检查这两个数组的标记,如果某个数组具有该内存范围的副本,则可以返回它,而不是从主存读取它。如果没有标记检查(额外的周期),则“缓存”本质上是一个小内存量