最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【知乎】電腦硬件入門——基礎之CPU架構(gòu)解讀

2023-07-21 18:28 作者:失傳技術(shù)研究所工作室  | 我要投稿

?

電腦硬件入門——基礎之CPU架構(gòu)解讀

木頭龍

中央處理器 (CPU)等 3 個話題下的優(yōu)秀答主

關(guān)注他

577 人贊同了該文章

前言

上一篇文章我們從整體上介紹了電腦的各個部件以及功能,CPU可以說是整臺電腦中最核心的部件。這篇文章里面,給大家介紹一下CPU里面都有什么。


我們家里用的電腦,CPU只有兩家廠商在生產(chǎn):Intel和AMD。每家廠商都提供很多型號的CPU,這篇文章以Intel生產(chǎn)的,主流市場上的旗艦型號:Core i9-9900K為例子來介紹。


1、9900K整體架構(gòu)

還是先看圖[1]:

9900K大概可以分為5個部分:

  1. CPU核心:圖中紅框部分為一個核心,9900K一共有8個核心。早期的CPU其實就只有這么一個東西,但現(xiàn)在的CPU逐步發(fā)展,把一些周邊的部件也集成在同一塊半導體晶片上,因此傳統(tǒng)的CPU就變成了現(xiàn)代CPU上的核心。此外,為了提高CPU的計算能力,單塊CPU中的核心數(shù)量越來越多,就消費級市場來說,從2005第一款雙核心CPU奔騰D發(fā)布到今天的單塊CPU晶片有8個核心的i9-9900K。

  2. 三級緩存(Level 3 Cache,簡寫為L3、L3$、L3C、L3 Cache):圖中中間8個粉色塊組成的三級緩存,用于臨時存放內(nèi)存中的一小部分數(shù)據(jù)。這里分成8小塊,對應8個CPU核心。有時候L3也叫末級緩存(Last Level Cache,LLC),當然,對9900K這樣具有三級緩存的CPU,L3才等同于LLC。有的老式CPU有的只有二級緩存,LLC就是L2;某些服務器使用的CPU有四級緩存,LLC則是指L4。

  3. 核心顯卡:圖中左邊紫框部分,這個以后的文章中我們再介紹。

  4. 系統(tǒng)代理:圖中右邊綠色部分,這是負責連接CPU與其它部件的多個模塊的集合。從上到下分別是:

    1. 顯示控制器:負責核心顯卡輸出;

    2. PCI-e控制器:負責CPU與外部IO設備連接,以后的文章我們會另外介紹;

    3. eDRAM控制器:這個其實9900K是沒有的,某些定制型號會集成有特殊的內(nèi)存,稱為嵌入式動態(tài)隨機訪問存儲(Embedded Dynamic Random-Access Memory, eDRAM)。一般來說eDRAM是作為核心顯卡的專用顯存使用,這個控制器就是負責從eDRAM讀寫數(shù)據(jù)的。

    4. 內(nèi)存控制器:負責CPU與內(nèi)存連接,從內(nèi)存中讀寫數(shù)據(jù)。

  5. 環(huán)形總線(RingBus):把上面這些模塊連接起來的,上圖中標記著Ring的藍色圈。


2、核心架構(gòu)圖

這張圖看起來很復雜是不是?不用擔心,我們一個一個說。當然,我們這是入門知識,不會介紹的太細。


我們上一篇文章提到,現(xiàn)代CPU都是改進型哈弗架構(gòu);并且舉了一個會計做財務報告的例子。這里我們繼續(xù)使用這個例子來介紹。但之前,我們稍微改一下做財務報告的方式,不是一個人全部做完,我們是一個團隊。有的同事根據(jù)制作指南列計算步驟,有的同事根據(jù)計算步驟在小紙條上列公式,有的同事負責從賬本上把數(shù)據(jù)抄到寫好公式的小紙條上,有的同事對著小紙條用計算器算數(shù)并且算完了寫回小紙條上,有的同事把小紙條上的數(shù)抄到最終的財務報表上。CPU里面,小紙條有一個專門的名稱,叫寄存器(Register)。


2.1 緩存子系統(tǒng)(Memory Subsystem)

一家規(guī)模比較大點的企業(yè),完整的賬本很厚。我們做整年的財務報告,通常只需要每個科目的匯總數(shù)就可以了,為了方便,我們把每個科目匯總的那幾頁復印出來放在一起。

完整的財務報告制作指南也很厚,但一個企業(yè)可能只有其中很少一部業(yè)務。例如一家軟件公司,就不涉及原材料進貨、倉庫存儲之類的業(yè)務;很多公司也沒有貸款、投資之類的業(yè)務。所以我們也只把跟公司有相關(guān)業(yè)務的部分復印出來。

同樣的,內(nèi)存中的數(shù)據(jù)很多,CPU只需要把計算用到的指令、數(shù)據(jù)放到緩存中——也就是圖中的紫色塊的緩存子系統(tǒng)。


2.2 前端(Front End)

CPU的前端其實就是我們上篇文章中的控制單元,負責對指令進行預處理。指令預處理大體上分為取指、預解碼、融合、解碼、分支預測、重排等操作。


取指(Fetch)

我們制作財務報表,第一步就是把制作指南拿出來。CPU也一樣,先把指令載入進來。


預解碼(PreDecode)

制作指南是一整頁的,我們要分解出第一步算哪個數(shù)據(jù),第二步又是算哪個數(shù)據(jù),在小紙條上把公式列出來,一張小紙條一個公式。CPU也一樣,要把程序中一整批的指令數(shù)據(jù),拆分出來第一條是什么指令,第二條是什么指令;可能還需要對指令進行分類標志。預解碼后的指令放在指令隊列(Instruction Queue)里面。


解碼(Decode),又稱為譯碼

小紙條上的公式寫著:利潤=收入-支出,查帳本的同事就需要先把收入和支出數(shù)據(jù)從賬本中找出來,抄到小紙條上。同樣的,CPU碰到類似把內(nèi)存中兩個數(shù)加起來這樣的指令,需要分解成:

  1. 從內(nèi)存載入第一個數(shù)字;

  2. 從內(nèi)存載入第二個數(shù)字;

  3. 兩個數(shù)字相加

這樣三個指令。一般來說,我們把原始的指令稱為宏操作(Macro-Operations),分解后的指令稱為微操作(Micro-Operations, μops)。


指令融合(Micro-Fusion/Macro-Fusion)

假設指南中有一個數(shù)據(jù)是算平均數(shù)的,某個按計算器的同事手上整好有一個可以直接算平均數(shù)的統(tǒng)計用計算器。那么,當我們在指南中看到一條類似?(A1+A2+A3+...+An)÷N?這樣的公式的時候,我們可以直接列算這幾個數(shù)的平均數(shù)公式,注明給這位同事算。CPU也一樣,某些指令是可以融合起來執(zhí)行的,例如:

  1. 比較A和B的大小;

  2. 如果A不等于B,跳轉(zhuǎn)到標志X的指令。

可以用一條指令JNE A,B,X來代替,這樣的處理稱之為指令融合。指令解碼前的宏操作融合,稱為Macro-Fusion,解碼后的微操作融合,稱為Micro-Fusion。


分支預測(Branch Prediction)

理論上,制作指南中列出的所有步驟,我們都要完成上面的這些處理。但假設制作指南中說,盈利的話要算某幾個數(shù)據(jù),虧損的話這幾個數(shù)不用算,要另外算其它幾個數(shù)據(jù)。當我們計算過第一季度的數(shù)據(jù)知道企業(yè)第一季度是盈利的,我們算第二季度的數(shù)據(jù)時,想偷懶就直接跳過虧損要算的那幾個數(shù)據(jù)的處理了。CPU處理指令也是一樣的,負責預測的模塊叫分支預測器(Branch Predictor)

當然,如果算下來我們發(fā)現(xiàn)第二季度虧損了,還是要重新處理指南上的這些計算步驟。CPU也一樣。


指令重排,或者叫亂序執(zhí)行(Out-Of-Order,OOO),或者動態(tài)執(zhí)行(Dynamic Execution)

事實上,我們不一定要完全按照指南上的步驟第一步算什么,第二步算什么這樣算。只要公式列出來,數(shù)據(jù)抄出來了,就可以直接交給按計算器的同事去算。所以可能第一步要用的數(shù)據(jù)不太好找,按計算器的同事就先把第二步算出來了。

當然,這里有一個前提,就是算第二步的時候,不需要用到第一步的計算結(jié)果。


2.3 執(zhí)行單元(Execution Engine)

執(zhí)行單元也就是上一篇文章提到的運算單元了。也就是我們這個團隊里抄數(shù)據(jù)、按計算器的各位同事了。其中,按計算器的同事中,有的用的計算器簡單點,只能做四則計算,還只能算整數(shù);有的用高級點的計算器,可以算小數(shù);有的用統(tǒng)計專用的計算器;有的用更高級的可以算很多函數(shù)的計算器。當然,有這么多不同的計算器,什么樣的小紙條給哪位同事用,我們也需要有一個人來做分配小紙條這件事情。


數(shù)據(jù)存取單元(Load Data/Store Data)

CPU里面也一樣,有負責從緩存子系統(tǒng)中載入數(shù)據(jù)的Load Data單元;有把計算結(jié)果寫回去緩存子系統(tǒng)的Store Data單元。


計算單元

CPU里面負責具體計算的,根據(jù)計算類型、計算的數(shù)據(jù)不同,有多種計算單元:

  1. 整數(shù)算術(shù)邏輯單元(Integer Arithmetic Logic Unit,Int ALU),算整數(shù)加減法/二進制運算;需要說明一下的,電腦里面很多小數(shù)計算也是通過移位操作處理后,用整數(shù)單元計算后再數(shù)小數(shù)位這樣的方式來處理的。

  2. 整數(shù)乘法器(Integer Multiplier,Int MUL),專門負責整數(shù)乘法的;

  3. 整數(shù)除法器(Integer Divider,Int DIV),專門負責整數(shù)除法的;

  4. 分支處理(Branch),負責各種跳轉(zhuǎn)指令的;

  5. 地址生成器(Address Generation Unit,AGU),這個稍微解釋一下,例如制作指南中說,總收入要和上一年度的總收入對比算增長率,那么就需要翻譯成“現(xiàn)在做2018年的年報,上一年度就是2017年度總收入”。CPU也是一樣,有的指令是把內(nèi)存地址A1的數(shù)和A1后面第五個地址的數(shù)相加,那么要先算出來A1后面五個地址A2到底是哪個地址。

  6. 整數(shù)向量ALU(Int Vect ALU),向量是指類似空間坐標+值(x,y,z, value)這樣的一組數(shù)據(jù),其中x、y、z和value都是整數(shù)。類似整數(shù),除了算加減法/二進制的整數(shù)向量ALU,還有整數(shù)向量乘法器、除法器(Int Vect MUL,Int Vect DIV)。

  7. 浮點向量加乘融合單元(Fused multiply–add,F(xiàn)P FMA),這個也要解釋一下。我們知道,105可以寫成?1.05×102?這樣的形式,這種形式在計算機中稱為浮點數(shù)。上面提到向量中,如果(x,y,z,value)中的一個或者多個都是浮點,就是浮點向量。而加乘融合,是指?A+B×C?這樣的計算,當然,可以算加乘融合的,自然也可以用來算加減法和乘法:A=0就是乘法,C=1就是加減法。

  8. 浮點除法單元(FP DIV):算浮點除法的,也可以算一些常用函數(shù)例如開方、對數(shù)等。

  9. 其它:例如加密用的AES,字符串處理的Vect String,位查找的bit Scan(對一個二進制數(shù)據(jù)按照多種方法數(shù)0)


調(diào)度器(Scheduler)

有這么多不同的計算單元,CPU需要一個把不同的計算指令分配給對應計算單元的調(diào)度器。

不過呢,我們這個財務部比較特殊,分了幾個小辦公室,某幾個同事在一個辦公室里面,另外幾個同事又在另一個辦公室里面,而每次我們只能傳一張小紙條到一個辦公室。

在9900K里面,從圖中可以看到,不同的計算單元在不同的端口(Port)下,就是類似的情況。


寄存器文件(Register File)

計算財務數(shù)據(jù)的時候,很多數(shù)據(jù)的計算是需要多步計算的,具體到每一步的計算,可能要分給不同的同事來算。如果每一步列一張小紙條,等某位同事算完第一個數(shù),再抄到第二張小紙條給另外一位同事,這顯然很慢很麻煩——直接列在一張小紙條上就好了嘛。

另外,我們有這么多同事,分配小紙條的同事每次傳小紙條可以一次分配好多張——當然,前提是分給不同的同事。

因為可能一張紙條要算好幾次,又有這么多紙條傳來傳去,因此為了不出錯,我們需要標明這張小紙條給誰算,算完了,負責分配小紙條的同事根據(jù)下一步要算的,把標注的名字改一下給另外一位同事去算。


CPU中的寄存器也一樣,一個數(shù)據(jù)可能需要不同的計算單元多次處理,又有那么多的計算單元分成了好幾組。所以我們需要多個寄存器,這些寄存器的組合稱之為寄存器文件。每個計算單元只能處理特定名稱的寄存器里面的數(shù)據(jù),因此調(diào)度器經(jīng)常需要對寄存器進行分配、重命名、退出等操作。

  • 更細節(jié)的電腦知識,我會在后續(xù)的文章中介紹,請保持關(guān)注。

  • 如果你覺得這篇文章對你有幫助,請點贊支持讓更多人看到。

  • 如果看完覺得有問題的話,請評論留言指正。


參考

  1. ^Coffee Lake - Microarchitectures - Intel - WikiChip?https://en.wikichip.org/wiki/intel/microarchitectures/coffee_lake

發(fā)布于 2019-05-15 20:11

計算機

中央處理器 (CPU)

電腦硬件

評論千萬條,友善第一條


55 條評論

默認

最新

浮梁賣茶人

我挺好奇你以前是干啥的

對CPU研究這么透徹

2019-05-15

回復15

木頭龍

作者

純愛好……

2019-05-15

回復6

煙花易冷

木頭龍

膜拜大佬

2022-01-17

回復贊

JZWSVIC

這要說的有點多,你這樣會漏掉很多部分的

2019-05-15

回復3

木頭龍

作者

科普文么,太長太原理性的估計也沒幾個人看……以后提及到再補充了……

2019-05-16

回復3

一世小雄

真是曲高和寡,那么好的文章就這么一點人看。。。

2020-08-13

回復1

凡性的提醒

挺硬核的,沒興趣愛好的人看著頭大

2022-03-07

回復2

Richard Han

指令融合那里的示例有點問題:「比較a和b,不相等則跳轉(zhuǎn)到x」,未進行macro-fusion前的匯編代碼應該是「cmp a,b
; jne x;」進行macro-fusion后變?yōu)椤竎mpjne a,b,x;」,而不是「jne a,b,x;」

2019-12-14

回復1

木頭龍

作者

謝指正

2019-12-14

回復贊

盛世行

這是一副要跟狼哥搶生意的樣子啊

2019-05-16

回復1

盛世行

木頭龍

文科生 一篇老狼一杯茶 邊查邊看 一個下午就過去了?

2019-05-16

回復2

木頭龍

作者

rouwanzi


@老狼


2019-09-18

回復1

展開其他 2 條回復

瞎扯家

新入行pc、服務器生產(chǎn)制造業(yè),答主的回答全是專業(yè)硬貨,讓我一頓猛補,認真從頭到尾看完了,非常好評

05-17

回復贊

kkkk

請教大佬個無關(guān)緊要的問題?

,看到好多微架構(gòu)圖的配色都和文中的一樣,這個是大家約定俗成的嗎?

01-22

回復贊

木頭龍

作者

不是,是因為大家都從相同的來源找圖片。

01-22

回復贊

意想不到

大佬 我想問下,Invalidate Queues這個在cpu是否存在呢?還是說這個目前只是理論并沒有實現(xiàn)這種東西

2021-08-09

回復贊

木頭龍

作者

意想不到

這個是微結(jié)構(gòu)層面的實現(xiàn),一般來說沒有具體公開的資料,某些論文會有提及和解釋。

2021-08-09

回復贊

意想不到

木頭龍

懂了 謝謝。。讓我一頓好找

2021-08-09

回復贊

展開其他 2 條回復

執(zhí)念

請教一下,AMD的CPU和酷睿比,單核性能和多核性能到底怎么看的呀

2020-07-22

回復贊

張云舞

一通會計操作下來我暈了

2019-12-15

回復贊

知乎用戶9xGK50

評論里想從簡單的部分開始了解可以去讀下tomasulo相關(guān)的內(nèi)容。ReOrder Buffer(ROB),Register Renaming(和RAT),Common Data Bus(CDB)是tomasulo算法的重要特征嘛~
要考期末的我太難了...

2019-12-14

回復贊

Dawei112

大佬快更新!

2019-10-04

回復贊

知乎用戶mdWSLL

寫得太好了,期待下一篇

2019-08-29

回復贊

lin

催更

2019-05-31

回復贊

李姚

支持答主。再長也看。

2019-05-31

回復贊

浪月

好復雜,這屬于專于知識了。

2019-05-27

回復贊

楊廣

還是不太理解pcie控制器直接集成到處理器片內(nèi)是怎么個結(jié)構(gòu)?處理器可以直接對話非內(nèi)存設備嗎?這些控制器上的設備不通過內(nèi)存直接跟處理器通訊?感覺微機原理白學了

2019-05-17

回復贊

木頭龍

作者

把CPU內(nèi)核,和集成了PCIe控制器的物理CPU分開看待就是了。這些理論/原理文章中所說的CPU僅僅是指代內(nèi)核。。

2020-04-20

回復贊

木頭龍

作者

小老虎

并沒有扔給pch,全在CPU里面了。
PCIe控制器在CPU內(nèi)部,pch的只不過是個switch。

2020-04-20

回復贊

展開其他 1 條回復

番茄燉牛肉

Haswell之前的架構(gòu)吧 ring bus 已經(jīng)進化到mesh了

2019-05-16

回復贊

木頭龍

作者

HEDT和至強才是Mesh,主流還是Ring

2019-05-16

回復1

yun瓜

奧利給

2019-05-16

回復贊

PC小白

接下來講操作控制器,時序發(fā)生器,流水和指令集?

2019-05-15

回復贊

木頭龍

作者

Akmak

item.m.jd.com/product/1

2019-05-16

回復5

PC小白

木頭龍

總要講的吧……不然不完整

2019-05-15

Pentium II & Pentium III架構(gòu)/微架構(gòu)/流水線 (7) - 微架構(gòu)框圖

一凡stkeke

于?2018-12-28 08:47:58?發(fā)布

306

?收藏

分類專欄:?Intel微架構(gòu)?文章標簽:?Pentium II?Pentium III?性能優(yōu)化?微架構(gòu)?MMX

版權(quán)

Intel微架構(gòu)專欄收錄該內(nèi)容

101 篇文章27 訂閱

訂閱專欄

Pentium II的微架構(gòu)

下面這幅圖來自于CSE 3322-001 (Fall 1999),在Mindshare的Pentium Pro體系結(jié)構(gòu)一書中也有類似的圖。

注意:Pentium II處理器中應該已經(jīng)全系標配MMX技術(shù)了,但是在下面這幅圖中并沒有體現(xiàn);在Pentium III的微架構(gòu)中可以看到MMX指令的執(zhí)行單元。

PentiumIII的微架構(gòu)

下面這幅圖來自于Google “Pentium III diagram”關(guān)鍵字搜索結(jié)果。

?


【知乎】電腦硬件入門——基礎之CPU架構(gòu)解讀的評論 (共 條)

分享到微博請遵守國家法律
汪清县| 东乡族自治县| 太仆寺旗| 莲花县| 成武县| 亚东县| 高陵县| 双辽市| 双牌县| 菏泽市| 横山县| 丹巴县| 内黄县| 石狮市| 文安县| 台北市| 平塘县| 曲水县| 邹城市| 闵行区| 榆社县| 汉源县| 东海县| 大埔区| 英山县| 汾阳市| 上思县| 呼伦贝尔市| 怀仁县| 娄底市| 出国| 竹山县| 任丘市| 东兰县| 东光县| 容城县| 吉水县| 疏附县| 东阳市| 增城市| 永清县|