Cache结构

Cache

cache的一般设计

超标量处理器每周期需要从Cache中同时读取多条指令,同时每周期也可能有多条load/store指令会访问Cache,因此需要多端口的Cache

  • L1 Cache:最靠近处理器,是流水线的一部分,包含两个物理存在 指令cache(I-Cache)和数据cache(D-Cache),I-Cache只读,D-Cache可读可写。追求
    • I-Cache:需要能够每周期读取多条指令
    • D-Cache:需要指出每周期有多条load/store指令的访问(多端口设计)
  • L2 Cache 指令和数据共享,主要功能:尽可能保存更多内容 追求
    • 访问频率不是很高(L1 Cache命中率比较高)
    • 不需要多端口设计,延迟也不是特别重要
    • 需要有较高的命中率

Cache主要由 Tag部分 和 Data部分 组成,如下图所示:
Cache结构

3C定理(影响Cache缺失的因素):

  • Compulsory
    • 第一次被访问的指令或数据一定会导致 Cache Miss
    • 缓解方法:预取 prefetching
  • Capacity 容量
  • Conflict
    • 组相连Cache,Cache set大小 小于 频繁使用的数据的数量
    • 缓解:victim cache

Cache的三种实现方式(组织方式):直接映射、组相连映射、全相连映射

  • TLB 和 victim Cache:全相连
  • I-Cache 和 D-Cache:组相连
  1. 直接映射
    在这里插入图片描述
  2. 组相连

定义:每个数据块n 个位置可放的组相联 cache 称为 n 路组相连 cache;主存中的每个数据块通过索引位映射到 cache 中对应的组,数据块可以存放在该组中的 任意位置

索引位用来选择访问数据所在的,该组内所有数据块的标签都需要比较(并行比较)

如果cache容量保持相同,增加相联度可以增加每组内数据块的数量;相联度以 2 的幂递增,索引的位长将减少 1,标签的位长将增加 1

基本实现方式:
在这里插入图片描述

  • 并行访问 Tag SRAM 和 Data SRAM 及 访问流水线
    • 同时访问
      在这里插入图片描述
    • 将整个cache访问放到几个周期完成,降低处理器的周期时间,较低的时钟频率和较大的功耗
      在这里插入图片描述
  • 串行访问 Tag SRAM 和 Data SRAM 及 访问流水线
    • 依次访问,不再需要多路选择器,只需访问指定的SRAM,节省功耗
      在这里插入图片描述
    • load指令延迟更大(访问增加了一个周期)
      在这里插入图片描述
  1. 全相连
    • 用CAM存tag,用SRAM存数据
    • 缺失率最低,延迟最大,不会有很大容量,TLB

Cache的写入

  • 写命中
    • 写通(Write Through)
      • 数据写到D-Cache的同时,也写到下级存储器中(如L2 Cache中)
    • 写回(Write Back)
      • 执行store指令时,数据写到D-Cache后,只是将被写入的cache line做一个标记(dirty 脏状态),当被标记的cache line要被替换时,才将其写入下级存储器中
  • 写缺失
    • non write allocate
      • 将数据直接写入下级存储器,不写入D-cache中
    • write allocate
      • 首先从下级存储器中取出发生缺失的地址对应的整个数据块,将要写入到D-Cache中的数据合并到这个数据块中,然后将这个数据块写入到D-cache中
      • 为了保持存储器的一致性,要将这个数据块写入下级存储器,有两种方式
        • 写通
        • 写回
  • 一般 write through 配合 Non-Write Allocate 使用
    在这里插入图片描述
  • Write Back 配合 Write Allocate 使用
    在这里插入图片描述

Cache的替换策略

  • LRU 近期最少使用法
    • 伪LRU,将所有way进行分组,每一组使用一个1位的年龄部分
      在这里插入图片描述
  • 随机替换
    • 时钟算法
    • 硬件复杂度较低,不会损失过多性能

提高cache的性能

  • 写缓存
    在这里插入图片描述

  • victim cache
    在这里插入图片描述

  • filter cache
    在这里插入图片描述

  • 预取

    • 硬件预取

      • 当I-Cache发生缺失时,除了将需要的数据块从下级存储器中取出放在I-Cache中,还会将下一个数据块也读取出来,放到stream buffer中
        在这里插入图片描述
    • 软件预取

      • 编译阶段,编译器对程序进行分析,进而知道哪些数据需要进行预取。比较有针对性
      • 需要注意 预取的时机
      • 使用软件预取时,执行预取指令时,处理器需要能继续执行(能继续从D-Cache中读取数据),要求D-Cache是非阻塞(non-blocking)结构

多端口Cache

  • True Multi-port

    • cache的控制通路和数据通路需要进行复制
    • 两套地址解码器,多路选择器,比较器,对齐器;SRAM中每个cell都需要同时支持两个并行的读取操作
    • 增大了面积,多端口的SRAM cell需要驱动多个读端口,因此需要更长的访问时间,功耗也会随之增大
  • Multiple Cache Copies

    • 将cache进行复制
      在这里插入图片描述
  • Multi-banking

    • 将cache分成很多小的bank,每个bank都只有一个端口
    • bank冲突
  • 实例:AMD Opteron的多端口cache

    • 64位处理器,但处理器地址进行了简化(虚拟地址Virtual Address VA 48位,物理地址Physical Address PA 40位)
      在这里插入图片描述

超标量处理器的取指令

  • 使数据块的大小为n个字,每周期将其全部进行输出
  • 使处理器每周期取出的指令个数多于它能够解码的指令个数,通过指令缓存(Instruction Buffer)将多余的指令缓存起来
  • 改进:使数据块变大
    • 如变为8个字

    • 实际实现用四个SRAM实现一个八个字的数据块
      在这里插入图片描述

    • 一个cache line包含的8个字占据了SRAM的两行,一个cache line只包含一个Tag值

    • 增加两个控制电路

      • 产生每个SRAM的读地址
      • 将四个SRAM输出的内容进行重排序,使其按照程序中规定的原始顺序进行排列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/393153.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鲜花销售小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,鲜花信息管理,鲜花分类管理,管理员管理,系统管理 微信端账号功能包括:系统首页,购物车&#xff0…

Linux 操作系统速通

一、安装虚拟机 1. VmWare 安装下载 vmware workstation pro 16 下载 win R 输入 ncpa.cpl 确保网卡正常 2. CentOS 系统下载 CentOS 系统下载 将 CentOS 系统安装到虚拟机 3. 查看虚拟机 IP 命令 ifconfig 4. finalShell 安装下载 finalShell 下载 输入用户名一般是 ro…

Html实现全国省市区三级联动

目录 前言 1.全国省市区的Json数据 2.找到Json数据文件(在此博文绑定资源)之后,放到resource目录下。 3.通过类加载器加载资源文件,读取Json文件 3.1 创建JsonLoader类 3.2 注入JsonLoader实体,解析Json文件 4.构建前端Html页面 5.通过…

如何在国外市场推广中国游戏

在国外市场推广中国游戏需要一种考虑文化差异、市场偏好和有效营销渠道的战略方法。以下是成功向国际观众介绍和推广中国游戏的关键步骤和策略: 进行市场调研 了解目标市场:首先确定哪些外国市场对你的游戏最具潜力。考虑类似游戏类型的受欢迎程度、玩…

通过数组中元素或者key将数组拆分归类成新的二维数组

处理前的数组: 处理后的数组: 你希望根据 riqi 字段将这个数组拆分成多个二维数组,每个二维数组包含相同日期的项。在ThinkPHP中,你可以使用PHP的数组操作来实现这一拆分操作。以下是如何按照 riqi 字段拆分成新的二维数组的示例代码: $splitArrays = [];foreach ($list…

YOLOv6训练自己的数据集

文章目录 前言一、YOLOv6简介二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②权重下载③模型文件配置 五、模型训练和测试模型训练模型测试 总结 前言 提示:本文是YOLOv6训练自己数据集的记录教程,需要大家在本地已配置好CUDA,cuDNN等环…

opencascade TopoDS、TopoDS_Vertex、TopoDS_Edge、TopoDS_Wire、源码学习

前言 opencascade TopoDS转TopoDS_Vertex opencascade TopoDS转TopoDS_Edge opencascade TopoDS转TopoDS_Wire opencascade TopoDS转TopoDS_Face opencascade TopoDS转TopoDS_Shell opencascade TopoDS转TopoDS_Solid opencascade TopoDS转TopoDS_Compound 提供方法将 TopoDS_…

Spring快速学习

目录 IOC控制反转 引言 IOC案例 Bean的作用范围 Bean的实例化 bean生命周期 DI 依赖注入 setter注入 构造器注入 自动装配 自动装配的方式 注意事项; 集合注入 核心容器 容器的创建方式 Bean的三种获取方式 Bean和依赖注入相关总结 IOC/DI注解开发 注解开发…

抽象代数精解【8】

文章目录 希尔密码矩阵矩阵基本概念行列式基本概念特殊矩阵关于乘法运算构成群 加解密原理密钥加密函数解密函数 Z 26 上的运算( Z 256 与此类似) Z_{26}上的运算(Z_{256}与此类似) Z26​上的运算(Z256​与此类似&…

sql注入知识整理

sql注入知识整理 一、SQL注入概念 SQL注入就是用户输入的一些语句没有被过滤,输入后诸如这得到了数据库的信息SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 数据库引擎的实…

递归.python

目录 一、认识递归 二、阶乘问题 三、经典例题:汉诺塔问题 一、认识递归 递归:即方法(函数)自己调用自己的一种特殊编程写法。 函数调用自己,即称之为递归调用。 def func(): If ....: func() return ..... 递归…

ESP8266使用舵机以及16路PWM舵机PCA 9685的使用方式

PWM全称 50Hz也就是一秒内变换50次 根据上面的公式 一个高电平一个低电平叫一个脉冲。 例如每个脉冲占20毫秒,那么他的频率是多少? 就是用1去除以他的周期,也就是我们上面说的20,那么就是除0.02,1秒等于1000毫秒,20…

PostgreSQL11 | 触发器

本文章代码已在pgsql11.22版本上运行且通过,展示页由pgAdmin8.4版本提供 上一篇总结了原著的第十章有关pgsql的视图的用法,本篇将总结pgsql的触发器的用法。 触发器 使用触发器可以自动化完成一些在插入数据或修改数据时,某些需要同期同步的…

bat批处理文件 —— 用于自动化环境配置和项目执行

文章目录 一、什么是 bat ?1.1、支持 bat 的编辑软件1.2、常用命令 三、项目实战3.1、入门案例3.2、(自动化)环境配置与python库安装3.3、将 bat 当成一个简易的 .exe 可执行文件 四、标识符详解4.1、rem:添加注释4.2、echo off&a…

8.15 C++作业

输入一组字符&#xff0c;实现各字符的归类统计 #include <iostream> #include <string.h>using namespace std;namespace xiaoli {string str;int len; } using namespace xiaoli;int main() {getline(cin,str);//识别空格len str.size();int a0,b0,c0,d0,e0;fo…

【多线程-从零开始-肆】线程安全、加锁和死锁

进程状态 进程状态&#xff1a; 就绪&#xff1a;正在 CPU 上执行&#xff0c;或者随时可以去 CPU 上执行阻塞&#xff1a;暂时不能参与 CPU 的执行 Java 的线程&#xff0c;对应状态做了更详细的区分&#xff0c;不仅仅是就绪和阻塞了 六种状态&#xff1a; NEW 当前 Thread…

【PXE+kickstart】linux网络服务之自动装机

PXE&#xff1a; 简介&#xff1a;PXE(Preboot execute environment 是一种能够让计算机通过网络启动的引导方式&#xff0c;只要网卡支持PXE协议即可使用Kickstart 是一种无人值守的安装方式&#xff0c;工作原理就是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文…

基于强化学习算法玩CartPole游戏

什么事CartPole游戏 CartPole&#xff08;也称为倒立摆问题&#xff09;是一个经典的控制理论和强化学习的基础问题&#xff0c;通常用于测试和验证控制算法的性能。具体来说&#xff0c;它是一个简单的物理模拟问题&#xff0c;其目标是通过在一个平衡杆&#xff08;倒立摆&a…

PCIe学习笔记(15)

设备就绪状态 (Device Readiness Status&#xff0c;DRS)消息 &#xff08;Device Readiness Status (DRS) 是PCIe规范中引入的一种机制&#xff0c;旨在改进设备初始化和就绪状态的检测与报告。 在以往的PCIe版本中&#xff0c;系统通常依赖于固定的超时机制来判断设备是否已…

【ML】transform 之 encode 及其实现细节

transform 之 encode 及其实现细节 1. transform (seq2seq) 是什么2. transform (seq2seq) 具体如何实现3. transform (seq2seq) 可以解决哪些类型的问题4. 补充问题4.1 残差连接&#xff08;Residual Connection&#xff09;是什么如何实现4.1.2 残差连接的具体实现&#xff1…