在當今數字化的時代,計算機已經成為我們生活中不可或缺的一部分。而在計算機的核心部位,中央處理器(CPU)則是其重要的組成部分。CPU 的性能決定了計算機的運行速度和處理能力,而流水線技術則是 CPU 性能提升的關鍵所在。
一條指令的生命周期分為五個階段:
取指階段(Instruction Fetch):取指階段是指將指令從存儲器中讀取出來的過程。程序指針寄存器用來指定當前指令在存儲器中的位置。讀取一條指令后,程序指針寄存器會根據指令的長度自動遞增,或者改寫成指定的地址。
譯碼階段(Instruction Decode):指令譯碼是指將存儲器中取出的指令進行翻譯的過程。指令譯碼器對指令進行拆分和解釋,識別出指令類別以及所需的各種操作數。
執行階段(Instruction Execute):指令執行是指對指令進行真正運算的過程。例如指令是一條加法運算指令,則對操作數進行相加操作;如果是一條乘法運算指令,則進行乘法運算。在“執行”階段最關鍵的模塊為算術邏輯單元(Arithmetic Logical Unit,ALU),它是實施具體運算的硬件功能單元。
訪存階段(Memory Access):訪存是指存儲器訪問指令將數據從存儲器中讀出,或寫入存儲器的過程。
寫回階段(Write-Back):寫回是指將指令執行的結果寫回通用寄存器的過程。如果是普通運算指令,該結果值來自于“執行”階段計算的結果;如果是存儲器讀指令,該結果來自于“訪存”階段從存儲器中讀取出來的數據。
什么是流水線?說的官方一點:流水線(Pipelining)是一種實現多條指令重疊的技術。通俗一點來說,跟工廠里面裝配蘋果手機的流水線沒有什么區別,只不過裝配流水線裝配的是手機零件,CPU流水線操作的是計算機指令執行步驟。
假設非流水線洗衣過程分為 4 個步驟:
如果采用流水線的方法可以節省大量的時間。如果第一批衣服從洗衣機清洗完拿出來之后進行烘干,就可以把第二批衣服放入洗衣機清洗了。第一批衣服烘干了之后,第二批衣服也清洗完了,可以進行烘干了。
流水線的奇妙之處在于,對于單獨的一批衣服來說,它的整個過程時間沒有縮短,而在有多批任務并行執行時,流水線的優勢就體現了出來。因為任務在并行執行,單位時間內完成的工作量就大大增加了。流水線實際上是改善了洗衣系統的吞吐率,使得工作效率大大提升。
可以試想一下,如果所有步驟所需時間一致,并且衣服足夠多,那么采用流水線的速度將會是非流水線的 4 倍,正好等于步驟數。在圖中的洗衣速度只提高了 2.3 倍的原因是圖中只展示了清洗 4 批衣服,流水線在開始和結束階段沒有滿載。
如果流水線各階段操作平衡,那么在流水線上的指令執行時間為(理想情況下):
流水線指令執行時間=非流水線指令執行時間 / 流水線級數
假設指令執行所需要的執行時間如下:
在非流水線方式中,第一條指令與第四條指令之間的時間差是 3*800=2400ps。
在流水線方式中,第一條指令與第四條指令之間的時間差是 3*200=600ps。
在圖中的加速比為 2400ps /1400ps,并不等于 4。這是為什么呢?這是因為執行指令的數量不夠多。
如果在上面流水線中增加 1000000 條指令,每一條指令都將使得整個執行時間增加 200ps,因此整個執行時間變成了 1000000 * 200ps + 1400ps=200001400ps。
在非流水線方式下,執行時間將變成 1000000 * 800ps + 2400ps=800002400ps。
二者比值即無限接近于 4。
從上面這兩個例子,可以看到流水線技術是很有優勢的:
流水線技術之所以能提高性能,究其本質是利用了時間上的并行性,那它讓原本應該先后執行的指令在時間上一定程度的并行起來,然而這也會帶來一些沖突和矛盾,進而可能引發錯誤。
在流水線中我們希望當前每個時鐘周期都有一條指令進入流水線可以執行。但在某些情況下,下一條指令無法按照預期開始執行,這種情況就被稱為冒險。
冒險分為三種:
示例一:如果指令和數據放在同一個存儲器中,則不能同時讀存儲器
解決方案一:我們有一個方便又簡便的方法,即流水線停頓(stall),產生空泡(bubble)。
雖然流水線停頓能用來解決各種冒險,但它的效率低下,應盡量避免。
解決方案二(推薦):在存儲器中設置單獨的指令高速緩存和數據高速緩存。(在計算機中主存儲器(內存)是統一存放指令和??據的,這也是馮諾依曼結構的要求,只是在CPU當中 的一級高速緩存會采用指令和數據分別存放的方式)。
示例二:如果讀寄存器和寫寄存器同時發生,如何處理?
解決方案(推薦):前半個周期寫,后半個周期讀,并且設置獨立的讀寫端口。
示例一:一條指令需要使用之前指令的結果,但是結果還沒有寫回。
解決方案一:流水線停頓(stall),產生空泡(bubble)。
解決方案二(推薦):數據前遞(Forwarding)
示例二:一條指令需要使用之前指令的運算結果,但是結果還沒有寫回
解決方案(推薦):數據前遞(Forwarding)
示例三:一條指令需要使用之前指令的訪存結果(數據前遞無法解決)
解決方案(推薦):流水線停頓 + 數據前遞
示例一:尚未確定是否發生分支,如何進行下一次取指?
解決方案一:流水線停頓,產生冒泡
解決方案二:靜態分支預測,假設分支不發生
例如,假設經過beq指令分支不發生,最壞情況是其實分支總是發生,所以執行兩條錯誤的lw、sw指令,又執行兩條正確的指令,這樣導致50%的性能浪費。
這也是因為轉移指令本身和流水線的模式是沖突的,因為轉移指令會改變指令的流向, 而流水線則希望能夠依次地取回指令,將流水線填滿。
那如果這種情況是非常罕見的,也許我們還可以容忍,但實際上轉移指令是非常常用的指令。
解決方案三:動態分支預測,類似“天氣預告”
解決方案四:改造電路,縮短分支延遲
解決方案五:延遲轉移技術,使流水線不停頓
“動態流水線”是通過重新排列指令執行順序來提高 CPU 性能的一種優化技術。
傳統流水線將指令執行過程劃分為固定的階段,每個階段處理特定的任務。亂序執行則是打破了指令原本的順序執行模式。在亂序執行機制下,只要當前指令所依賴的數據準備就緒,CPU 就可以立即執行該指令,而不必等待前面未準備好的指令,提高了流水線的效率。
亂序執行并不是真的“亂序”,其實是“有序取指、重排列執行順序、有序結束”,指令的結束順序其實是符合軟件中的原始順序的。
發射其實是動態流水線專有的術語。動態流水線的電路結構中,新增了“保留站”(Reservation Station),用來保存一組等待執行的指令,有的也稱為“發射隊列”(Issue Queue)。
將發射隊列中就緒的指令送入功能單元進行執行的操作叫做“發射”。
多發射(Multiple Issue)是指流水線的每個階段都能處理多于一條的指令。
在亂序執行的 CPU 中,每一個時鐘節拍處理的指令數量超過了一條。在取指階段,一次可以從內存中讀取多條指令;在譯碼階段,可以同時對多條指令分析相關性,并送入不同的發射隊列;在發射階段,每一個時鐘節拍都可以從發射隊列中分別發出一條指令;在執行階段,多個計算單元獨立工作,并行地進行運行。
多發射并不是說 CPU 有多條流水線,而是在一條流水線上增加了處理指令的寬度,在一個時鐘節拍中可以同時處理多份指令。
總的來說,CPU 流水線技術是計算機領域一項重要成就,利用了時間上的并行性,讓原本應該先后執行的指令在時間上一定程度的并行起來,然而這也會帶來一些沖突和矛盾(冒險)。雖然流水線冒泡可以解決冒險,但是還有更優雅的方式。“動態流水線”通過重新排列指令執行順序來提高 CPU 性能。
參考資料:北京大學《計算機組成》陸俊林
提到計算機我們就不得不提到一個人,馮·諾依曼(John von Neumann)是20世紀最重要的數學家之一,同時也是計算機科學的先驅。他最著名的貢獻之一是馮·諾依曼體系結構,這是現代計算機設計的基礎。這種架構包括以下幾個關鍵特點:
www.tebteb.cc
管手機還是電腦,我們都知道CPU性能的重要性,作為核心組件,CPU決定了整機的性能發揮,而CPU的頻率作為一個直觀的指標,成了不少玩家關注的重中之重,但CPU有主頻,倍頻,睿頻,超頻,這些參數之間有什么區別和聯系嗎?
主頻:CPU速度的基礎
主頻,也稱為時鐘頻率,它是CPU內部晶振產生的基本震蕩周期,即CPU每秒鐘可以執行的最基本指令次數。簡單來說,CPU主頻越高,理論上單位時間內處理的數據量就越大,因此CPU的運算速度也就越快。想象主頻是一輛汽車的最高行駛速度,它為我們提供了一個衡量CPU基本性能的直觀指標。
倍頻:靈活調整的閥門
倍頻,是CPU工作頻率與基準頻率(通常指主板上的前端總線頻率,簡稱FSB)之間的比率。在早期,CPU的主頻直接由FSB決定,但隨著技術發展,CPU設計了可變倍頻,使得用戶可以通過調整倍頻來改變CPU的工作頻率,而不必更改主板上的其他設置。這就好比汽車的檔位,不同的倍頻就像是不同的檔位,讓發動機在不同路況下都能高效運轉。
睿頻:智能加速的秘密
睿頻,是Intel引入的一項技術,AMD則稱之為“動態加速技術”。睿頻技術允許CPU在需要高性能時自動提升其運行頻率,超出其標稱的基礎頻率,而在不需要時則自動降低,以節省功耗。這一過程完全由CPU內部的智能算法控制,無需用戶干預。就像賽車手在直道上踩油門加速,在彎道前松油門減速一樣,睿頻讓CPU在保證穩定性和節能的同時,還能在關鍵時刻爆發更強的性能。
超頻:專業技術的挑戰
超頻,則是指通過手動調整CPU的電壓、倍頻等參數,使其工作在高于制造商規定標準的頻率上,以此來獲取更高的性能。超頻對于追求極致性能的玩家來說,是一種既刺激又具有挑戰性的嘗試。它類似于汽車改裝,通過更換高性能零件、調整引擎參數,讓車輛突破原廠設定的極限速度。然而,超頻也會帶來更高的發熱量和穩定性風險,因此需要良好的散熱系統和專業的知識支撐。
需要注意的是,CPU的頻率并不是單純由頻率決定的,而要受到多重因素的影響,而且CPU為了續航和溫度控制,一般也不會設置太高的主頻,所以不能單純依靠主頻來判斷CPU的性能。
(8719948)