日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

时序图 分支_BOOM微架构学习(1)——取指单元与分支预测

發布時間:2024/10/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 时序图 分支_BOOM微架构学习(1)——取指单元与分支预测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前在RISC-V的“Demo”級項目——Rocket-chip一文中曾經簡介過BOOM處理器的流水線,這次我們開始一個系列,深入學習一下BOOM的微架構,這樣對于亂序執行的超標量處理器會有一個較為深入的認識。

本系列計劃按照流水線的前后順序,第一篇講前端的取指和分支預測,第二篇講譯碼和寄存器重命名,第三篇介紹ROB和指令的發射,第四篇介紹指令的執行和Bypass機制,第五篇講BOOM的訪存和存儲系統, 最后從使用的角度來講一下BOOM中的Chisel Parameter配置方式。

本文是BOOM系列的第一篇,先從取指單元以及BOOM的分支預測器入手。

BOOM的取指單元

在介紹取指單元之前先回顧兩個概念方便下文討論:一個叫前端(Front-end),指流水線中的取指和分支預測部分,這一部分將指令從I-Cache中取出;另一個叫后端(Back-end),指流水線中從派發到寫回階段的這一部分,也就是指令的執行階段。

BOOM的前端如下圖所示,它包括取指和分支預測在內共劃分為5個周期(從F0到F4)。當后端發現分支預測錯誤,或者分支預測器預測需要改變取指的位置,就會給前端發一個請求,前端就會從新的PC開始取指令。

BOOM前端架構圖

BOOM并不是每次從I-Cache中取一條指令,而是一次從指令緩存中取出一個Fetch Packet的指令(就像是批發一樣,一次批發一包指令進來)。之后對這些指令進行快速譯碼(為分支預測提供信息),并寫到Fetch Buffer(Fetch Buffer是一個將前后端解耦的指令隊列)中供后端使用;同時將給后端用的PC和分支預測信息則寫到Fetch Target Queue中(Fetch Target Queue保存著從I-Cache取得的指令的地址以及地址對應的分支預測信息;當指令被提交后,ROB會從Fetch Target Queue中取出該指令的相應信息;當取指單元重定向時Fetch Target Queue會被更新)。

另外,BOOM必須要考慮RVC指令,RVC指令是RISC-V標準中規定的16位壓縮指令,目的在于減少程序代碼空間大小。取RVC指令給處理器帶來了很大的挑戰,主要在于加入了16位指令以后,原有的32位指令不再是要求4字節對齊的了,這樣一來有的指令是從半字節位置開始,找到一條指令的起始位置就變得困難;而且譯碼的復雜度也增加了(操作數的位置不再固定為指令低7位);每次PC的自增也不再是簡單的PC+4。

這樣,一條指令從指令緩存中取出來,到寫入Fetch Buffer之前,要經歷如下的過程: 1. Fetch Packet的大小為fetchWidth*16位,在F2周期每次從I-Cache中取出一個Fetch Packet大小的指令存放到IMem Response Queue中, 2. 在F3周期中維護取指“狀態”,包括上一個Fetch Packet的最后16位(有可能上一個Fetch Packet的最后16位和本Fetch Packet的前16位共同組成一條指令)、PC等,用于解決RVC指令的若干問題。F3中還包括了預譯碼單元,用于確定每條指令的起始位置。 3. 在存到Fetch Buffer前將無效指令去掉

BOOM的分支預測

接下來我們來討論BOOM的分支預測機制。 BOOM使用了兩級分支預測,第一級是快速而簡單的Next-Line Predictor(NLP),第二級是慢速而復雜的Backing Predictor(BPD)。

Next-Line Predictor(NLP)

總的來說BOOM的NLP是由一個全相連的Branch Target Buffer(BTB)、一個雙峰表(BIM)以及一個返回地址棧(RAS)組成的快速而“相對”準確的預測器。它可以根據當前PC在一個周期內(通過組合邏輯)完成預測,在大多數情況下BOOM使用NLP可以快速作出分支預測的決定。

NLP的預測

NLP中的BTB如下圖所示。和一般簡單的處理器不同的是,NLP的預測不是基于某條指令進行分支預測的判斷,而是根據一整個Fetch Packet進行判斷。 每次預測時,NLP首先將Fetch PC(即當前Fetch Packet的開頭的地址)和BTB中的PC tags進行匹配, 如果發現有匹配上的項,BTB和RAS一起判斷該Fetch Packet中是否包含分支、跳轉或者返回指令,以及具體是哪條指令發生了跳轉(記錄在BTB的bidx字段中)。

BOOM的BTB

當確定某條指令為分支指令時,NLP會查詢BIM表來決策跳轉還是不跳轉;當確定某條指令為返回指令時,NLP會查詢RAS來確定下一次取指的Fetch PC。

NLP的更新

當前端發生重定向、后端發出了跳轉請求(一般意味著分支預測錯誤)或者BPD做出了分支預測時,BTB會更新或創建新的表項。

當前端的預先譯碼發現某指令為“Call”指令時(RISC-V并沒有專門定義的Call指令,BOOM通過JAL和JALR指令的目標寄存器為x1判定該指令為調用指令),會將它的PC和它的目標PC壓入RAS中;當發現某條指令為返回指令時,將該項從RAS中彈出。

Backing Predictor(BPD)

介紹完了簡單的NLP(實際上確實很簡單,很短的篇幅就把NLP的工作過程講清楚了),接下來本段要講的第二級分支預測器BPD就比較復雜了。

正常情況下NLP在預測正確的情況下,后端可以不間斷地執行指令。 但NLP在具有簡單快速的優點的同時也帶來了很多缺點:比如面積和功耗較大、BTB的存儲空間有限,只能存儲幾十個分支、BIM的機制太過簡單,無法應對復雜的跳轉情況。

為了解決這些問題BOOM提供了BPD,它的目標是利用很小的面積來作出相當高準確率的判斷;BPD只能判斷某條分支指令(無條件跳轉指令不在BPD的職責范圍之內,它們由NLP和后端共同負責處理)是否需要跳轉,而無法給出哪些指令是分支指令以及它們跳轉的目標是什么(這些信息可以從BTB中獲得,也可以從F3周期的預先譯碼模塊中獲得)。 當BPD作出預測時,它會給出一個比特序列,該序列的長度與配置的Fetch Width相同,即對Fetch Packet中的每條指令給出“跳轉”或“不跳轉”的決策(當然只有分支指令對應的比特位才是有意義的),在F3周期會對Fetch Packet中的指令進行預先譯碼,解出每條指令的分支目標地址,并結合BPD給出的比特序列決定是否對前端進行重定向。

從本文開頭的BOOM前端時序圖中可以看出,BPD的作用是橫跨整個取指過程的,與訪問Cache和NLP的預測并行, 這樣就為BPD爭取到了三個時鐘周期的時間,這樣BPD可以將龐大的歷史記錄存放在SRAM中,而不必須像BTB一樣使用寄存器存儲,節約了很大的面積。

講完了BPD在前端的大致作用,接下來我們開始剖析BPD的若干細節。

全局歷史寄存器(GHR)

BPD采用了基于全局歷史的分支預測設計,它使用全局歷史寄存器(Global History Registor, GHR)來預測本條指令是否需要跳轉。 GHR中記錄了之前N條分支指令的結果。在對某條分支指令進行預測時,GHR根據之前N條分支指令的跳轉結果來作出決策,這就意味著GHR必須跟著每條分支指令即時進行更新。而對于BOOM來說,指令只有過了Commit階段,才能真正“確定”被執行了,此時更新到GHR中才能保證絕對不會出錯。 但這對于BOOM來說太晚了,可能同時有多條指令在BOOM的流水線中運行著,也就意味著BPD對于某條分支指令的預測時根據多條指令以前的歷史信息進行的判斷,準確度是不夠的。

因此在BOOM中GHR采用的是推測式更新法,當某條分支指令被預測后,就會更新在GHR中。當后端發現某條分支指令預測錯誤時,就需要重置并更新正確的GHR,因此對于流水線中正在執行的每條分支指令,均保留了它當時的GHR快照,以便后面需要時進行恢復。

分支預測抽象類

BOOM定義了一個分支預測抽象類BranchPredictor,實現這個類即可為BOOM實現一種新的基于全局歷史的分支預測方案。 BranchPredictor為BPD的實現提供了接口以及GHR的控制邏輯,實現類不需要再去處理上文中提到的有關GHR的更新、快照維護等事情,而專注于分支預測的邏輯即可。分支預測抽象類的接口邏輯結構如下圖所示。

BOOM的抽象分支預測類框圖

2-bit計數器表

BPD中專門設計了一個2-bit計數器表(Two-bit Counter Table,簡稱2BCT)供各種分支預測器使用。 在此先復習一下2-bit計數器的知識,0b11代表“強烈跳轉”,而0b00代表“強烈不跳轉”;因此,高位代表“是否跳轉”,簡稱P位,而低位代表“強度”,簡稱H位。

在BOOM中,為了節約面積將2BCT存入SRAM中,對2-bit計數器進行了調整:如果當前狀態為0b10,而此次輸入為“沒有跳轉”,則狀態直接轉移到0b00;如果當前狀態為0b01,而此次輸入為“跳轉”,則狀態直接轉移到0b11。調整后的時序轉移圖如下。

經過這樣的調整以后,P位和H位可以在硬件上分開進行設計: 對于P位來說,每次預測時讀取從而進行是否跳轉的判斷,而每次判斷錯誤時則進行取反寫入;對于H位來說,在預測錯誤時進行讀取,而每次分支指令執行后進行寫入(寫入分支結果)。

通過這種設計BOOM將P位和H位分別存儲于兩個1端口SRAM中。

GShare預測器

本文最后介紹BOOM實現的兩種分支預測器,分別是本節將要介紹的GShare預測器以及下一節中的TAGE預測器。

GShare分支預測器實現比較簡單,下圖為其邏輯框圖。它將GHR與指令的PC做異或后,作為2BCT的索引進行查詢和更新。

GShare預測器

TAGE預測器

TAGE(TAgged GEometric)是一種新型的高度可配置的分支預測算法,它既能快速學習短期歷史,也能學習長期歷史(可以學習超過1000條分支歷史記錄)。

TAGE預測器

TAGE由一組預測表構成,每張表包括了一個預測計數器、一個有用度計數器以及一個tag。預測計數器用于提供預測,有用度計數器記錄著在過去的正確預測中該表項的重要程度,tag用于進行匹配。

TAGE的每一張表都擁有不同長度的歷史記錄(基本上可以理解為上文中的GHR),每張表的歷史記錄和要預測的指令PC進行異或得到index hash和tag hash。在每張表中先通過index hash進行索引再通過tag hash進行匹配,根據該表項做出預測。在所有作出預測的表中,選擇歷史記錄最長的表作為最終的預測結果。

有關TAGE的更多細節(可以另寫一篇文章)讀者可自行搜索學習,本文限于篇幅不再詳述。

本文小結

本文作為BOOM微架構學習系列第一篇,介紹了BOOM的取指模塊及其分支預測器的設計。在分支預測器部分,介紹了BOOM的兩級分支預測:NLP和BPD。其中BPD是基于全局歷史的復雜分支預測設計,可以實現多種分支預測算法。本文介紹了Gshare和TAGE兩種預測器,當然BOOM也還支持其他的預測器,讀者可以自行查閱相關資料。

參考資料

[1] https://docs.boom-core.org/

總結

以上是生活随笔為你收集整理的时序图 分支_BOOM微架构学习(1)——取指单元与分支预测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中国毛片网站 | 国产精品情侣呻吟对白视频 | 欧美精品久久久久性色 | 4438x亚洲最大 | 激情丁香 | 动漫美女无遮挡免费 | 天天草天天摸 | 在线天堂www在线国语对白 | 成人精品视频一区二区三区尤物 | 玖玖色在线 | 五月婷婷久久久 | 极品尤物在线观看 | 亚洲不卡一区二区三区 | 国产亚洲精品女人久久久久久 | 成人福利视频网站 | 男人女人拔萝卜视频 | 精品99久久久 | 绿帽单男| 成人av中文字幕 | 人人看超碰 | 在线观看免费日韩av | 成人午夜视频在线 | 午夜精品一二三区 | 亚洲精品视频在线看 | 日韩经典午夜福利发布 | 催眠美妇肉奴系统 | 天天舔天天干天天操 | 真实的国产乱xxxx在线91 | 女同av网站 | 麻豆videos| 国产网站视频 | 老司机深夜网站 | 五月天婷婷在线观看 | 91麻豆蜜桃 | 国产中文自拍 | 色中文字幕 | 亚洲国产高清在线 | 亚洲精品a | 操一操视频| 一区二区三区精品视频在线观看 | 国产精品高清在线观看 | 免费观看美女裸体网站 | 色人综合 | 国产精品久久久久久妇女 | 亚洲图片欧美在线看 | 成人毛片18女人毛片 | 国产视频二 | 亚洲中文字幕无码av | 久久免费一区 | 国产精品久久AV无码 | 国产精品久久久久久免费免熟 | 毛片资源| 欧美与黑人午夜性猛交久久久 | 色桃网 | 99re中文字幕 | 欧洲精品视频在线 | 中国久久 | 成人午夜在线 | 国产精品jizz | 无码人妻丰满熟妇啪啪网站 | 国产精品久久毛片av大全日韩 | 国产精品美女久久久久 | 国产精品999999| 叶全真三级 | 蜜桃臀aⅴ精品一区二区三区 | 丰满人妻一区二区三区精品高清 | 国产丝袜在线视频 | 使劲插视频 | 在线观看亚洲精品视频 | 国产精品女同一区二区 | 日日摸夜夜添夜夜添高潮喷水 | 欧美午夜性春猛交 | 手机av电影在线 | 欧美亚洲综合视频 | 久久精品tv | 女人又爽又黄免费女仆 | 欧美精品久久久久久久免费 | 国产精品无码成人片 | 9·1·黄·色·视·频| 精品一区在线视频 | 色www.| 性猛交ⅹxxx富婆视频 | 国产精品久久久免费视频 | 调教91| 久操社区 | 欧美日韩一区三区 | 裸体一区二区三区 | 色天天干 | 亚洲老女人 | 狠狠干干干 | 日本成人综合 | 亚洲国产黄色 | 国产香蕉尹人视频在线 | 99国产精品国产免费观看 | 午夜视频www| 国产剧情久久久 | 午夜视频在线瓜伦 | 色噜噜亚洲 | 香蕉视频网页版 |