<abbr id="kc8ii"><menu id="kc8ii"></menu></abbr>
  • <input id="kc8ii"><tbody id="kc8ii"></tbody></input><table id="kc8ii"><source id="kc8ii"></source></table><kbd id="kc8ii"></kbd>
    <center id="kc8ii"><table id="kc8ii"></table></center>
  • <input id="kc8ii"></input>
    <abbr id="kc8ii"></abbr>
  • <abbr id="kc8ii"></abbr>
  • <center id="kc8ii"><table id="kc8ii"></table></center>
    <abbr id="kc8ii"></abbr>
    你的位置:首頁 > 互連技術 > 正文

    來源知乎:CPU的分支預測器是如何工作的?

    發布時間:2014-08-26 責任編輯:sherryyu

    【導讀】在CPU中的分支預測器是具體在哪個位置?形態大概是怎樣的?它是怎么起到作用的?如果預測失敗它又是怎樣繞過已經失敗的預測從而增加重新預測的成功率的?小編綜合收集的資料一一回答這些問題。
     
    1.位置:分支預測器位于整個CPU核心流水線的差不多最前端部分,也就是靠近一級指令緩存的位置。從指令緩存里面讀取指令時,需要由分支預測器來判斷從哪里讀取。
     
    2.形態:分支預測器主要由兩個大塊組成(教科書上有可能不是這樣分),其中一塊是歷史記錄表,記錄以往執行過的分支指令的偏向情況,幫助未來的預測,本質上也是一塊高速緩存。另一塊是預測器的邏輯部分,這一部分用來維護記錄表,依據記錄表里面的記錄情況預測將來的分支走向。
     
    3.預測方法舉例。比如說有一條分支指令,執行了十幾次都是跳轉,那么預測器就會判斷,將來碰到這條指令時,它仍舊會跳轉。當這條指令的預測結果連續兩次出錯的時候,預測器就會調整自己的預測結果,改為判斷它不跳轉。這一預測方法是現今仍在沿用的2-bit計數器陣列,源于前CDC公司的JamesSmith(現為WISC-Madison的榮譽教授)在上世紀80年代初左右的發明,實測結果表明它的預測準確率基本上能到80%甚至90%上下。
     
    4.后記:到了九十年代初期,這個圈子里一個叫做YalePatt的大牌教授引領了幾乎十年的分支預測研究浪潮,他們做的預測器比JamesSmith的先進很多,被稱為自適應預測,可以捕捉住更多的分支歷史模式。(在Patt手下做預測的那個博士生Tse-YuYeh后來參加一個學術會議,Intel的人看到了他們做的東西,直接把人給挖走了,那個預測器用在了P6微結構里面,后來Tse-YuYeh離開Intel到了PASemi,現在好像是在Apple的CPU設計團隊。)
     
    后來又有很多人加入進來做分支預測的研究,做出了關聯性分支預測、返回棧預測等等非常棒的預測器,現在的分支預測器結構通常是競標賽式的復合分支預測器,比如當關聯性分支預測器的近期準確率比較高時,優先采用它,如果有其他預測器的近期準確率更高,就放棄它。后來的研究越來越精細,針對分支預測做了很多很多的調優,比如說如何在有限的空間里面盡可能減少大量分支指令對歷史記錄表的爭搶、嘗試對分支指令進行分類,每一類使用專門的預測器進行預測等等,現在的分支預測器非常強大,面對各種各樣的程序,預測準確率都能非常堅挺地保持在95%以上。
     
    微結構上的推測執行技術有很多種,分支預測引領的控制流相關的推測執行可能是其中最成功的一種。
    [page]
    附:分支預測圖解,從簡單到最復雜的:
    分支預測圖解
    這個是最簡單的分支預測,根據當前指令的地址,放進PHT中,根據右邊的這張狀態機,來確定是跳轉還是不跳轉。優勢:簡單,具有相當的準確性。
    狀態機
    [page]
    兩級預測
     
    這個預測機構比較復雜,擁有兩級分支,相比之前的方法,加入了BHT,可以根據指令地址,記錄一部分歷史記錄,然后再放進PHT中,決定跳轉還是不跳轉。優點在于可以記錄下某一些跳轉的關系,加強聯系。
    兩級預測
    混合預測,集合了上面兩個的優點,加上自己設定的選擇器。
     
    可以方便的看到,基本上所有的預測機制都是通過以往的歷史記錄來加強或者削弱跳轉關系。第一種方法很直接,用一個狀態機來描述了整個機制。第二個方法甚至在第一個的基礎上記錄了N多個跳轉的記錄。
     
    判斷出是否跳轉之后,CPU需要知道跳轉到哪里,因為不是每次跳轉的位置都是一樣的。所以在預測的基礎上又加上了BTB整個東西,這個東西記錄了之前跳轉的地址,因此CPU可以不計算跳轉的地址,直接預先load指令,如果出錯的話,將會刷新BTB,并且flush所有指令,重新load。
     
    BTB的結構如下:
    BTB的結構如下
    [page]
    BTB的工作方式如下:
    BTB的工作方式如下
    那么如果將這些所有的東西結合到CPU的流水線上,將會變成如下的流程:
    流程
     
    特別推薦
    技術文章更多>>
    技術白皮書下載更多>>
    熱門搜索
    ?

    關閉

    ?

    關閉

    久久久久久久人妻无码中文字幕爆| 亚洲V无码一区二区三区四区观看 亚洲爆乳精品无码一区二区三区 亚洲爆乳无码一区二区三区 | 无码性午夜视频在线观看| 国产av无码专区亚洲国产精品| 欧美日韩中文在线| 亚洲av中文无码乱人伦在线r▽| 亚洲人成国产精品无码| www日韩中文字幕在线看| 久久久久亚洲av无码专区喷水 | 亚洲国产综合无码一区二区二三区 | 中文有码vs无码人妻| 中文字幕av无码专区第一页| 久久亚洲精品无码播放| 中文字幕一区二区三区在线不卡| 久久久久久国产精品免费无码| 中文字幕你懂的| 国产精品99精品无码视亚| 国产精品中文字幕在线观看| 日韩精品无码一区二区三区免费| 中文字幕无码成人免费视频| 久久久久精品国产亚洲AV无码 | 亚洲日韩欧美国产中文| 无码国产亚洲日韩国精品视频一区二区三区 | 国产中文字幕在线免费观看| 国产av永久无码天堂影院| 国内精品无码一区二区三区 | 无码国内精品久久人妻蜜桃| 在线观看免费中文视频| 国产日韩精品无码区免费专区国产| 人妻无码人妻有码中文字幕| 亚洲AV中文无码乱人伦在线观看| 国产成人精品无码一区二区| 国内精品人妻无码久久久影院导航| 亚洲中文字幕无码日韩| 无码任你躁久久久久久| 日韩av无码久久精品免费| 中文字幕无码日韩专区| 亚洲JIZZJIZZ中国少妇中文 | 91精品久久久久久无码| 无码AV天堂一区二区三区| 大桥久未无码吹潮在线观看|