02计算机组成原理-Cache的组相联和全相联映射

02计算机组成原理-Cache的组相联和全相联映射

前言

上一节博客讲了Cache的直接映射,这届博客来讲Cache的组相联和全相联

1.全相联映射

全相联映射(Fully Associative Mapping)是一种缓存映射技术,它为内存块提供最大的灵活性,允许缓存中的任何位置存储任何内存块 。相比于直接映射和,全相联映射在减少冲突缺失方面表现更佳,但伴随而来的是更高的硬件复杂度和成本。简单来说就是一个内存块可以放到Cache中的任意一个位置

在全相联缓存中,每个缓存条目都可以存放来自主存中任何地址的数据块这意味着每个缓存项都有一个对应的标记(Tag)、有效位(Valid Bit)以及数据存储区域。有效位用来指示该缓存项是否有有效数据,而标记则用于识别该缓存项存储的是主存中哪个地址的数据。

直接映射工作原理:

分块与编号:主存和Cache都被分为固定大小的数据块。主存分块,Cache分行,主存的块和Cache行中的数据区域大小相同。

地址结构:主存地址可以被细分为主存块地址(标记位)和块内偏移地址。区别于前面的直接映射:没有了组号。

映射算法:主存的数据块可以映射到Cache的任意行,即主存中的某一数据块可以放置在Cache中的任意块。

查找机制:为了找到指定的块,Cache中的每个项都需要被检索,因为该块可能被存放在Cache中的任何位置 。这个过程是通过一个与Cache中每个项都相关的比较器并行完成的。下面这个图是直接映射的工作原理的图,这里只需要一个比较器是因为我们知道主存可以分为行号和标记,我们可以直接去对应的Cache行中找,而这里是全相联的,主存地址只能分为标记和块内地址,为了方便比较我们给每一个Cache行都加一个比较器,通过总线把标记位传给这些比较器,得到结果要不是只有一位是1(且有效位是1查找成功),要不全是0,说明缺失,去访存即可。所以全相联的比较器的个数是Cache行的个数,而直接映射的比较器只需一个即可。

全相联映射通常用于块数较少的Cache中,因为它在硬件成本和数据访问效率之间提供了较好的平衡。然而,随着Cache容量的增加,全相联映射的硬件成本可能会迅速上升,因此在实际应用中,组相联映射(Set Associative Mapping)往往是一个更实际的选择。

2.组相联映射

组相联(Set Associative)缓存设计是直接映射和全相联映射之间的一个折中方案,它试图平衡二者的优势,既减少冲突缺失,又避免全相联映射的高硬件复杂度和成本。

在组相联缓存中,缓存被划分为多个组,每个组包含固定数量的缓存行(或称块)。每个内存块可以映射到与之关联的组内的任意一个缓存行,但不能映射到其他组。映射方式是用主存块号对组数取模得到该主存单元应该在Cache的第几组。这种设计结合了直接映射(通过索引确定唯一组)和全相联映射(组内任意缓存行)的特点。

在这种映射方式中,主存储器和高速缓存被分成相同大小的组(Set),每个组内再被分为相同大小的块(Block)。组间采用直接映射,而组内的块之间则采用全相联映射。

若一组有r个Cache行,被称为r路组相联。

组相联工作原理:

r路组相联需要r个比较器来确定,因为主存地址中是可以确定组号的,我们只需去对应的那一组找就可以了,而又因为是r路,即一组中有r个Cache行,所以需要r个比较器。

分组:主存储器和高速缓存被划分为大小相等的组。假设主存储器有M个块,高速缓存有N个块,每组有S个块,则高速缓存有N/S个组。

索引:当CPU需要访问主存储器中的某个块时,首先根据主存地址的某一部分(索引域)来确定该块应映射到高速缓存的哪一个组。具体地,假设主存地址由<Tag, Index, Offset>三部分组成,其中Index用于确定组号 。这里跟直接映射的区别就是中间用Cache的组号替代了Cache行数。

块匹配:在确定了组号后,CPU会在该组内的所有块中查找与主存块匹配的块。匹配是通过比较主存地址的Tag部分和高速缓存块中的Tag标记来实现的

注意直接映射是没有替换策略的,因为它放的位置只有那一行,当产生冲突的时候没有选择,直接替换即可。

注:直接映射可以看作是 1路组相联

全相联映射可以看作是只有1组的组相联,即所以Cache行分为1组

比较器的个数:r路组相联需要r个比较器。比较器的位数=地址标记字段的位数(tag位数)

组相联映射广泛应用于现代处理器的多级缓存设计中,尤其是在L1或L2缓存,因为它在成本和性能之间达到了一个很好的平衡。通过调整组数和路数,设计者可以根据特定应用场景和性能目标来优化缓存性能,比如对冲突缺失敏感的应用可能倾向于使用更高路数的组相联缓存。

组相联缓存查找过程:

  1. 地址解析:处理器请求的内存地址被解析为标记(Tag)、索引(Index)和偏移(Offset)。索引用于确定请求数据可能所在的组。

  2. 组选择:根据索引值,直接选择对应的组。这意味着索引位数决定了组的数量,每增加一位索引,组数翻倍而组的大小减半。

  3. 并行比较:选定的组中所有缓存行的标记与请求地址的标记部分并行比较。增加相联度(每组的缓存行数)可以提高并行度,从而可能减少查找时间,但同时增加了硬件复杂性和成本。

  4. 标记与偏移:相联度的增加会导致每组的块数增多,因此索引位减少,标记位相应增加,以维持地址的唯一性。标记位的增多是为了能够唯一标识组内更多的块。

硬件选择:

地址映射这块就结束了,下节博客讲替换算法。大概先写这些吧,今天的博客就先写到这,谢谢您的观看。

相关推荐
散11219 天前
02计算机组成原理-浮点数的加减运算
计组
散11224 天前
02计算机组成原理-定点数乘法
计组
散11225 天前
02计算机组成原理-定点数加减法
计组
散1121 个月前
02计算机组成原理-寻址方式总结
计组
散1121 个月前
02计算机组成原理-32位立即数与寻址
计组
散1121 个月前
02计算机组成原理-指令格式
计组
散1121 个月前
02计算机组成原理-逻辑运算符与字符表示
计组
散1121 个月前
02计算机组成原理-有符号数和无符号数
计组
散1121 个月前
02计算机组成原理-计算机硬件的操作及操作数
计组