科技簡章043- 什麼是CPU微架構

前面的文章我們介紹了指令集,指令簡單理解就是用來指揮計算機硬體執行特定任務的程式碼,指令集就是指令的集合。

指令架構規定了CPU執行什麼樣的指令、執行結果應該是怎樣的,但沒有規定CPU內部實現指令執行的方式。相對於指令架構,CPU內部的硬體結構就是CPU微架構。

換句話說,要看指令集,你看到的是一堆程式碼;要看微結構,看到的是硬體電路結構,這些硬體電路組成各種功能模組,來實現指令執行的方法。

CPU微架構,一般學術界稱為微結構,媒體喜歡說微架構,可能因為“架構”這個詞比較時髦吧。

相同的指令集可以有不同的微架構,換句話說,相同的指令集可以透過不同的電路單元極其組合來完成任務。比如英特爾和AMD的CPU都是基於X86指令集,但它們的微架構不盡相同,或者粗暴地理解,它們的CPU晶片拆開看裡面的電路設計並不完全一樣。

也正是因為如此,相同指令集,在不同的微架構中執行出來的效果和目的也不一定一樣。比如,英特爾和AMD的CPU,即便是同樣的指令集,最粗暴的跑分測評也有不同。

由此我們也可以看出,優秀的微架構對CPU的效能有至關重要的作用。總的來說,一大堆的運算單元、邏輯單元、暫存器等在三態匯流排和單向匯流排、各個控制線的連線下組成了CPU的微架構。

前面的文章介紹過,指令的執行過程分為五個階段:取指令、指令譯碼、執行指令、訪存取數和結果寫回。那麼實際上,微架構就是圍繞完成這五個過程,進行電路單元的設計。

當然,由於實際過程更加複雜,解決某一步驟的執行顯然不止採用一種電路單元。CPU微架構中常見的單元有執行埠、緩衝單元、整數運算單元、向量運算單元等等。

與此同時,CPU微架構的提升往往也伴隨著指令集的更新與最佳化。一般來說,微架構的提升可以分為兩個方面,一是通用效能的提升,被稱為IPC(Instruction Per Clock),即CPU一個時鐘週期所執行指令的數量。

時鐘週期,是由CPU主頻決定的,是CPU操作處理的最基本單位。主頻代表單位時間內的時鐘週期數,時鐘週期數越多,主頻越高;主頻的高低一般和晶片的製程工藝有關。在一個時鐘週期能執行的指令數量,即IPC越大,CPU效率越高。

由此可見CPU的通用計算效能是由IPC、主頻和指令集三者共同決定的。

CPU微架構通用效能的提升,從宏觀上來看,主要的提升思路是更深、更寬和更智慧。

更深,就是搞更多的平行計算;更寬:就是在平行計算中執行更多的操作;更智慧,就是採用更好的演算法來減少延遲。

舉例簡單說明一下。

CPU剛開始為了提升效率搞了流水線處理方式,然後,透過在流水線中增暫存器來暫時存放中間運算結果的方式,實現並行運算,這個稱為“超標量執行”。

一顆CPU要搞大量的平行計算,電晶體就得多,晶片整合難度也會增加。於是,就出現了多核CPU。CPU核心就是控制和搞資訊處理的核心電路,把一個CPU核心和相關輔助電路封裝在一顆晶片中,就是單核心CPU。把多個CPU核心和輔助電路封裝在一顆晶片中,就是多核CPU了。

上面兩種方法,都是為了“更深”,即搞更多的平行計算。當然微架構實現更多平行計算的方式還有不少,就不一一列舉了。有興趣可以自己查下英特爾的晶片文件。

在平行計算的時候,如果剛巧其中的一條並行指令需要用到另一條正在計算的指令的結果,這時候就並行不動了。這種情況,就需要改變指令的執行順序,從而提高指令執行的速度,這就是“亂序執行”。

微架構中的亂序執行單元使用“虛擬暫存器到物理暫存器的對映表”來修改指令,把修改後的指令部分儲存。排程器會將整數運算元和浮點運算元分別儲存,把對映表存入“重新編序快取”。最後排程器會把當前能幹的活傳送給執行單元,暫時幹不了的先快取等有條件了再發送。

另外,當遇到流水線技術遇到條件分支時,也就是根據判斷條件的真/假的不同,可能產生跳轉,這會打斷流水線中指令的執行,因為CPU無法確定該指令的下一條指令是啥。CPU必須等待分支指令處理完畢,才能確定下一條進入流水線的指令。也就是說CPU進入等待時間了。

微架構為解決這個問題採取了“分支預測”,CPU會根據預測的結果,選擇下一條指令繼續流水線作業。待跳轉指令執行完成,如果預測正確,那麼流水線繼續跑,不會受到跳轉指令的影響。如果預測錯誤,那就清空流水線,重新載入正確的分支。

“分支預測”實際上就是為了實現“更寬”,提高流水線的效率,讓平行計算中能執行更多的任務。

分支預測有主要

靜態分支預測、動態分支預測和協同分支預測三種,靜態就是隨便選一條道走,剩下兩種就是各用各的方式來提高正確命中率。要提高命中率,就

免不了用“更智慧”的方式來提高其預測的準確性。

微架構提升的另一個路徑,是專用效能的提升。這往往透過最佳化、改寫或是重新編譯指令集程式碼來完成。

英特爾為了提高自家的微架構從2005開始採用了 “Tick-Tock”的鐘擺模式。

在“Tick”年升級處理器的製程,在“Tock”年升級處理器的微架構,以兩年為週期提升CPU的效能。

這裡可以看出英特爾的這個升級策略是將晶片的製程工藝和CPU架構給拆開了,原因也很簡單,如果一顆新的晶片製程工藝和架構都是新的,一旦出了問題風險太高。如果單獨改進工藝製程,出了問題,那就是工藝的鍋。同理,單改架構,出了問題就是架構的鍋。總之,風險更可控。

2008到2015年,這個鐘擺升級模式讓英特爾的CPU保持了年均15%左右的效能提升水平,維護了其X86市場的CPU霸主地位,誕生了像Skylake這種經典微架構。

所以呢,大家選CPU最好也選一選微架構而不是隻看CPU產品名字,多款CPU可能是源於同一個微架構。

2016年,英特爾終止了鐘擺升級的模式,轉用“製程-架構-最佳化”的升級模式,還給起了個名字叫“PAO”戰略。

P,就是Process,製程。這一年搞製程工藝。

A,就是Architecture,架構。這一年搞架構。

O,就是Optimization,最佳化。這一年搞最佳化。

從鐘擺戰略的兩年週期改為了三年週期,主要就是晶片製造工藝升級的進度放緩,想兩年一躍進搞不動了。

2020年,英特爾和AMD分別將計算機CPU更新到了10/11代酷睿和以Zen 3為核心的Ryzen 5000系列。AMD的Zen3,IPC暴增19%,這回在製程和微架構兩方面都趕超了英特爾。