餘倫靜影響流水線的效能和解決方法

2021-04-04 22:07:40 字數 4338 閱讀 9032

影響流水線效能的因素與解決辦法

借鑑了工業流水線製造的思想,現代cpu也採用了流水線設計。在工業製造中採用流水線可以提高單位時間的生產量;同樣在cpu中採用流水線設計也有助於提高cpu的頻率。先讓我們以汽車裝配為例來解釋流水線的工作方式。

假設裝配一輛汽車需要4個步驟:1.沖壓:

製作車身外殼和底盤等部件,2.焊接:將沖壓成形後的各部件焊接成車身,3.

塗裝:將車身等主要部件清洗、化學處理、打磨、噴漆和烘乾,4.**:

將各部件(包括發動機和向外採購的零部件)組裝成車;同時對應地需要沖壓、焊接、塗裝和**四個工人。如果不採用流水線,那麼第一輛汽車依次經過上述四個步驟裝配完成之後,下一輛汽車才開始進行裝配,最早期的工業製造就是採用的這種原始的方式。

不久之後大家就發現,某個時段中一輛汽車在進行裝配時,其它三個工人處於閒置狀態,顯然這是對資源的極大浪費!於是大家開始思考能有效利用資源的方法:有什麼辦法讓四個工人一起工作呢?

那就是流水線!在第一輛汽車經過沖壓進入焊接工序的時候,立刻開始進行第二輛汽車的沖壓,而不是等到第一輛汽車經過全部四個工序後才開始。之後的每一輛汽車都是在前一輛沖壓完畢後立刻進入沖壓工序,這樣在後續生產中就能夠保證四個工人一直處於執行狀態,不會造**員的閒置。

這樣的生產方式就好似流水川流不息,因此被稱為流水線。

cpu的工作我們也可以大致分為指令的獲取、解碼、運算和結果的寫入四個步驟,採用流水線設計之後,指令(好比待裝配的汽車)就可以連續不斷地進行處理。在同乙個較長的時間段內,顯然擁有流水線設計的cpu能夠處理更多的指令。

intel和amd在桌面cpu市場上的激烈競爭,使雙方都千方百計地拿出更強大產品來壓制對方,而最引人矚目的就是cpu的頻率之爭。隨著cpu頻率不斷地攀公升,intel總是在自己某個核心的處理器到達極限之時採用新的、更長流水線的核心來消除頻率的瓶頸。那麼流水線和頻率之間有什麼關係呢?

還是以上面的例子來說明。假如沖壓、焊接、塗裝和**四個過程各自需要1個小時,現在我們把這四個工序細化:沖壓分為沖壓1(外殼)和沖壓2(底盤)兩個子工序,另外三個工序同樣各自分成兩個子工序,一共八個子工序。

這樣一來,完成每個子工序平均只需要半個小時,因此每隔半個小時就有一輛汽車完成裝配,下線速度提高了一倍!如果再進一步細化,一分為二,那麼完成每個工序平均只需要15分鐘,即每隔15分鐘就有一輛汽車下線,速度又提高了一倍(單輛汽車的生產時間仍是4個小時,但是兩輛汽車的生產間隙更小了)。所以工序分得越細,單位時間內(例如8個小時)生產的汽車就越多。

正是這樣,cpu廠商才試圖不斷加長流水線,以利於頻率的提公升。那麼為什麼prescott核心的處理器才31級流水線,流水線級數能不能無限增長呢

首先,由於現有晶元製造工藝的限制,頻率的提公升帶來高功耗、高發熱量的問題。儘管流水線增長,頻率提公升的空間相應增大,但是處理器頻率提公升的其它瓶頸卻無法解決。而且過長的流水線意味著更加複雜的內部結構,生產的良品率也難以保證。

其次,在cpu的工作中,指令往往不是孤立的,許多指令按一定的順序執行才能完成乙個任務。而一旦某個指令在運算過程中發生了錯誤,或者執行了沒有用的指令,那麼其後與之相關的指令就都沒有用了。這些指令必須清除掉,然後再執行其它的指令,cpu相當於做了許多無用功!

流水線越長,一旦出錯影響也就越大,比如乙個指令在最後一級出錯,那麼可能在後續流水線中的所有指令都要被清除,northwood核心處理器要浪費20級工序的時間,而prescott核心處理器就要浪費31級工序的時間!

最基本的cpu流水線分成5級,如果將每一步細化便可以擴充套件到10級。流水線必須實現相同的目標:引入指令,輸出結果,但級數的不同會讓效率發生變化。

5級流水線每一步花費的工作量要比十級流水線更大。 如果其他保持不變,那麼我會選擇5級流水線,因為實現5級資料處理更加容易,如果每一級不能保持全速運算,那cpu的效率會大大下降。

選擇更多流水線的理由是,如果每一級的處理過程更簡單,那處理的速度會加快。最複雜的那一級會是整個運算中最慢的一環,它將決定整體的執行速度。

如果我們假設5級流水線的每一級都要花費1ns來完成,每一級運算的週期為乙個時鐘頻率,那麼我們得到了1ghz的處理速度。當我們增加線管級數時,這時很難保證每一級都全速執行,我們必須通過縮短每一級運算的週期來進行彌補。慶幸的是,由於每個時鐘頻率的工作量減少了,我們能有效縮短週期,在後者的設計中,時鐘週期可以縮短到0.

5ns。

十級流水線實現了2ghz的執行頻率,它是前者執行頻率的兩倍。如果我們假定每一級流水線都全速工作,那麼它的效能也將是前者的兩倍。但現實是,流水線不可能每刻都處於滿負荷狀態,因此市場上的2ghz cpu不可能有1ghz cpu兩倍的效能。

對於cpu來說,它的工作可分為獲取指令、解碼、運算、結果幾個步驟。其中前兩步由指令控制器完成,後兩步則由運算器完成。按照傳統的方式,所有指令按順序執行,先由指令控制器工作,完成一條指令的前兩步,然後運算器工作,完成後兩步,依此類推……很明顯,當指令控制器工作時運算器基本上處於閒置狀態,當運算器在工作時指令控制器又在休息,這樣就造成了相當大的資源浪費。

於是cpu借鑑了工業生產中被廣泛應用的流水線設計,當指令控制器完成了第一條指令的前兩步後,直接開始第二條指令的操作,運算器單元也是,這樣就形成了流水線。流水線設計可最大限度地利用了 cpu資源,使每個部件在每個時鐘週期都在工作,從而提高了cpu的運算頻率。

影響流水線效能的因素:

流水線處理方式是一種時間重疊並行處理的處理技術,具體地說,就是流水線可以在同乙個時間啟動2個或以上的操作,藉此來提高效能。為了實現這一點,流水線必須要時時保持暢通,讓任務充分流水,但在實際中,會出現2種情況使流水線停頓下來或不能啟動:

1、多個任務在同一時間週期內爭用同乙個流水段。例如,假如在指令流水線中,如果資料和指令是放在同乙個儲存器中,並且訪問介面也只有乙個,那麼,兩條指令就會爭用儲存器;在一些算數流水線中,有些運算會同時訪問乙個運算部件……

2、資料依賴。

比如,a運算必須得到b運算的結果,但是,b運算還沒有開始,a運算動作就必須等待,直到a運算完成,兩次運算不能同時執行。不過,就算是這樣,我們也不用擔心,因為對於第一種情況,我們可以增加運算部件的數量來使他們不必爭用同乙個部件;第二種情況,我們可以用指令排程的方法重新安排指令或運算的順序。

流水線是現代risc核心的乙個重要設計,它極大地提高了效能。

對於一條具體的指令執行過程,通常可以分為五個部分:取指令,指令解碼,取運算元,運算(alu),寫結果。其中前三步一般由指令控制器完成,後兩步則由運算器完成。

按照傳統的方式,所有指令順序執行,那麼先是指令控制器工作,完成第一條指令的前三步,然後運算器工作,完成後兩步,在指令控制器工作,完成第二條指令的前三步,在是運算器,完成第二條指令的後兩部……很明顯,當指令控制器工作是運算器基本上在休息,而當運算器在工作時指令控制器卻在休息,造成了相當大的資源浪費。解決方法很容易想到,當指令控制器完成了第一條指令的前三步後,直接開始第二條指令的操作,運算單元也是。這樣就形成了流水線系統,這是一條2級流水線。

如果是乙個超標量系統,假設有三個指令控制單元和兩個運算單元,那麼就可以在完成了第一條指令的取址工作後直接開始第二條指令的取址,這時第一條指令在進行解碼,然後第三條指令取址,第二條指令解碼,第一條指令取運算元……這樣就是乙個5級流水線。很顯然,5級流水線的平均理論速度是不用流水線的4倍。

流水線系統最大限度地利用了cpu資源,使每個部件在每個時鐘週期都工作,大大提高了效率。但是,流水線有兩個非常大的問題:相關和轉移。

在乙個流水線系統中,如果第二條指令需要用到第一條指令的結果,這種情況叫做相關。以上面哪個5級流水線為例,當第二條指令需要取運算元時,第一條指令的運算還沒有完成,如果這時第二條指令就去取運算元,就會得到錯誤的結果。所以,這時整條流水線不得不停頓下來,等待第一條指令的完成。

這是很討厭的問題,特別是對於比較長的流水線,比如20級,這種停頓通常要損失十幾個時鐘週期。目前解決這個問題的方法是亂序執行。亂序執行的原理是在兩條相關指令中插入不相關的指令,使整條流水線順暢。

比如上面的例子中,開始執行第一條指令後直接開始執行第三條指令(假設第三條指令不相關),然後才開始執行第二條指令,這樣當第二條指令需要取運算元時第一條指令剛好完成,而且第三條指令也快要完成了,整條流水線不會停頓。

另乙個大問題是條件轉移。在上面的例子中,如果第一條指令是乙個條件轉移指令,那麼系統就會不清楚下面應該執行那一條指令?這時就必須等第一條指令的判斷結果出來才能執行第二條指令。

條件轉移所造成的流水線停頓甚至比相關還要嚴重的多。所以,現在採用分支**技術來處理轉移問題。雖然我們的程式中充滿著分支,而且哪一條分支都是有可能的,但大多數情況下總是選擇某一分支。

比如乙個迴圈的末尾是乙個分支,除了最後一次我們需要跳出迴圈外,其他的時候我們總是選擇繼續迴圈這條分支。根據這些原理,分支**技術可以在沒有得到結果之前**下一條指令是什麼,並執行它。現在的分支**技術能夠達到90%以上的正確率,但是,一旦**錯誤,cpu仍然不得不清理整條流水線並回到分支點。

這將損失大量的時鐘週期。所以,進一步提高分支**的準確率也是正在研究的乙個課題。

越是長的流水線,相關和轉移兩大問題也越嚴重,所以,流水線並不是越長越好,超標量也不是越多越好,找到乙個速度與效率的平衡點才是最重要的。

流水線技術的由來

從前在英格蘭北部的乙個小鎮裡,有乙個名叫艾薇的人開的魚和油煎土豆片商店。在店裡面,每位顧客需要排隊才能點他 她 要的食物 比如油炸鱈魚,油煎土豆片,豌豆糊,和一杯茶 然後每個顧客等著盤子裝滿後坐下來進餐。艾薇店裡的油煎土豆片是小鎮中最好的,在每個集市日中午的時候,長長的隊伍都會排出商店。所以當隔壁的...

實驗1流水線中的相關

1.1 實驗目的 1.加深對計算機流水線基本概念的理解。2.理解mips結構如何用5段流水線來實現,理解各段的功能以及基本操作 3.加深對資料衝突 結構衝突的理解,理解這兩類衝突對cpu效能的影響 4.進一步理解解決資料衝突的方法,掌握如何應用定向技術來減少資料衝突引起的停頓。1.2 實驗平台 實驗...

流水線精細化管理的定位問題

金陵監獄服裝公司在江蘇省整個監獄系統中是成立比較早的服裝企業之一。經過了多年的發展,在監獄黨委的領導下,由乙個只能加工單一產品的服裝企業發展成為乙個具有一定綜合加工能力的大型服裝加工企業。企業的規模上去了,可是其效益的提公升還遠遠沒有與其規模相匹配。在面臨發展瓶頸的關鍵時候,以嵇監獄長為核心的黨委適...