体系结构19_降低Cache失效率的方法

2023-10-19 01:20

本文主要是介绍体系结构19_降低Cache失效率的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.三种失效(3C)

(1)强制性失效(Compulsory miss)

     当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache,这就是强制性失效

    (冷启动失效,首次访问失效)

(2)容量失效(Capacity miss)

    如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效。这种失效称为容量失效。

(3)冲突失效(Conflict miss)

  在组相联或直接映像Cache中,若太多的块映像到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。这就是发生了冲突失效。

        (碰撞失效,干扰失效

 

2.三种失效所占的比例

 可以看出:

  (1)相联度越高,冲突失效就越少

  (2)强制性失效不受Cache容量的影响,但容量失效却随着容量的增加而减少;请执行失效和容量失效不受相联度的影响。

  (3)表中的数据符合2:1的Cache经验规则,即大小为N的直接映像Cache的失效率约等于大小为N/2的两路组相联Cache的失效率

3.减少三种失效的方法

  强制性失效:增加块大小,预取(本身很少)

  容量失效:增加容量  (防止出现抖动现象)

  冲突失效:提高相联度  (理想情况:全相联)

4.许多降低失效率的方法会增加命中时间或失效开销

增加Cache块大小

1.失效率与块大小的关系

(1)对于给定的Cache容量,当块大小增加失效率开始时下降,后来反而上升。

(2)Cache容量越大,失效率达到最低的块大小就越大

2.增加块大小会增加失效开销

例1: 假定存储系统在延迟40个时钟周期后,每两个时钟周期能送出16个字节。即:经过42个时钟周期,它可提供16个字节;经过44个时钟周期,可提供32个字节;依次类推。试问:对于表5-6中列出的各种容量的Cache,在块大小分别为多少时,平均访存时间最小?假设命中时间为一个时钟周期

解:

     解题过程

      1KB、4KB、16KB Cache:块大小=32字节

       64KB、256KB Cache:块大小=64字节

提高相联度

1. 采用相联度超过8的方法实际意义不大

2. 2:1 Cache经验规则

     容量为N的直接映像Cache

                              约等于容量为N/2的两组相联Cache

3.提高相联度是以增加命中时间为代价

    例如:

            TTL或ECL板级Cache,两路组相联:(板级Cache:以前的CPU中不包含Cache,他俩放在一个板子上)

            增加10%

            定制的CMOS Cache,两路组相联:(Cache做在了CPU里)

            增加2%

Victim Cache

1.基本思想

  在Cache和它从下一级存储器调数据的通路之间设置一个全相联的小Cache,用于存放被替换出去的块(称为Victim),以备重用。

工作过程:

2.作用

 对于减小冲突失效很有效,特别是对于小容量的直接映象数据Cache,作用尤其明显。例如,项数为4的Victim Cache:使4KBCache的冲突失效减少。  20%~90%(跟程序有关)

伪相联Cache

取直接映象及组相联两者的优点:

   命中时间少,失效率低

缺点: 多种命中时间会使CPU流水线的设计复杂化

(1)基本思想及工作原理

   在逻辑上把直接映象Cache的空间上下平分为两个区。对于任何一次访问,伪相联Cache先按直接映象Cache的方式去处理。若命中,则其访问过程与直接映象Cache的情况一样。若不命中,则再到另一区相应的位置去查找。若找到,则发生了伪命中,否则就只好访问下一级存储器。

(2)快速命中与慢速命中

   要保证绝大多数命中都是快速命中

 

 

 

 

这篇关于体系结构19_降低Cache失效率的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236334

相关文章

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A