0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在组相联cache中,用于替换cache line的算法有哪些?

冬至子 来源:CSDN 作者:谷公子 2023-10-08 11:10 次阅读

1. 在组相联cache中,用于替换cache line的算法有哪些?

  • LRU(Least Recently Used)算法:该算法会跟踪每个cache line的age(年龄)情况,并在需要时替换掉近期最少使用的cache line。
  • MRU(Most Recently Used)算法:这与LRU相反,最年轻的cache line会优先被替换掉。
  • PLRU(Pseudo LRU)算法:这与LRU相似,它没有age跟踪cache line(这样开销较大),只有1个或2个bit来跟踪cache line使用情况。
  • LFU(Least Frequently Used)算法:该算法会跟踪一个cache line访问的频率,并决定替换使用次数最少的cache line。
  • Random replacement算法:该算法不存储任何信息,当需要替换时随机选择一个cache line。

2. Cache coherency的问题是什么?

在SMP(Shared Multiprocessor systems)中,多个处理器都有自己的cache,同一数据(同一地址)的多个副本可能同时存在于不同的cache中。如果允许每个处理器自由更新cache,则可能导致数据一致性被破坏了。例如:如果允许两个处理器向相同的地址写入值,那么在不同的处理器上读取相同的地址可能会看到不同的值。

3. 基于snoop的缓存一致性协议和基于directory的缓存一致性协议有什么区别?

在基于Snoop的一致性协议中,来自处理器的数据请求被发送到共享系统里的所有其它处理器。其它处理器根据这个请求查看自己是否有数据的副本,并做出相应的响应。因此,每个处理器都试图保持内存的一致性视图。

在基于directory的一致性协议中,directory用于跟踪哪些处理器正在访问和缓存哪些地址。任何发出新请求的处理器都将检查该directory,以了解是否有任何其它处理器用于数据副本,然后可以向该处理器发送点到点请求,以获取最新的数据副本。

两者的优缺点为:基于snoop的一致性协议用于较小的系统的话,如果有足够的带宽用于传递请求,它会更快。但对于较大的SMP系统不具有可伸缩性,因此需要为每个请求广播消息,可能会使系统过载阻塞。基于directory的一致性协议由于在发送消息之前需要查找记录的表,可能会有较长的延迟。但它没有广播消息,可伸缩性更好,通常用于较大的SMP系统中。

4. 什么是MESI协议?

MESI协议是具有多个write-back 类型cache的设计中最常用的cache一致性协议。MESI表示在所有cache中跟踪每个cache line并用于响应snoop请求的状态。这些不同的状态可以解释如下:

  • M(Modified):表示cache line数据相对于memory数据被修改过了,为dirty的。
  • E(Exclusive):此状态表示cache line数据相对于内存是clean的,且只在该cache中存在。Exclusive属性允许该cache所在的处理器对该cache line进行写操作。
  • S(Shared):该状态表示cache line被多个cache共享,并且相对memory也是clean的。由于这是在所有cache共享的,因此协议不允许直接对该cache line进行写操作。
  • I(Invalid):该状态表示cache line无效,没有任何有效数据。
  • 当cache line处于除Invalid之外的任何状态时,cache都可以处理读请求。当cache line处于Modified或Exclusive状态时,才可以处理写请求。

5. 什么是MESIF和MOESIF协议?

这两个协议都是MESI协议的扩展,引入了两个新的状态”F”和”O”,解释如下:

  • F(Forward):F状态时S状态的一种特殊形式,表明cache应该通过转发数据来充当给定cache line的任何请求的指定反馈者。如果系统中有多个cache具有处于S状态的同一cache line,则将其中一个指定为F状态,以便为来自不同处理器的新请求转发数据。该协议确保,如果任何cache保存的cache line为S状态,那么最多只有一个(其他)cache保存的cache line为F状态。这种状态有助于减少对memory带宽的占用,因为没有F状态,即使一条cache line在多个cache中处于S状态,它们都不能将数据转发给请求读或写的不同处理器。(请注意,cache中的S状态cache line只能服务于相同的处理器读取)
  • O(Owned):O状态时一种特殊的状态,它是为了在不需要写回memory的情况下在系统的不同cache中移动修改过的或dirty的数据而引入的。如果cache line还与其它可以使cache line保持S状态的cache共享,则cache line需要从M状态转换到O状态。O状态有助于将修改后的数据推迟写回memory,直到真正需要时再写。

6. 什么是RFO?

RFO代表Read for Ownership。这是cache一致性协议中的一种操作。它是由处理器试图写入共享或无效状态的cache line时发出的,这将导致所有其它处理器将该cache line的状态设置为Invalid。RFO是意图写入该memory地址的读操作。因此,该操作是排他的,它将数据读到cache中,并使持有该memory地址的所有其它处理器的cache无效掉这个cache line。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19273

    浏览量

    229724
  • 存储器
    +关注

    关注

    38

    文章

    7485

    浏览量

    163795
  • SMP
    SMP
    +关注

    关注

    0

    文章

    74

    浏览量

    19656
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27536
  • cache威廉希尔官方网站

    关注

    0

    文章

    41

    浏览量

    1062
收藏 人收藏

    评论

    相关推荐

    什么是缓存(Cache)及其作用

    缓存(Cache)是一种高速存储器,用于临时存储数据,以便快速访问。计算机系统,缓存的作用是减少处理器访问主存储器(如随机存取存储器RAM)所需的时间。 缓存(
    的头像 发表于 12-18 09:28 418次阅读

    Cache和内存有什么区别

    Cache(高速缓存)和内存(Memory,通常指主存储器或RAM)是计算机存储系统两个重要的组成部分,它们计算机的性能和数据处理扮演着不同的角色。以下是对
    的头像 发表于 09-26 15:28 1490次阅读

    解析Arm Neoverse N2 PMU事件L2D_CACHE_WR

    客户希望我们帮忙分析 Eigen gemm 基准测试的一些执行情况。具体来说是为什么 L1D_CACHE_WR 的值会低于 L2D_CACHE_WR,这种情况令人费解。
    的头像 发表于 09-03 11:42 1281次阅读
    解析Arm Neoverse N2 PMU事件L2D_<b class='flag-5'>CACHE</b>_WR

    Cortex R52内核Cache的具体操作(2)

    ,clean等操作。虽然目前cortex R52内核很少需要操作cache,但是本节依然给一些操作指导和实践,以备以后不时之须。
    的头像 发表于 07-15 15:44 1376次阅读
    Cortex R52内核<b class='flag-5'>Cache</b>的具体操作(2)

    Cortex R52内核Cache的相关概念(1)

    开始阅读本系列文章之前,请先参阅《有关CR52 MPU配置说明》。因为这篇文章讲述了,cache配置所涉及到的寄存器的设置和MPU的一些基本概念。如果读者都已经理解了上述内容,可以跳过。本章内容主要讲述cache属性的具体含意
    的头像 发表于 07-15 10:37 1560次阅读
    Cortex R52内核<b class='flag-5'>Cache</b>的相关概念(1)

    CortexR52内核Cache的具体操作

    ,clean等操作。虽然目前cortex R52内核很少需要操作cache,但是本节依然给一些操作指导和实践,以备以后不时之须。
    的头像 发表于 07-15 10:32 1269次阅读
    CortexR52内核<b class='flag-5'>Cache</b>的具体操作

    为什么HAL库操作Flash erase的时候,需要把I-Cache和D-Cache关闭呢?

    请问为什么HAL库操作Flash erase的时候,需要把I-Cache和D-Cache关闭呢? 这有什么原因呢? 有人可以解答吗?
    发表于 04-07 09:08

    STM32F429使用外部SPI flash,只要执行Bitmap::cache(id)就进入硬件错误怎么解决?

    我使用的是STM32F429,使用外部SPI flash,绘图前,需要先把图片缓存 使用函数Bitmap::cache(id)。 我遇到的问题是,当id>13的时候,只要执行这个函数
    发表于 03-27 07:39

    STM32H7配置FileX时,开关“Enable data cache maintenance”的作用是什么?发生HardFault_Handler的原因?

    STM32H7上基于AzureRTOS的FileX实现向TF卡写入数据,CubeMX配置FileX页面里Enable data cache maintenance开关,这个选项
    发表于 03-13 06:23

    STM32h7开启Cache后,串口发送DMA会导致中断触发如何解决?

    STM32h7 开启Cache后,串口使用发送DMA发送数据会导致中断触发(只开启接收空闲中断),接收和发送的缓存指定在手动分配的内存区域(此区域通过MPU配置,关闭了Cache功能),此问题办法解决吗?
    发表于 03-12 07:37

    请问STM32MP13X的MMU和Cache如何使能?

    STM32MP13X的MMU和Cache如何使能?修改了hal_conf里的DATA_CACHE_ENABLE的宏console里还是显示没开,设置里的Define symbols把NO_C
    发表于 03-12 06:46

    STM32H750使能内存保护后启用cache导致SPI+DMA传输不准确怎么解决?

    STM32H750使能内存保护后启用cache 导致SPI+DMA传输不准确,具体就是调用HAL_SPI_TransmitReceive_DMA 这个函数,读到的数据全是0,但是拿逻辑分析仪看上面显示的数据是正确的。
    发表于 03-07 06:12

    Tc38x全局变量访问只能是不带cache的地址吗?

    全局变量只能放置不带cache的地址么?
    发表于 02-06 08:17

    Cache的data不同核间获取数据的时候如何保证拿到的数据是最新的?

    1. Cache 的data不同核间获取数据的时候如何保证拿到的数据是最新的? 2.如果关闭了Cache ,运行速度就变好慢,但是core0取core1的数据又想要保持是最新的数据
    发表于 01-31 06:49

    先楫HPM片上Cache使用指南经验分享

    高速缓存(Cache)主要是为了解决CPU运算速度与内存(Memory)读写速度不匹配的矛盾而存在, 是CPU与存储设备之间的临时存贮器,容量小,但是交换速度比内存快。内置高速缓存通常对CPU的性能提升具有较大作用。
    的头像 发表于 01-22 16:07 1308次阅读
    先楫HPM片上<b class='flag-5'>Cache</b>使用指南经验分享