我有一个困难的时间弄清楚如何知道什么时候会有一个命中或错过。这是我正在做的问题(我有答案,但我不知道他们是如何得到答案的):
双向集关联缓存由四个集合组成.主内存包含2K块,每个块有8个单词。
循环的第一次迭代: Address 8是一个失败,然后整个块被带到集合1中,因此,9-15就被击中了。16是一次失误,整个街区被带入第2盘,17- 23都是命中。24是一次失误,整个街区被带入第3盘,25-31是点击率.32是一次失误,整个街区进入0盘,33胜39负都是命中.40是一个失误,整个块被带入第1组(注意,我们不必抛出地址8的块,因为这是双向的集合关联),41-47是命中的。48是一次失误,整个街区被带入第2盘,49-51是点击率。 对于循环的第一次迭代,我们有6次未命中,5*7 +3次命中,或38次命中。在剩下的迭代中,我们有5*8+4点击,或者每个点击44次,每次点击88次。 因此,我们有6次命中,126次命中,命中率为126/132,占95.45%。
我仍然有问题,围绕着我的头,我如何找出哪些内存地址/块将是命中或错过。
发布于 2018-02-12 09:08:06
问题中有一些含糊不清之处:
因此,我做了很少的假设:
主存储器有2048个条目,因此用于存储器地址的11位。缓存行宽8字,因此至少3位用于缓存行中的字选择。有4个缓存块,因此接下来的两个位用于索引。这给标签留下了6位。
当发出地址8 (x00000001000)时,索引为01,标记为000000。这不在缓存中,因此是一次失败。
对于地址9,(x00000001001),索引为01,标记为000000。这已经在缓存中了,因此很成功。
对于地址10,(x00000001010),索引为01,标记为000000。这已经在缓存中了,因此很成功。
相同的模式一直延续到地址15 (x00000001111).。
当发出地址16 (x00000010000)时,索引为10,标记为000000。这不在缓存中,因此是一次失败。当发出地址17 (x00000010001)时,索引为10,标记为000000。这已经在缓存中了,因此很成功。相同的模式一直延续到地址23 (x00000010111)。
8-15 :缓存索引01,标签00000: 1错过,7次点击16-23 :缓存索引10,标记00000: 1错过,7次点击24-31 :缓存索引11,标记00000: 1,7次命中32-39 :缓存索引00,标记00000: 1,7次命中
现在对于地址40,(x00000110000),索引是10,但是标记是000001。这是一次失败,当数据从内存中取出时,这可以转到缓存块中的第二个条目,它被索引为10,因为我们的缓存是2路。
40-47 :缓存索引01,标签00001: 1,7次命中48-51 :缓存索引10,标记00001: 1错过,3次命中
对于第一次迭代:6次失误和38次点击。对于第二次迭代,44次点击和第三次迭代44次点击。
因此,总的来说,我们有126次点击超过142次访问。命中率为126/132
https://stackoverflow.com/questions/48737519
复制相似问题