assembly 计算高速缓存命中和未命中,以及计算高速缓存中的行

ngynwnxp  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(231)

我正在为即将到来的考试研究一个旧的考试,最后的问题由题目描述的内容组成。现在,我熟悉汇编语言指令,我多少知道代码的意思。但是,考试问题实际上想让我做什么是混乱的。如果有人能解释这个问题,我将非常感激。
问题是:

  • 我得到一个有512字节空间的高速缓冲存储器,每一行是8字节长。存储器是直接Map的,“地址”是32位长。而且,高速缓冲存储器从一开始就是空的。之后,我得到一些指示,并应该解释它是成为一个缓存命中或缓存未命中。还应当假设指令都是顺序的,并且在指令中添加/修改的所有数据对于下一指令仍然存在。

我得到的指令是
1.运动蛋白r8,0xBEDA 12 C4
1.低密度水r10,0(r8)
1.低密度井r11,8(r8)
1.污水处理厂第10、16(第8号)
1.第10、24(8)号规则
1.第18、32(r8)号法律
如果有人能给我解释一下细节,我将非常感激:

  • 缓存内存总共有512字节的空间。这是什么?它是缓存能够存储的总内存吗?另外,我从什么地方听说这是在缓存中计算行的方法。例如,512个字节的内存,每行为16个字节。512/16 =高速缓存中的32行。对于本例,512/8 = 64行。是哪一行?这意味着什么!?
  • 它还指出每行是16字节长。我看过TAG,ROW,BYTE的例子,他们试图说明该高速缓存。但是我如何理解每行16字节?至少它看起来没有占用TAG,ROW,BYTE的部分长度。这是干什么用的?
  • 直接Map缓存。我多少了解一些。它只是一大行的顺序槽,空或不空,是吗?我在这里找到了一些信息。http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/direct.html
  • 更新链接:https://web.archive.org/web/20150213025748/http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/direct.html
  • 现在进入主要部分。我如何计算每条指令是缓存未命中还是命中?我的猜测是,第一条指令应该是未命中,因为问题说该高速缓存从一开始就是空的。第二条指令也一定是缓存未命中,但从这一点上我不确定如何计算该指令是生成缓存命中还是未命中。老实说,我都不知道会有什么轰动效应。

如果有人能告诉我如何计算每一步,以及如何知道一条指令是否会导致缓存命中或未命中,我将非常感激。我们得到的计算这一点的指令确实令人困惑。非常感谢!

slmsl1lt

slmsl1lt1#

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

相关问题