新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 從4004到core i7:處理器的進化史(3)-4-第一次加速

        從4004到core i7:處理器的進化史(3)-4-第一次加速

        作者: 時間:2014-02-19 來源:摘自《果殼小組》網 收藏

          假設我們的帶流水線恰好就有5個環節分別完成以上的5個步驟,那么在上面的代碼中,某時刻:

        本文引用地址:http://www.104case.com/article/233547.htm

          [ID] mov reg2,reg1
          [OC] mov reg1,1
          [EX] nop
          [WB] nop

          下一時刻如果是這樣:

          [OC] mov reg2,reg1
          [EX] mov reg1,1
          [WB] nop

          就會產生錯誤:在OC環節進行的是讀,我們本來應該讀到reg1=1,但是上面的情況中由于reg1=1沒有WB,我們讀到了reg=0!

          正確地處理應該是這樣:

          [ID] mov reg2,reg1
          [OC]nop
          [EX] mov reg1,1
          [WB] nop

          ----------------------------

          [ID] mov reg2,reg1
          [OC]nop
          [EX] nop
          [WB] mov reg1,1

          -----------------------------

          [OC] mov reg2,reg1
          [EX] nop
          [WB] nop

          ----------------------------

          [EX] mov reg2,reg1
          [WB]nop
          ...

          上面的情況叫做數據依賴(data dependency),是降低流水線性能的主要原因。我們對數據依賴的解決辦法很簡單:

          對流水線中的指令更改的、內存都做記錄。在OC環節進行審查,如果該指令讀取的、內存沒有掛起的更改(沒有還沒有WB的更改),就執行讀取,否則便要等待直到最近的一條更改讀取的指令的WB執行之后才能執行。

          對于內存的更改的實際情況要更復雜些,在這個帖子中先不講,留到后面和超標量網絡一起敘述。

          在上面的等待過程中,我們在流水線中插入了一些nop指令,這種現象叫做空泡(bubble)。不難想象,在某些有著20多級流水線的中的bubble常常長達十幾個環節。

          數據依賴產生的最嚴重的空泡莫過于分支(branch)。你可能經常在C源代碼中這樣寫:

          if(sel==1)
          {
          proc1();
          }
          else
          {
          proc2();
          }

          放到上面的5級流水線中考慮時,我們驚訝地發現:

          sel==1這一判斷(CMP指令)的結果(常常是狀態寄存器的ZF位)要到WB的時候才能知曉,但它影響的卻是PC(程序指針)的值,也就是說產生數據依賴的是IF階段!分支指令可能產生長達5個環節的空泡!

          正是由于分支指令對性能的極大損害,現代的常常費盡心思地進行分支預測(branch prediction),期望盡量猜中分支指令執行的結果,盡可能減少極端的長空泡。

          不幸的是,分支是任何語言必不可少,甚至是最有用的部分:一個只能順序向下執行的程序有什么用呢?

          你可以想象早期的CPU面對分支語句有多么無力。更加不幸的是,最愛用分支語句的程序恰恰是必不可少的:編譯器!傳說GCC中就有超過4000個if語句。

          下面再從電路的層面上說說pipleline這件事:

          CPU的執行引擎(execution engine)可以被看成一個巨大的邏輯電路。它有一個傳輸延時t_pd,logic,即它從輸入(IF開始)到輸出(WB結束)的耗時。

          在尋找最高時鐘頻率,即最小時鐘周期間隔時,自然有:



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 岳阳县| 怀柔区| 阿克| 东山县| 锡林浩特市| 泾阳县| 钦州市| 佛教| 广德县| 丹棱县| 鲁甸县| 大埔区| 贵德县| 镇康县| 巴塘县| 新疆| 土默特左旗| 大姚县| 申扎县| 淅川县| 桐城市| 龙南县| 吕梁市| 大方县| 寻乌县| 南开区| 望谟县| 龙江县| 宝鸡市| 姜堰市| 岢岚县| 南丰县| 宜宾县| 闵行区| 浏阳市| 广南县| 谢通门县| 玛纳斯县| 安达市| 东台市| 南丹县|