ridecore流水线解读

文章目录

  • 流水线stage分属前后端
  • PC
  • pipeline
    • IF
    • ID
    • DP
    • DP 与 SW 中间没有latch
    • SW
    • COM

  • 源码地址

流水线stage分属前后端

在这里插入图片描述

IF -> ID -> DP -> SW -> EX -> COM
分类阶段说明
前端IF指令获取阶段。PC 使用分支预测器,访问指令存储器。典型前端操作。
前端ID解码并寄存器重命名,这仍然属于前端操作,因为没有开始实际执行。
中间(交界处)DP分发阶段是前端和后端的“桥梁”:它决定指令是否能够进入执行系统(Reservation Station)。
后端SWIssue 阶段已经涉及硬件调度和等待执行资源。
后端EX执行阶段。指令在对应的执行单元中运行。
后端COM提交/写回阶段,更新寄存器状态和 ROB,彻底属于后端。
Dispatch(DP)阶段通常被认为是“前端的最后阶段”或者“前后端的分界点”。它从解码器/寄存器重命名器中取出指令,并将它们放入合适的 Reservation Station(RS)。你可以把它看成是:前端准备好的指令交给后端执行的关键一步,所以分析系统时,很多资料会将 DP 归为前端,但也有资料将它作为交界点来单独分析。结论:DP 更偏向前端,但有一定后端属性。

PC

PC的值根据优先级优先级1(top) : reset时 : ENTRY_POINT // 来自于 芯片定义优先级2      : prmiss  : jmpaddr // 来自于 exunit_branch: stall_IF : pc  // 来自于 流水线的stall: 其余情况  : npc // 来自于 IF 模块的npc

pipeline

IF

  • 负责项
1.指令的获取及invalid // 不考虑
2.npc的计算
  • npc 计算原理
npc的计算gshare 命中               : btb中计算出来的 地址第二条指令 invalid  : pc+4其他               : pc+8gshare 的设计 // 属于分支预测模块BHR // 分支历史寄存器PHT // 模式历史表PCBTB // 分支目标缓冲区流程在每个时钟的负边沿,使用的读取地址是 PC[12:3] 和 BHR 做异或(⊕)得到的结果, 从 PHT 中读取预测信息. 如果(读出的值大于1,23)跳转(Taken):用 PC 查 BTB → 得到 跳转目标地址将目标地址 更新到 npc否则(Not Taken):npc += 4 or 8(顺序执行)模块读写BHR 的读写会基于当前预测结果进行更新;但如果最终证明预测是错误的,BHR 会回滚到更新前的状态。因此,在每次更新之前,BHR 都会先被备份。PHT 的读写 // PHT 是 Gshare 预测器中的一个数组,数组中的每个单元是一个2 位饱和计数器读一个用于 IF 阶段;一个用于 COM 阶段。写一个写端口用于 COM 阶段的写操作 // 在时钟的负边沿先读取当前值 , // 然后在正边沿写入更新后的值// 当一条分支指令完成时,会对其对应的 PHT 条目进行更新// 如果条件是“跳转”,则对应计数器加1;// 如果是“不跳转”,则计数器减1。// 饱和计数器最多为3,最少为0,典型行为如下:0,1 → Not Taken;2,3 → Taken(实现 hysteresis)BTB 的读写TODO
  • 问题
1. 按地址 0x4 取指,  那么 inst2 会 invalid  吗 ?  另外, 岂不是 会存在 一拍 没有 inst2 发送到后端 会是的,确实会出现某一拍中只有一条有效指令(Inst1)被送入 IF/ID latch。

ID

1. 给 每一条处于投机路径的指令 分配一个 Speculative Tag // 分支预测相关// 目的是在 exunit_branch 模块 验证出 分支预测失败 时,清楚知道哪些指令是错误路径的,需要取消、回滚// 它的主要目的是跟踪指令的投机状态,以便在分支预测失败时快速恢复系统状态。// 和 用于寄存器重命名的 tag 是 两个系统。// 注意混淆 :// 1. 两者都用到了 "tag" 一词// 2. 两者都需要唯一标识一条或一组指令// 3. 它们都在支持乱序执行
2. 解码 // 不考虑
项目内容
功能为每条投机路径上的指令分配 Speculative Tag,以支持分支恢复
核心输出sptagNspeculativeN
使用者Decoder、Dispatch、ROB、RS(Reservation Station)、Commit 等
解决问题精确追踪投机指令,支持分支预测失败时快速恢复系统状态
模块主要用途
寄存器重命名 tag(如RRF中分配的物理寄存器编号)建立写后读/写后写依赖关系,支持乱序执行
投机 tag(Tag Generator 生成)标记哪些指令是投机的,支持错误恢复

以一个预测成功的分支为例:

  1. 分支指令 B 发射 → branchvalid1=1, enable=1
  2. Tag Generator:
    • 分配一个新的 Tag(比如 00010
    • 设置 sptag1=00010, speculative1=1
    • tagreg 左移(进入下一轮准备)
    • brdepth+1
  3. 后续投机指令 C、D、E 都被分配同样的 sptag=00010
  4. 如果分支 B 后来预测成功(prsuccess=1):
    • brdepth--,该 Tag 被释放,其他无影响
  5. 如果分支 B 后来预测失败(prmiss=1):
    • tagreg ← tagregfix(恢复到分支预测前状态)
    • brdepth ← 0
    • 所有 sptag==00010 的指令都将被清除(flush)
阶段动作模块说明
IF预测(Prediction)Branch Predictor(BTB / GShare)猜跳不跳、跳到哪,控制 PC
ID恢复环境(Prediction)Speculative Tag gen跟踪指令的投机状态
EX验证(Resolution)exunit_branch分支指令实际执行,看预测对不对,发出 prsuccess / prmiss 信号

DP

  • 负责项
1.为每个指令中的"被写入寄存器" 分配 rename register
2.
  • tag generator 与 寄存器重命名机制 原理
tag generator避免 写后读(RAW)(Read After Write)、写后写(WAW)、读后写(WAR) 等寄存器冲突(乱序执行导致的冲突)问题,会使用寄存器重命名机制每条指令的目标寄存器在进入后端之前都会被重新命名为一个“Tag”,这个 tag 是由 Tag Generator 生成的。
模块功能
Tag Generator为目标寄存器生成唯一的标识符(Tag),用于寄存器重命名与依赖跟踪
所在阶段通常在 Decode 或 Dispatch 阶段
在乱序中的地位关键,维持指令依赖关系和正确性
模块Architected Register File (ARF):程序员视角下的寄存器集合(逻辑寄存器)Rename Register File (RRF):物理寄存器集合(或者是寄存器标记表)Reorder Buffer (ROB):保持提交顺序,支持恢复/回滚Tag Generator:为每条指令分配唯一标识符(tag),表示结果的位置
步骤描述
分配 tag为每个目标寄存器分配唯一 tag
更新 Rename Table建立逻辑寄存器到物理 tag 的映射
消除冒险使用 tag 跟踪依赖,避免多个指令写同一个寄存器
回写/提交使用 ROB 确保乱序执行但顺序提交
如果只是顺序执行,那么根本不需要引入 RRF
为了支持乱序执行,必须引入物理寄存器(RRF)来保存未提交的指令结果,并通过 tag 建立依赖关系,使得即使写同一个逻辑寄存器也能正确调度。
乱序执行了之后,也需要计算依赖,然后重新执行吧,是不是浪费资源了只有发生 分支错误预测 时,才需要回滚和重新执行后续指令。这种情况虽然代价高,但在正确率高的预测器(如 Gshare)下,概率已经较低。

DP 与 SW 中间没有latch

SW

COM

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

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

相关文章

【SpringBoot】关于MP使用中配置了数据库表前缀的问题

problem 使用MP时,在application.yml配置文件中配置了MP匹配数据库表中的表名时的前缀作了规定,如下: 那么当我运行时报错了错误,报错信息如下: 因为我数据库表的书类表名是book,MP在匹配时使用了表名前…

印度Rummy游戏支付通道申请策略:技巧类游戏的合规与创新

本文为印度支付申请科普文,自去年开始,印度Rummy类游戏申请印度支付都需要拥有AIGF的会员及产品证书。 如需要rummy可以通过AIGF审核的源。码,或咨询AIGF的相关内容,可以联。系老妙。 印度作为全球棋牌类游戏增长最快的市场之一&…

日志与策略模式

什么是设计模式 IT⾏业 ,为了让 菜鸡们不太拖⼤佬的后腿, 于是⼤佬们针对⼀些经典的常⻅的场景, 给定了⼀些对应的解决⽅案, 这个就是 设计模式 日志认识 计算机中的⽇志是记录系统和软件运⾏中发⽣事件的⽂件,主要作⽤是监控运⾏状态、记录异常信 息&#xff…

解锁Ubuntu高效部署!自动安装配置文件YAML全解析

我们之前介绍了两种Ubuntu系统的安装方式,分别对应桌面版(准备搞OpenStack了,先装一台最新的Ubuntu 23.10)和服务器版(Ubuntu 22.04 LTS服务器版本安装演示)。但对于有些用户,因为技术问题&…

关系代数和关系数据库语言(SQL)

阅读提示:本篇文章较长,建议从目录上选取想看的内容。代码上的话,我习惯用小写,如果看不习惯建议跳过。有问题欢迎讨论!!! 一、基础概念 1.1数据库的概念 数据库(Database)是按照数据结构来组…

EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型

EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型。以下是具体实现方法: 1. EXO 的分布式计算能力 EXO 是一个支持 分布式 AI 计算 的开源框架,能够将多台 Mac 设备(如 M4 和 Mac Air)组合成…

区块链基本理解

文章目录 前言一、什么是分布式账本(DLT)二、什么是P2P网络?二、共识算法三、密码算法前言 区块链是由一个一个数据块组成的链条,按照时间顺序将数据块逐一链接,通过哈希指针链接,所有的数据块共同维护一份分布式账本(DLT),每个节点(可以理解为一个玩家,一台计算机)都拥…

Node.js中的洋葱模型

文章目录 前言 前言 Node.js中的洋葱模型是一种中间件执行机制,主要用于处理HTTP请求和响应的流程控制。该模型通过层层包裹的中间件结构,实现请求从外到内穿透、响应从内向外返回的顺序执行。以下从核心概念、实现原理、框架差异及实际应用等方面解析&…

UI-TARS Desktop:用自然语言操控电脑,AI 重新定义人机交互

在人工智能技术飞速发展的今天,从文本生成到图像识别,AI 的能力边界不断被打破。而字节跳动近期开源的 UI-TARS Desktop,则将这一技术推向了更复杂的交互场景——通过自然语言直接控制计算机界面,实现了图形用户界面(GUI)的智能化自动化。这款工具不仅降低了操作门槛,更…

一个可拖拉实现列表排序的WPF开源控件

从零学习构建一个完整的系统 推荐一个可通过拖拉,来实现列表元素的排序的WPF控件。 项目简介 gong-wpf-dragdrop是一个开源的.NET项目,用于在WPF应用程序中实现拖放功能,可以让开发人员快速、简单的实现拖放的操作功能。 可以在同一控件内…

C语言中字符串函数的详细讲解

C语言提供了丰富的字符串处理函数&#xff0c;这些函数在<string.h>头文件中声明。以下是一些常用字符串函数的详细讲解&#xff1a; 字符串拷贝函数 strcpy 功能&#xff1a;将源字符串&#xff08;包括结尾的\0&#xff09;复制到目标字符串。原型&#xff1a;char *s…

可视化数据图表怎么做?如何实现三维数据可视化?

目录 一、三维数据可视化的要点 1. 明确数据可视化的目标 2. 筛选与整理数据 3. 选择合适的图表类型 4. 运用专业工具制作 5. 优化图表的展示效果 二、数据可视化图表怎么做&#xff1f; 1. 理解三维数据的特性 2. 数据处理与三维建模 3. 设置光照与材质效果 4. 添加…

在Linux服务器上部署Jupyter Notebook并实现ssh无密码远程访问

Jupyter notebook版本7.4.2&#xff08;这个版本AI提示我Jupyter7&#xff08;底层是 jupyter_server 2.x&#xff09; 服务器开启服务 安装Jupyter notebook 7.4.2成功后&#xff0c;终端输入 jupyter notebook --generate-config 这将在 ~/.jupyter/ 目录下生成 jupyter_…

走出 Demo,走向现实:DeepSeek-VL 的多模态工程路线图

目录 一、引言&#xff1a;多模态模型的关键转折点 &#xff08;一&#xff09;当前 LMM 的三个关键挑战 1. 数据的真实性不足 2. 模型设计缺乏场景感知 3. 语言能力与视觉能力难以兼顾 &#xff08;二&#xff09;DeepSeek-VL 的根本出发点&#xff1a;以真实任务为锚点…

数据库原理及其应用 第六次作业

题目 参考答案 题目1. 教材P148第1题 问题&#xff1a;什么是数据库的安全性&#xff1f; 答案&#xff1a;数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏 。它通过用户身份鉴别、存取控制&#xff08;包括自主存取控制和强制存取控制&#x…

2025系统架构师---选择题知识点(押题)

1.《计算机信息系统安全保护等级划分准则》(GB 17859-1999)由低到高定义了五个不同级别的计算机系统安全保护能力。 第一级:用户自主保护级---通过隔离用户与数据实现访问控制,保护用户信息安全; 第二级:系统审计保护级---实施更细粒度的访问控制,通过审计和隔离资源确…

Qt操作SQLite数据库教程

Qt 中操作 SQLite 数据库的步骤如下&#xff1a; 1. 添加 SQLite 驱动并打开数据库 #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>// 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QSQLITE"); db.setData…

从紫光集团看基本财务分析

PE 46PE 代表投资人对他的期望是它的业绩至少要增长50%才算及格。 但实际业绩 一年不如一年. 所以&#xff0c;这个PE 应该是 业绩倒退了&#xff0c;但是市值还没有掉下去&#xff0c;导致运算的结果处在高PE阶段。 那么随着股价的下跌&#xff0c;这个数字会慢慢变小。 当然…

基于MNIST数据集的手写数字识别(CNN)

目录 一&#xff0c;模型训练 1.1 数据集介绍 1.2 CNN模型层结构 1.3 定义CNN模型 1.4 神经网络的前向传播过程 1.5 数据预处理 1.6 加载数据 1.7 初始化 1.8 模型训练过程 1.9 保存模型 二&#xff0c;模型测试 2.1 定义与训练时相同的CNN模型架构 2.2 图像的预处…

centos中postfix的作用

/usr/libexec/postfix/master 是 Postfix 邮件服务器的主进程&#xff0c;qmgr 和 pickup 是 Postfix 的子进程。这些进程本身是正常的&#xff0c;但如果你怀疑服务器被用于钓鱼活动&#xff0c;需要进一步检查 Postfix 的配置和日志&#xff0c;确保它没有被滥用。 1. 检查 P…