美文网首页
2路组相联缓存

2路组相联缓存

作者: jin陵城外 | 来源:发表于2024-10-12 19:15 被阅读0次

2路组相联缓存(2-Way Set-Associative Cache)是组相联缓存的一种形式,在这种缓存结构中,每个缓存组中有两个缓存行(也称为“路”),这意味着,每个内存地址可以映射到两个不同的缓存行中的任何一个,而不是像直接映射缓存那样只能映射到一个特定位置。

1. 基本结构

Set 0 [Way 0] [Way 1]
Set 1 [Way 0] [Way 1]
Set 2 [Way 0] [Way 1]
... ... ...
Set N [Way 0] [Way 1]

N是组数,每一个组内有2路;
举例说明:
在一个16KB的2路组相联的缓存中,缓存被分成多个组(Set),每个组有两个缓存行(Way 0 和 Way 1), 如果缓存的块大小(即一个缓存行的大小)为 64 字节,那么一共有:
16KB/(64B∗2) = 128个组。

2. 工作原理

2路组相联缓存的基本原理是将缓存分成若干组,每组有两条缓存行,其工作流程如下:

地址分解:将内存地址分解为三部分:
    块内偏移(Block Offset):用于定位缓存行中的具体字节,位于最低比特位置,例如,如果块大小为64字节,则块内偏移量将为6位(2^6 = 64字节)。
    组索引(Index):用于选择缓存中的哪一个组,位于中间比特位置,如果缓存有2^N个组,则组索引长度为N位。
    标签(Tag):用于与组内缓存行的标签比较,判断是否缓存命中,位于最高的比特位置。
    例如: Tag |  Index | Block Offset
组选择:处理器根据内存地址中的组索引选择对应的组。

标签匹配:处理器会将该地址的标签与组内两条缓存行的标签进行比较。
    如果标签匹配且缓存行有效,则缓存命中,处理器直接从该缓存行中读取指令或数据。
    如果两条缓存行的标签都不匹配,则发生缓存未命中(Cache Miss),处理器需要从主存加载数据,并将其存入缓存组中的一个缓存行。

替换策略:在缓存未命中的情况下,如果目标组中两条缓存行都已经满了,缓存需要使用替换策略决定将哪一条缓存行替换掉。常见的替换策略包括:
    LRU(Least Recently Used,最近最少使用法):替换最久未使用的缓存行。这是最常见的一种替换策略。
    随机替换(Random Replacement):随机选择一个缓存行进行替换。
    FIFO(First-In-First-Out,先进先出法):替换最早进入缓存的缓存行。

3. 优点

  1. 较低的缓存冲突:相比于直接映射缓存,2路组相联缓存允许每个内存块映射到两个缓存行中的任意一个,减少了缓存冲突的可能性。
  2. 较好的性能平衡:2路组相联缓存在性能和硬件复杂度之间达到了良好的平衡。相比全相联缓存,其硬件开销较低,查找速度也更快。

4. 一个疑问

如果一个2路组相联指令缓存的大小是16KB,而实际的指令大小只有8KB不到,那么是不是只用到其中1路,另外一路根本用不到?
答:不是,如果指令的内存地址分布非常集中,可能会出现其中一条路(如Way 1)不被使用,但如果指令的内存地址分布非常分散,有的跳转指令之间的地址跨度非常大,那么就算指令总的大小不超过8KB,也需要用到2路。

相关文章

  • cache

    cache的直接相联,多路组相联, 全相联 要计算地址映射到cache的那一块,首先需要确定这个地址对应的块号 块...

  • 内存Cache直接映射、全相联映射和组相联映射

    1. 直接映射 ---- 一个内存地址能被映射到的Cache line是固定的。就如每个人的停车位是固定分配好的,...

  • cache组相连,页着色

    粗略的了解了下cache的结构: cache分为全相联,直接相连,组相连。重点讲讲组相连。 什么是cache行?c...

  • SpringBoot技术专题-整合SpringCache和Red

    Spring基于注解的缓存 对于缓存声明,spring的缓存提供了一组java注解: @Cacheable:触发缓...

  • 首尾相联

    焦点网中12周勇2018年1月2Ψ日分享134+7天(手机13607371686微信ZD13607371686) ...

  • 英雄相联

    李奎宏 英雄英雄惜相联 可惜芳草碧连天 剑石群英终相会 烟鼓战云似非还 ​​​

  • Cache 替换算法和写策略

    前言:来吧,继续补 Cache 的知识。 替换算法 还记得组相联吗?就是主存中的一块可以放在 Cache 中的一组...

  • Cache Index

    在N路组相联的cache结构中,如何选择一个组(set)是很有重要的一个问题,最常用的算法是bit selecti...

  • 6 单图缓存+刷新

    单张图片缓存思路先把图片缓存到本地,再获取图片大小 (GCD调度组监听下载完成) 单张图片缓存进入加载微博列表视图...

  • 诗经里唯美的诗句, 到底有多好听?  这些名字告诉你!

    《大雅·大明》这首诗与《大雅·生民》《大雅·公刘》《大雅·緜》《大雅·皇矣》《大雅·文王》诸篇相联缀,俨然形成一组...

网友评论

      本文标题:2路组相联缓存

      本文链接:https://www.haomeiwen.com/subject/sttorjtx.html