為什么有些CPU的主頻更低,但運算效率卻更高呢?
比如:51單片機30M主頻,STM32單片機20M主頻,執行相同一段代碼可能主頻更低的STM32所花的時間更短。
這里就牽涉到CPU流水線的問題,本文圍繞CPU流水線描述相關內容。
一、早期CPU流水線
1.流水線來源
流水線的概念來源于工業制造領域,以汽車裝配為例來解釋流水線的工作方式,假設裝配一輛汽車需要四個步驟:
1.沖壓:制作車身外殼和底盤等部件; 2.焊接:將沖壓成形后的各部件焊接成車身; 3.涂裝:將車身等主要部件清洗、化學處理、打磨、噴漆和烘干; 4.總裝:將各部件(包括發動機和向外采購的零部件)組裝成車;
汽車裝配需要沖壓、焊接、涂裝和總裝四個工人,最簡單的方法是一輛汽車依次經過上述四個步驟裝配完成之后,下一輛汽車才開始進行裝配,最早期的工業制造就是采用的這種原始的方式,即同一時刻只有一輛汽車在裝配。
不久之后人們發現,某個時段中一輛汽車在進行裝配時,其它三個工人都處于閑置狀態,顯然這是對資源的極大浪費,于是思考出能有效利用資源的新方法,即在第一輛汽車經過沖壓進入焊接工序的時候,立刻開始進行第二輛汽車的沖壓,而不是等到第一輛汽車經過全部四個工序后才開始,這樣在后續生產中就能夠保證四個工人一直處于運行狀態,不會造成人員的閑置。這樣的生產方式就好似流水川流不息,因此被稱為流水線。
2.CPU流水線
1989 年推出的 i486 處理器引入了五級流水線。這時,在 CPU 中不再僅運行一條指令,每一級流水線在同一時刻都運行著不同的指令。這個設計使得 i486 比同頻率的 386 處理器性能提升了不止一倍。
五級流水線中的取指階段將指令從指令緩存中取出(i486 中的指令緩存為 8KB);
第二級為譯碼階段,將取出的指令翻譯為具體的功能操作;
第三級為轉址階段,用來將內存地址和偏移進行轉換;
第四級為執行階段,指令在該階段真正執行運算;
第五級為退出階段,運算的結果被寫回寄存器或者內存。
由于處理器同時運行了多條指令,大大提升了程序運行的性能。
二、CPU流水線技術
CPU流水線技術是一種將指令分解為多步,并讓不同指令的各步操作重疊,從而實現幾條指令并行處理,以加速程序運行過程的技術。
指令的每步有各自獨立的電路來處理,每完成一步,就進到下一步,而前一步則處理后續指令。
采用流水線技術后,并沒有加速單條指令的執行,每條指令的操作步驟一個也不能少,只是多條指令的不同操作步驟同時執行,因而從總體上看加快了指令流速度,縮短了程序執行時間。
流水線技術是通過增加計算機硬件來實現的。它要求各功能段能互相獨立地工作,這就要增加硬件,相應地也加大了控制的復雜性。如果沒有互相獨立的操作部件,很可能會發生各種沖突。例如要能預取指令,就需增加指令的硬件電路,并把取來的指令存放到指令隊列緩沖器中,使微處理器能同時進行取指令和分析、執行指令的操作。
---來自百度百科
三、流水線與代碼執行效果
為什么說同主頻的51單片機相比STM32執行效率低呢?
除了大家認為的8位和32位寬度區別之外,還有一個就是51單片機不支持流水線(也可以理解為單流水線),而STM32支持流水線。
Cortex‐M3處理器使用一個 3 級流水線。流水線的 3 級分別是:取指、解碼和執行, 如圖:
通過下面一張圖來對比單流水線和多級流水線,你就更能明白為什么51單片機執行效率低了。
四、多級流水線優缺點
并非在所有情況下流水線技術都起作用。可能有一些缺點。如果一條指令流水線能夠在每一個時脈周期接納一條新的指令,被稱為完整流水線(fully pipelined)。因流水線中的指令需要延遲處理而要等待數個時脈周期,被稱為非完整流水線。
當一名程序員(或者組合者/編譯者)編寫組合代碼(或者匯編碼)時,他們會假定每個指令是循序運行的。而這個假設會使流水線無效。當此現象發生后程序會表現的不正常,而此現象就是危害。不過當前有提供幾種技術來解決這些危害像是轉發與延遲等。
1.優點
減少了處理器執行指令所需要的時脈周期,在通常情況下增加了指令的輸入頻率(issue-rate)。
一些集成電路,例如加法器或者乘法器,通過添加更多的環路使其工作得更快,如果以流水線替代,能相對地減少環路。
2.缺點
流水線處理器設計復雜度更高、生產成本更高;
流水線的處理器必須在數據路徑中添加額外觸發器。
非流水線處理器有固定指令位寬,流水線處理器的性能更難以預測,并且不同的程序之間的變化可能更大。
原文標題:為什么CPU流水線會提高代碼執行效率?
文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
單片機
+關注
關注
6032文章
44522瀏覽量
633167 -
cpu
+關注
關注
68文章
10827瀏覽量
211171 -
代碼
+關注
關注
30文章
4752瀏覽量
68360
原文標題:為什么CPU流水線會提高代碼執行效率?
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論