gpt4 book ai didi

caching - 有一些关于缓存和缓存命中/未命中的问题

转载 作者:行者123 更新时间:2023-12-04 16:07:54 26 4
gpt4 key购买 nike

这是一个家庭作业问题,但作业已经到期,我们已经得到了答案,我只是不知道他们实际上是如何得出这些答案的。

它与缓存有关,我只是混淆了很多概念。

这是问题:

对于具有 32 位地址的直接映射缓存设计,以下位
地址用于访问缓存。

enter image description here

根据我的理解,索引位决定了内存中的特定位置映射到缓存中的哪个块。地址中最低的 log(base2) 位确定缓存块,这里有 5 个索引位,所以我知道缓存中总共会有 2^5 个块,或 32。

缓存块大小是多少(以字为单位)?

根据给我们的答案,缓存块大小是 8。根据我们的 TA 给我们的一些注释,块大小是 2^(# of offset bits),在这种情况下是 5。但是,那给我32作为答案,所以我不知道8是从哪里来的。此外,本书中没有任何地方定义“偏移位”这个术语,所以有人能告诉我这到底是什么意思吗?

enter image description here

**我在这里想的是,由于相同的内存地址永远不会被引用两次,所以应该没有命中,因为缓存永远不会在缓存中拥有它正在寻找的数据。然而,根据答案,命中率应该是 0.25,所以我想我又一次不明白发生了什么。
最后,对于最后一个问题,它说答案如下:

<000001, 0001, 内存[1024]>

<000001、0011、内存[16]>

<001011, 0000, 内存[176]>

<001000, 0010, 内存[2176]>

<001110, 0000, 内存[224]>

<001010, 0000, 内存[160]>

其中包含一些甚至不在原始问题中的内存地址 (176, 2176),所以此时我完全失去了一切。有人可以帮我清理这些事情吗?**

最佳答案

在示例中,缓存块大小为 32 字节,即使用字节寻址;对于四字节字,这是 8 个字。

由于整个块在未命中时加载到缓存中,并且块大小为 32 字节,因此要获取索引,首先将地址除以 32 以找到内存中的块号。块号模 32(5 位索引)是索引。块号除以 32 就是标签。跟踪将如下所示:

   0  miss  <00000, 0000, mem[0..31]>
4 hit <00000, 0000, mem[0..31]>
16 hit <00000, 0000, mem[0..31]>
132 miss <00100, 0000, mem[128..159]>
232 miss <00111, 0000, mem[224..255]>
160 miss <00101, 0000, mem[160..191]>
1024 miss <00000, 0001, mem[1024..1055]>
30 miss <00000, 0000, mem[0..31]>
140 hit <00100, 0000, mem[128..159]>
3100 miss <00000, 0011, mem[3072..3103]>
180 hit <00101, 0000, mem[160..191]>
2180 miss <00100, 0010, mem[2176..2207]>

如您所见,12 次访问中有 4 次命中,因此命中率应为 33%。 (看起来答案的提供者认为有 16 次访问。)

旁注:由于这是从空缓存开始,因此只有一次冲突未命中(mem[30] 访问),其余 7 次未命中是强制(第一次访问)未命中。但是,如果这是循环体,则在第一次迭代之后的每次迭代中,在索引 00000(地址 0、1024、30、3100)处将有四次冲突未命中,在 00100(地址 132、2180)处有两次冲突未命中,以及6 次命中(地址 4、16、140 是其缓存块已在每次迭代中重新加载的命中,对应于冲突未命中;地址 232、160、180 是其缓存块在第一次迭代中被加载且未被驱逐的命中)。

运行此跟踪,您会发现最后以下块将是有效的(最后一次访问它们的索引):
<00000, 0011, mem[3072..3103]>
<00100, 0010, mem[2176..2207]>
<00101, 0000, mem[160..191]>
<00111, 0000, mem[224..255]>

请注意这与给定的答案有何不同,后者显然是错误的,因为对于 32 字节的块,没有块将从 mem[16] 开始,1024 除以 32 给出的块编号(在内存中)为 32,32 模 32 为 0(不是 1) 用于索引。

顺便提一下,提供块中缓存的字节范围可能比仅提供块的起始地址更有帮助。

关于caching - 有一些关于缓存和缓存命中/未命中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com