一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

CPU,一個現代人天天在用的元件。舉凡手機、筆電裡皆有其存在。然而,每當有新的 CPU 發表,我們關注於表象但華麗的數字,像是 Cache 的大小、CPU 的執行時脈以及採用幾奈米製程等。這一次,讓我們撇除以上這些外在事物,一探現代 CPU 的微架構這個「內在美」吧。

從 2007 年開始,Intel 所採取的 Tick-Tock 策略,不斷地提升個人電腦的計算速度。其中,Tick 為奈米製程上的演進,每次新產品發表,便是華麗的數字以及技術的炫耀。然而,在 Tock 時,卻沒有多少人關注微架構的改善。何不從現在起,一同認識 Intel 的 Skylake 微架構。

在先前介紹 CPU 時(【電腦科普】CPU-電腦運作的核心),便說明 CPU 可以分成 3 個部分,分別為「控制單元」、「算數邏輯運算單元」與「暫存器」。控制元件會依據程式的指令,控制所要執行的功能。算術邏輯運算單元則負責進行各類運算。暫存器則分成兩類,分別儲存運算的資料,以及要接續執行的指令。

現代的 CPU 也沒有脫離這一類的規範。當將 Skylake 的元件分類,如下圖,也區分成 3 大類。

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

控制元件是 Front End,算術邏輯運算單元是 OOO (Out Of Order)Execution Engine,快取記憶體則有儲存資料的 L1 DCache、接續執行指令的 L1 ICache 以及共用的 L2 Cache。那麼,各個元件的有什麼功能呢?就讓我們看下去。

 

各元件功能為何?

首先,就從名字很有趣的 OOO Execution Engine 開始介紹。OOO(Out Of Order)是指在這一個運算單元裡面,指令的運行順序不會按照順序,盡可能地讓指令可以偷跑,讓 CPU 處於滿載狀態。為了可以更明確的知道 OOO 的優點,就從簡單的小數計算例子來看吧。

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

在 in order 的 CPU 中,每一次皆只能執行一個指令。假設 CPU 在浮點數計算需要 5 個 CPU 循環,而且一次只能執行一個指令。進行這 4 個計算需要 20 個循環才能完成。那採用 OOO 技術的 CPU 呢?因為在 OOO 的 CPU 裡面,它有多個計算核心,可以預先執行沒有相依性的資料。

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」 一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

在這個情況下,4 個計算僅需 15 個循環便得以完成,大幅的提升效能。那麼在 Skylake 內部,OOO Execution engine 究竟長什麼樣子呢?它一共有 8 個執行小單元、4 個資料存取單元,以及 4 個計算單元。

其中,每一個執行單元,皆有其可執行的指令,詳細的功能圖置於最後。

 

假的資料相依性,斷開連結的方法

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

在前個例子中,可以發現第 4 個指令其實和第 2 個指令的 x 不相干。第 4 個 x 實際上是運算新的資料。然而,在前一個例子裡,他卻需要等待第 4 個指令結束時,如果,可以將變數改名,將可以獲得更進一步的平行。

因此,在 Front End 裡面,有 Renamer 此一元件,負責將假的相依性剔除,以此獲得更多效能改善。然而,在 Skylake 內部,實際上只有 2 個浮點數計算單元。因此,這 4 個指令總共需要 12 個循環才能結束。和最一開始的 20 個循環相比,執行時間大幅的減少。

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

或許會有人說,這一類的功能一般的編譯器就得以完成了,何必需要新增這一類的硬體增添麻煩呢?原因在於,目前的編譯器為了讓編譯完成的程式,得以在多種 CPU 上執行,因此,他只會用到基本的暫存器,然而,在現代的 Intel CPU 中,有更多的暫存器可以使用,為了避免對軟體進行過多的更動,最後選擇於硬體端完成這一類的工作。

 

指令集的解碼器,切開硬體和指令集的關聯

在 Front End 裡面,除了 Renamer 這一元件外,還有一個指令集的解碼器。在指令集架構發展初期,曾經有過 RISC 和 CISC 的爭論。也就是指令集架構是越複雜越好,還是簡單就行。X86 架構,做為 CISC 的領頭羊以及 CPU 界的巨星,不斷地證明 CISC 的優異之處。

然而,在現今的 X86 架構中,CPU 底層硬體運行的指令,卻已經採用了 RISC 的概念。CISC 的最大擁護者的易位,便代表著 RISC 在指令集的爭論中勝出。那麼,究竟是如何將原本的 X86 指令轉換成硬體指令呢?溝通的橋樑,便是接下來要介紹的解碼器。

在 X86 架構內,有多種複雜的指令集會將數種功能結合在一起。以 Intel 所發表文件中的「 ADD  RAX, [ RBP+RSI ]  」為例子,它是將兩件工作結合再一起的指令。可以將其解讀成 RAX = RAX + LD[ RBP+RSI ]。也就是將資料從 RBP+RSI 中取出,並和 RAX 中的數值相加。

可想而知,此一解碼器可以將這兩個不同的工作拆開,分成取資料的指令以及數值相加的指令。解碼後的結果,就和 RISC 的想法接近,斷開複雜指令的鎖鏈!此外,簡單的 x86 指令也會被拆開來,重新組成硬體的底層指令。解析完的硬體指令,則有 micro-op 的別稱。接下來,便會有一個 micro-op 的序列,儲存解析後的指令。實際的 Front End 簡圖如下。

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

其中,有一個 Micro-op Cache 這個需要特別注意的元件。此元件是從 Intel Sandy Bridge 才加入。如其名,他是將過去曾經解碼過的指令存起來的暫存記憶體。在 Sandy Bridge 中,此一元件最多可以儲存 256 個 x86 指令,以及其對應的 micro-op。藉由 Micro-op Cache,可以減少使用頻繁之指令的解碼,大大提升計算的效能。

至此,對於 Intel Skylake 的「內在美」已經做了充足的介紹。最後,附上完整版的 Skylake 微架構圖。

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

(Source:Intel

(首圖來源:Intel

一窺 Intel Skylake 微架構,探究現代 CPU 的「內在美」

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則