我在互联网上使用的一些资源在如何设置关联缓存方面存在分歧有效。

例如,硬件机密似乎相信它的工作原理如下:

  

然后分割主RAM存储器   可用的块数相同   内存缓存。保持512 KB   4路组关联的例子,   主RAM将分为2,048   块,块数相同   在内存缓存中可用。   每个内存块都链接到一个集合   缓存中的行,就像   在直接映射缓存中。

http://www.hardwaresecrets.com/printpage/481/8

他们似乎在说每个缓存块(4个缓存行)映射到特定的连续RAM块。他们说不连续的系统内存块(RAM)不能映射到同一个缓存块。

这是关于hardwaresecrets如何认为它有效的图片 http://www.hardwaresecrets.com/fullimage.php?image=7864

与维基百科的关联缓存图片对比 http://upload.wikimedia.org/维基百科/公地/ 9/93 /缓存%2Cassociative - 填充 - both.png

布朗不同意硬件机密

  

考虑每个人可能会发生什么   缓存行有两组字段:两个   有效位,两个脏位,两个标记   字段和两个数据字段。一套   字段可以缓存一个数据   主存的区域,另一个用于   恰好映射到的另一个区域   相同的缓存行。

http://www.spsu.edu/cs/faculty/ bbrown / web_lectures /高速缓存/

也就是说,系统内存的非连续块可以映射到同一个缓存块。

如何创建系统内存和缓存块上的非连续块之间的关系。我在某处读到这些关系是基于缓存步幅的,但除了它们存在之外,我找不到有关缓存步幅的任何信息。

谁是对的? 如果实际使用了跨步,那么跨步工作如何?我是否拥有正确的技术名称?如何找到特定系统的步幅?它是基于寻呼系统?有人能指出一个能够详细解释N路组关联缓存的网址吗?

另见: http://www.cs.umd.edu/类/ sum2003 / cmsc311 /注意/存储器/ set.html

有帮助吗?

解决方案

当我向学生讲授缓存内存架构时,我开始使用直接映射缓存。理解之后,您可以将N路组关联缓存视为直接映射缓存的并行块。要理解这两个数字可能都是正确的,您需要首先了解set-assoc缓存的目的。

它们旨在解决直接映射缓存中的“别名”问题,其中多个内存位置可以映射到特定的缓存条目。这在维基百科图中有所说明。因此,我们可以使用N路缓存来存储其他“别名”内存位置,而不是逐出缓存条目。

实际上,硬件机密图是正确的,假设替换顺序是这样的,即主存储器的第一块被映射到Way-1,然后第二块被映射到Way-2,依此类推。但是,同样可以让第一块主存储器分布在多种方式上。

希望这个解释有所帮助!

PS:只有单个缓存行才需要连续的内存位置,利用空间局部性。至于你问题的后半部分,我相信你可能会混淆几个不同的概念。

其他提示

  

替换策略决定缓存中a的副本   主内存的特定条目将进入。如果替换政策是   可以自由选择缓存中的任何条目来保存副本,缓存是   称为完全关联。在另一个极端,如果每个条目在主要   内存只能放在缓存中的一个位置,缓存是直接的   映射。许多缓存实现了一个折衷方案,其中每个条目都在main中   存储器可以到达高速缓存中的N个位置中的任何一个,并进行描述   作为N路集合关联

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top