為什麼CPU流水線設計的級越長,完成一條指令的速度就越快?

時間 2021-05-12 05:28:07

1樓:商家瑋

盡信書不如無書。

超流水,是相比於流水線來說的,只是增加了流水線的長度。

如果是順序執行的流水線,當頻寬不變時,超流水的效能還不如不超。

如果是超標量變序推測執行的流水線,則可以將指令盡可能多的送入各個執行單元中,那麼執行單元就會被利用起來,提公升效能。

2樓:其實我是老莫

不是完成一條指令的速度越快,實際上加了流水線以後完成一條指令的總時間會變長。

是由於加了流水線,可以讓多條指令可以在時間上進行交疊。從而使完成一批的指令時間變短。

這個問題是典型的混淆了延遲(Latency)吞吐率(Throughput)兩個概念。這是我們上課要重點強調區分的,不過每年還是有很多人到最後也搞不懂。

當然,流水線設計中還有乙個「氣泡」的概念。如果出現氣泡了,延遲自然更大,吞吐率提公升也要受到影響。這些複雜的問題還是需要去多多看書才能明白,上知乎也就圖一樂。

3樓:

空間正是指邏輯門的數量,晶元中整合的邏輯門的數量是有限的,因為這個是需要物理實現的,所以不可能整合無限擴充套件指令集。

數字邏輯快忘光了,大概意思是時序邏輯中有個控制開關,每次開關高電平時輸出狀態才按輸入狀態的某個組合邏輯變化,主頻就是這個控制開關,主頻越高就處理越快,當然也不可能無限快,邏輯門輸出變化到穩定狀態也是需要時間的。

參考工廠流水線生產,如果某個產品可以分成10道工序,10個工人同時生產,那麼差不多就是乙個工人生產速度的10倍,如果能分成100道工序,並有100個工人同時生產就是乙個工人生產速度的100倍,cpu流水線上所有級都可以同時工作,所以流水線級數多批量完成指令越快。

不是每個產品都能分成相同的多道工序,如果產品差別比較大,需要設定不同的產線,一條新的產線需要新的空間,擴充套件指令集也是類似的概念。

4樓:莫匪爾極 文

一句話解釋問題

指令發出去是要等待對方響應的流水線就是不等對方響應就發下乙個超時等不到就報出來而不是一根筋死等不幹活。 流水線越長併發能力越強

參見星巴克點餐人數等餐人數如果點餐的人不拿走餐就不離開櫃檯壓力是不是差大這就是典型兩級流水

5樓:挖掘機不機

補充乙個適合零基礎,比較 intuitive 的答案。想當初,自己親手設計過畫過 pipelined CPU的電路圖,並成功過了各種test cases。這個問題裡滿滿的都是青春呀~

CPU的流水線,也可以想象成工廠的流水線,工廠的流水線有很多任務人,每乙個工人就對應CPU流水線的一級,負責乙個工序。工廠的流水線加工產品,相當於CPU的流水線執行指令。自然而然的也可以想到,工廠裡工人越多,流水線也自然越快。

當然,還有一點值得補充的是,當流水線特別特別特別長的時候,CPU的速度反倒會變慢。就比如,明明工廠的流水線是,把西紅柿變成西紅柿丁。本來幾個工序搞定的事,硬生生非要整幾百個工序,這樣的流水太過複雜,反倒會更慢。

要弄懂更深層次的原理。

首先,我們要明白要成一條指令的速度由什麼決定?CPU時鐘週期的長度,和,完成一條指令的時鐘週期。那為什麼在衡量CPU執行指令的速度的時候,我們需要考慮時鐘週期了?

因為完成一條指令的計算,需要把計算的最終結果存入指定的暫存器內。在這個過程中,也會產生很多中間結果,需要存入不同的中間的暫存器。但是,由於暫存器本身的特點,乙個週期內,只能寫入乙個暫存器一次。

而一條指令往往涉及很多個暫存器的寫入(除了最終結果的暫存器,還有很多用於儲存中間結果的暫存器),所以說一條指令的執行時間主要是看有多少暫存器需要寫入,這個的時間主要看多少個時鐘週期。

6樓:勝勳

把1個指令分成5個階段,可以5個運算器分別處理每個階段,指令之間相差 0.2 個週期

把1個指令分成10個階段,可以10個運算器分別處理每個階段,指令之間相差 0.1 個週期

7樓:C-R條件

首先結論是錯誤的。

任何乙個運算你的演算法不變,運算的長度也當然不變。

流水線的作用並不是縮短你的一條指令的計算長度,而是充分利用硬體開銷。如果乙個運算分為3級,資料傳到第2級時,第1級就空閒下來了,這時你再傳入一組資料不讓第1級停下來,這就是流水線了……同理,你如果給他分成10級,每一級都是不同的資料在做運算,那你每一拍都能輸出乙個結果,相當於提高了硬體處理資料的頻率。但是你對其中單個一組資料來看,它依然是走過了完整的計算通路,執行時間並沒有減少,反而還會增加。

流水線級數越多,就對硬體利用的越充分,計算之間的間隔越短,輸出頻率更高,所以看起來「快」了很多。

8樓:

Pentium4的設計人員大概也是這麼想的...事實上一昧做深流水級的路線在Pentium4上已經宣告失敗了,深流水會導致轉移猜測失敗後的penalty非常大,大到幾乎抵消做深流水帶來的高頻優勢.

9樓:中二癌晚期患者

這!題!我!會!

首先給出結論,CPU流水線越長,完成一條指令的速度實際上是越慢的!沒錯!就是慢!所以才會有dsp這類推崇短流水低延遲的裝置出現。

但是,長流水線平均下來每條指令執行的速度是變快的!

其他答主貌似很少有特別客觀地給出公式進行定量分析的。這裡我來推導一下。在地鐵上碼字不方便,有機會再另外補圖吧。

1 電路結構的簡化

首先,需要鋪墊一些基礎知識。對於大部分數位電路來說,邏輯可以粗略地大概分為兩部分,即組合邏輯和觸發器。觸發器負責在時鐘有效邊沿到來的時候將資料採集下來,在時鐘有效邊沿沒有到來的時候將資料保持住。

於是乎,資料就乙個週期乙個週期地向後傳遞。傳遞過程中,資料流過組合邏輯,被組合邏輯進行運算、處理,然後再被下一級觸發器採集到。

因此,大多數數位電路都可以簡化為「前級觸發器~組合邏輯~后級觸發器」的結構。

2 電路涉及到的時間引數

在電路中,主要涉及到以下幾種引數(只列出了和時鐘頻率有關的引數)

觸發器:

輸出延遲(Tc2q):時鐘有效邊沿到來後,資料從觸發器輸入被採集到輸出所用的時間

建立時間(Tsetup):時鐘有效邊沿來之前,資料至少應該保持穩定的時間

組合邏輯:

組合邏輯延遲(Tcl)組合邏輯輸入變化後,輸出穩定到正確值所需要的時間

有了這些引數,就可以進行計算了。

從前兩章不難得知,在乙個時鐘週期內,電路需要完成以下過程:

前級觸發器將資料送到自己的輸出

組合邏輯將柵極觸發器送過來的資料進行處理,送給后級觸發器

因此,總共消耗的時間就是:

Tc2q+Tcl

但是不要忘了,資料被組合邏輯送給后級觸發器後,還需要穩定乙個Tsetup,因此乙個週期內電路消耗的全部時間就是:

Tc2q+Tcl+Tsetup

這也就是時鐘週期的最小值。實際上,因為時鐘訊號的不確定性,還會有一些其他的引數,但是這裡簡化掉就不考慮了。因此,最後電路時鐘週期T可以表示為:

T≥Tc2q+Tcl+Tsetup

也就是說時鐘頻率f要滿足:

f≤1/(Tc2q+Tcl+Tsetup)

從第二節的分析中不難看出,時鐘頻率主要受到觸發器和組合邏輯的影響,所以提高頻率也就要從這兩塊下手。

如果要改善觸發器,可以降低觸發器輸出延遲和建立時間。這兩塊可以通過改善工藝和改善觸發器尺寸匹配、觸發器結構來做。但是改善終歸還是有限的,而且成本極高。

因此,人們把目光放在了組合邏輯上。組合邏輯的延遲固然也和工藝、尺寸匹配有關,但也和組合邏輯複雜程度有關。組合邏輯越複雜、規模越大,延遲也就越高。

於是,為了提高頻率,人們開始把組合邏輯打散,在組合邏輯中間加一級或多級觸發器,將乙個大的Tcl變成乙個或幾個小Tcl,於是時鐘週期就變成了:

T≥Tc2q+Tsetup+Max(Tcl1, Tcl2Tcln)

其中,最理想情況就是組合邏輯延遲被n等分。

這一小節只考慮最理想情況,即組合邏輯延遲被n等分,同時假設電路工作在最高頻率。因此,最小時鐘週期就是:

Tmin=Tc2q+Tsetup+Tcl/n

由於電路處理時間由單週期變成了n週期,因此處理完乙個資料(指令)所需要的時間就變成了:

n*Tmin=n(Tc2q+Tsetup)+Tcl

由此可見,在各自的極限頻率下,打流水線後處理一筆資料(指令)所需要的時間不僅沒有變短,還多了(n-1)(Tc2q+Tsetup)。

那為什麼還要加流水線呢?

因為加流水線前後,電路都是每個週期都可以輸入資料(指令),但是由於加了流水線後時鐘週期變短,因此單位時間內資料吞吐量變大了很多,資料處理量變大了很多。

當然了,打流水線的原因還有很多,具體打多少級還要考慮功耗、延遲、發熱、面積、時鐘域規劃等等眾多因素。但是根本原因還是為了提高資料吞吐量。

10樓:難籃

因為器件是不理想的,乙個時鐘週期裡,每一次運算,每乙個操作都需要時間,。為了保證不出錯,時鐘週期的長度必須長於完成所有操作的時間之和。而流水線的意義就在於:

把操作分步進行後,每個時鐘週期內要做的事情變少。這樣時鐘週期就可以縮短,頻率提公升。效能也得以提公升。

11樓:深度人工智障

(只說自己了解到的內容)

過去順序執行指令時,是一條指令執行完成才執行下一條指令,但是指令的執行其實可以分解成若干不同階段,比如取指階段、解碼階段、執行階段和訪存階段,而不同階段是在處理器的不同部分執行,所以我們能讓指令1執行到訪存階段,指令2執行到執行階段、指令3執行到解碼階段、指令4執行到取指階段,由此讓指令流水線地進行執行。

我們通過在不同階段插入不同的流水線暫存器,將各階段的組合邏輯劃分開,來實現流水線處理器的。在每個時鐘週期當時鐘電平變高時,完成流水線暫存器的寫操作,將處於上一階段的指令的執行結果存放到當前的流水線暫存器中,這樣當時鐘電平變低時,就能讓完成上一階段的指令開始執行當前階段的計算。由此每個時鐘週期就會使得處理器中的指令向前執行乙個階段,所以每個時鐘週期就會完成一條指令的完整執行。

從一條指令的執行時間來看,由於在一條指令的執行過程中插入了若干個流水線暫存器,而流水線暫存器的讀寫操作也是要花時間的,所以在原有執行指令的基礎上增加了讀寫流水線暫存器的時間,所以從單條指令的執行時間來看,是增加了的。

從吞吐量的角度來看,即每秒執行指令的個數,由於我們將指令劃分成了不同的階段,每個階段的組合邏輯就變簡單了,我們就能提高時鐘頻率,並且每個時鐘週期會完成一條指令,所以吞吐量會提高。但是吞吐量也不是無限提高的,當你插入很多流水線暫存器時,每個階段的執行時間就主要依賴於流水線暫存器的讀寫時間了,此時如果不提高流水線暫存器的讀寫速度,吞吐量也就達到上限了。

綜上所述,將流水線分越多級,會使得處理器吞吐量增高且有上限,但會使得單條指令的執行時間變長。

參考:

為什麼現在醫生看病像流水線一樣?

大聖搞機 流水線的特點是啥?效率高唄!你為啥會提這個問題?分配到你個人的時間短,心裡不踏實唄!像流水線到底好不好?效率高,機會均等。怎麼解決你的問題?小病去社群醫院二級醫院,有醫生朋友最好! 醫協雲 病人多,醫生少,乙個醫生每天要看幾百個病人 而培養乙個醫生往往需要花好幾年,醫生還要不斷的學習新的知...

為什麼目前很多任務廠還是有許多流水線式工作,其實都是很簡單的重複性動作,為什麼企業不自動化生產加工?

一是成本問題,二是技術達不到要求。目前多數工廠並非全手工,而是屬於半自動,有一些工序必須由機器完成。我這裡的工藝維修員還是三天兩頭的過來修機器,機器並不穩定,該不夠智慧型。 最簡單的例子 當你單身的時候,一頓飯一般消耗乙個碗,一到兩個盤子,手洗盤子碗,是最經濟實惠的乙個方案,完全沒有必要也不上洗碗機...

為什麼會有人願意在流水線工作好幾年?

李雪飛 看到你的問題,我第一時間想到的是這句話 汝之蜜糖,彼之砒霜。在流水線工作多年對你來說是不那麼理解的,可能對他人來說,這是好不容易才找到的乙個養家餬口的工作。流水線工作本身屬於簡單的體力勞動,如下圖競爭力金字塔模型所示。競爭力金字塔來自古典老師的個人戰略課 這是最容易被機器替換的工作,也是最容...