6

我在 Internet 上访问的一些资源对集合关联缓存的工作方式存在分歧。

例如,硬件机密似乎相信它是这样工作的:

然后主 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/wikipedia/commons/9/93/Cache%2Cassociative-fill-both.png

布朗不同意硬件秘密

考虑一下如果每个高速缓存行有两组字段会发生什么:两个有效位、两个脏位、两个标记字段和两个数据字段。一组字段可以为主内存的一个区域缓存数据,而另一组字段可以为恰好映射到同一缓存行的另一个区域缓存数据。

http://www.spsu.edu/cs/faculty/bbrown/web_lectures/cache/

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

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

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

另见: http ://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/set.html

4

2 回答 2

8

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

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

实际上,硬件机密图是正确的,假设替换顺序是主内存的第一个块映射到 Way-1,然后第二个块映射到 Way-2,依此类推。然而,同样有可能将第一块主内存分布在多个 Way 上。

希望这个解释有帮助!

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

于 2009-05-04T05:42:21.713 回答
0

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

于 2017-02-10T12:40:49.880 回答