超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题

news/2024/12/15 13:41:38/

寄存器重命名

  • 重命名映射表
    • 基于 SRAM 的重命名映射表
  • 超标量处理器的寄存器重命名
    • 解决 RAW 相关性
    • 解决 WAW 相关性
      • 对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)
      • 对写 ROB 进行检查(判断)
    • 特殊指令处理方式

重命名映射表

重命名时

  • 源寄存器查找 RAT 获得对应物理寄存器标号
  • 指令的目的寄存器会新增对应新的物理寄存器

两种方式

  • SRAM 方式
    • SRAM 是每个逻辑寄存器分配一个物理寄存器
    • Entry 项为 32 个,一共有 32 个逻辑寄存器
    • SRAT 占据空间是 32 X 6 bits = 192 bits
  • CAM 方式(Content Addressable Memory)
    • CAM 是每个物理寄存器分配一个逻辑寄存器,所以需要 valid 位来表示
    • Entry 项为 64 个,一共有 64 个物理寄存器
    • CRAT 占用空间是 64 X 5 bits = 320 bits
    • 需要 valid 位来表示
  • 对比
    • 都是使用逻辑寄存器来寻址
    • SRAM 快,并且节省资源
    • 对 cRAT 进行 Checkpoint 只需要保存状态位

32 个逻辑寄存器 5 位来表示
64 个物理寄存器 6 位来表示

image.pngl200

#问题 CAM 的 check points 只需要一位?
在完成 RAT 写入时
对于一个特点的通用寄存器来说

  • SRAM 中
    • 需要保存当前值,当前值又因为 ARF 可能会不断映射新的值而被覆盖,所以需要保存所有
  • CAM 中
    • ARF 的内容不断写入,PRF 不断新增覆盖旧项,所以只需要指示 valid 即可

基于 SRAM 的重命名映射表

image.pngl200

超标量处理器的寄存器重命名

Dest = Src1 op Src2
过程

  • 从 RAT 里找到 Src1 和 Src2 的物理寄存器 Psrc1 和 Psrc2 image.pngl200
  • 从 free list 中找到一个空闲的物理寄存器 Pdest image.pngl200
  • 将 Dest 和 Pdest 的映射关系写到 RAT 中,之后可以用 Dest 去索引映射关系 image.pngl200

一条指令重命名,RAT 一共需要 3 读 1 写端口

  • 3 读
    • 2 个 Src1 和 Src2
    • 1 个 Dest 读取之前的映射
  • 1 写
    • 给 Dest 写入新的映射

4-way 指令则是 12 读,4 写

image.pngl200

重命名可以解决 WAR 和 WAW 问题
为什么重命名还需要 RAW 和 WAW 相关检查

image.pngl200

  • 指令 A 和 B 之间 RAW 相关
    • R0 需要查询指令 A 的结果,而不是 RAT 的结果
  • 指令 A、B、D 之间 WAW 相关
    • 写入 RAT 时,一个周期多条指令有相同目的寄存器,则将最新的映射写到 RAT 中即可
    • 而检查旧映射时,也应该使用有 WAW 相关性的指令,而不是 RAT 读取的值
  • 指令 B 和 D 之间的 WAR 相关
    • 对重命名没有影响

主要延迟的来源:

  • 多端口 SRAM 本身延迟
  • RAW 和 WAW 相关性检查的延迟

在不出现 RAW 和 WAW 相关下的映射

image.pngl200

解决 RAW 相关性

image.pngl200

#问题 R1 映射出来结果应该一致,为什么会不一致?

检查方式:

  • 每条指令的 Src 和之前的 Dst 编号进行比较,如过相等,则用 free list 取出来的值,如果有多个相等,则取出最新的指令对应的物理寄存器

image.pngl200

解决 WAW 相关性

对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)

只有最新的指令 D 才能写到 RAT,对周期内进行寄存器重命名的所有 WAW

image.pngl200

写之前完成检查
image.pngl200

对写 ROB 进行检查(判断)

为了释放不再使用的物理寄存器,需要从 RAT 读出以前对应的物理寄存器,并且写到 ROB 当中,告诉 ROB 我的值是在哪里,而不是让 ROB 去检查 ART 查到错误的值

image.pngl200

image.pngl200

如果寄存器地址,同时读写操作,先读后写

  • 读优先则能满足需求

FPGA 的两种特性

image.pngl200
写优先

  • 写入的内容可以马上读取到

image.pngl200
读优先

  • 写入的内容需要在下个周期读取

特殊指令处理方式

  • 根据当前目的寄存器的个数,决定当前周期从 free list 中读取的数值的个数
  • 使用目的寄存器读取 RAT 时,根据标记,明确哪些会读哪些不会读
  • 使用源寄存器读取 RAT 时,通用
  • RAW 和 WAW 检查时自动忽略比较的结果

http://www.ppmy.cn/news/1555306.html

相关文章

Ubuntu下将Julia嵌入Jupyter内核

一.安装 Julia 如果 Julia 尚未安装: 打开终端,下载最新的 Julia 安装包: wget https://julialang-s3.julialang.org/bin/linux/x64/1.9/julia-1.9.3-linux-x86_64.tar.gz 解压并移动到 /opt: tar -xvzf julia-1.9.3-linux-x86_…

从〇开始深度学习(番外)——快速配置云服务器

从〇开始深度学习(番外)——快速配置云服务器 文章目录 从〇开始深度学习(番外)——快速配置云服务器写在前面1.准备工作2.配置PyCharm2.1.连接服务器2.2.配置部署服务器2.3.配置Jupyter 3.安装项目依赖(如需要)4.Pycharm里的便捷服务4.1.使用终端4.2.从…

机器学习干货笔记分享:朴素贝叶斯算法

朴素贝叶斯分类是一种十分简单的分类算法,即对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。 以判定外国友人为例做一个形象的比喻。 若我们走在街上看到一个黑皮肤的外…

爬虫获取的数据如何有效存储和管理?

爬虫获取的数据如何有效存储和管理,涉及到数据的采集、存储、清洗、分析和保护等多个方面。以下是一些关键步骤和最佳实践: 1. 数据采集与同步 API接口同步:通过API接口将数据从数据源传输到目标位置,并保持数据的一致性和完整性…

人工智能与网络安全结合的思考

一、人工智能时代的网络安全 网络攻击越来越多样化、智能化、隐蔽性越来越高、危害性越来越大 二、人工智能与网络安全结合的可能性 1.信息检索:面对大量日志数据处理,AI的算力能够提前发现潜在威胁,进行漏洞自动挖掘;NLP技术能…

信奥题解:勾股数计算中的浮点数精度问题

来源:GESP C++ 二级模拟题 本文给出官方参考答案的详细解析,包括每一部分的功能和关键点,以及与浮点数精度相关的问题的分析。 题目描述 勾股数是很有趣的数学概念。如果三个正整数a 、b 、c ,满足a2 + b2 = c2 ,而且1 ≤ a ≤ b ≤ c ,我们就将a 、b 、c组成的三元组(…

队列+宽搜_429. N 叉树的层序遍历_二叉树最大宽度

429. N 叉树的层序遍历 定义一个队列q,将一层的节点入队,并记录节点个数。根据节点的个数,出队列,并将其孩子入队列。出完队列,队列当前剩余节点的个数就是下次出队列的次数。直到队列为空 /* // Definition for a Nod…

YunSDR通信小课堂-17

7.5 接收端搭建 全数字接收机是采用独立振荡于固定频率的高稳定度时钟, 对接收机收到的信号进行采样和解调处理、 载波相位误差和符号同步定时误差的消除以及信号的判决等工作全部由采样后的数字信号处理器来完成。 这种方式不需要将载波误差信号反馈到混频器进行调…