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.pswp.cn/news/906013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906013.shtml
英文地址,請注明出處:http://en.pswp.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…