不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 選購與維護 > 臺式機 > 如何安裝CPU

如何安裝CPU

時間: 黎正888 分享

如何安裝CPU

  我們都知道CPU是什么東西,有什么用,但是你知道它是如何工作的嗎?下面就讓學(xué)習(xí)啦小編和大家說一下CPU是如何工作的。

  CPU的工作方式

  對于同級別的CPU產(chǎn)品而言,AMD CPU的單核性能(甚至總體性能)比Intel CPU的差,甚至差距不小,這是不爭的事實。然而,幾乎沒有人問一句為什么如此,或者只是略知一二(包括我)。本文就用盡量淺顯的語言探討一下這個實際上極為復(fù)雜的問題。

  鑒于Intel和AMD都沒有披露新品的whitepaper的習(xí)慣,所以我用信息比較充足的有點久遠的型號進行講解,就是Intel的Sandy Bridge/Ivy Bridge(第2、3代酷睿)和AMD的Bulldozer/Piledriver(推土機、打樁機)微架構(gòu)。目前來講,兩家的微架構(gòu)設(shè)計都大體穩(wěn)定,從比較新的Broadwell和Steamroller的各方面信息來看,它們?nèi)匀换狙赜昧藦腟andy Bridge和Bulldozer以來的方案,沒有本質(zhì)的變化。

  (因此農(nóng)企想要翻身,只能把希望寄托在遙不可及的Zen微架構(gòu)上了)

  首先來說基礎(chǔ)知識,就是CPU是如何工作的。學(xué)習(xí)計算機科學(xué)的童鞋可能對下面的這些東西比較了解。

  CPU之所以能完成這么多的事情,是因為它在時時都在執(zhí)行著很多的指令(instructions)。指令就是我們所運行的操作系統(tǒng)和各種程序發(fā)送給CPU的命令,CPU根據(jù)這些指令來做出各種響應(yīng)。

  CPU能夠執(zhí)行的所有指令的集合就叫做指令集(instruction set)。目前我們最常見的Intel和AMD CPU,其都采用最經(jīng)典的CISC x86指令集,以及在x86指令集上的某些擴展,也就是說絕大部分是相同的。

  另外,CPU中還有兩個重要的部件,分別為寄存器(register)和緩存(cache,為了方便簡寫為$),它們都擔負著暫存指令或者數(shù)據(jù)的作用。

  寄存器處于CPU內(nèi)部,有很多組,是最高速的存儲單元,容量非常小。緩存可以處于CPU內(nèi)部或外部,其存儲速度比寄存器慢,但比內(nèi)存快得多,并且容量可以用KB或MB來衡量。另外,緩存可以分級,離CPU核心最近的叫做一級緩存(L1$),次近的叫做二級緩存(L2$),以此類推。

  只有指令沒有用,必須還要有一套方法來驅(qū)動CPU做事情,否則不過是空殼而已。這套方法就叫做流水線(pipeline)。

  這個概念并不抽象,大家可以把它想象成工廠裝配車間里的流水線:從一堆零部件開始,經(jīng)過流水線上十幾位工人的組裝,最后出來的時候就變成了一臺可以使用的設(shè)備。并且,工廠里肯定不只有一條流水線,可能有數(shù)十條,也就是上百甚至上千位工人同時工作,生產(chǎn)效率就會變得非常高。

  從上世紀90年代的奔騰時代之前,CPU中就引入了流水線的概念。當時的5段流水線模型十分經(jīng)典,其設(shè)計經(jīng)過逐代擴充,目前仍然在用。這個經(jīng)典的模型就是:

  取指(Instruction Fetch)→譯碼(Instruction Decode)→執(zhí)行(EXecute)→寫回(Write Back)

  分別簡稱為IF、ID、EX和WB,其中ID階段有兩段,分別稱為ID1和ID2,所以一共5段。

  顧名思義,這條流水線的邏輯就是:從緩存或者內(nèi)存中取得指令→對指令進行翻譯,變成CPU能夠理解的具體功能→按照翻譯結(jié)果,執(zhí)行運算動作→將運算結(jié)果寫回存儲器中。很容易理解吧。

  大家都知道,CPU的運作是靠時鐘信號來驅(qū)動的,這個信號的頻率就叫CPU的主頻(main frequency),頻率的倒數(shù)當然就是周期了。一般來講,每個流水線階段的執(zhí)行需要花費1個時鐘周期(clock cycle,為了方便簡寫為CC)。

  因此,如果這樣的流水線執(zhí)行4條指令,那么它的執(zhí)行時空圖就如下。

  也就是說,采用這種流水線只需要8CC就可以執(zhí)行4條指令,效率非常高。到了奔騰時代之后,更出現(xiàn)了超標量流水線(superscalar pipeline),也就是CPU中有多條流水線同時執(zhí)行指令,效率幾乎翻倍提高。另外,還出現(xiàn)了超流水線(super pipeline),也就是流水線的級數(shù)大大增加,規(guī)模明顯提升。分別的示意圖如下。

  但是,這樣的流水線設(shè)計也存在問題,具體來講有二。

  第一,考慮同一流水線中先后執(zhí)行的兩條指令1:add a,b和2:xor c,a,也就是說2需要1的計算結(jié)果,這種關(guān)系叫做相關(guān)性。當指令2執(zhí)行到上表中第5個CC時,無法進入EX階段,因為此時指令1的結(jié)果還未寫回寄存器,也就是說指令2的EX階段必須拖到第6個CC才可以執(zhí)行,浪費了一個CC的時間,這叫做流水線的阻塞(stall)。超流水線級數(shù)越多,這種現(xiàn)象就越發(fā)明顯,效率就越低。如下圖。

  第二,考慮超標量流水線中,不同流水線中執(zhí)行的兩條指令。如果排在前面的指令執(zhí)行速度太慢(比如涉及耗時嚴重的訪存操作),那么會造成后面早已執(zhí)行完畢的指令不得不等待,造成更嚴重的性能問題。

  也就是說,基于線性通路的流水線,對于目前的復(fù)雜的微處理器而言是并不適用的。因此,Intel早早就提出了“亂序執(zhí)行”(out-of-order execution, OOO EX)的概念,采用非完全線性的通路來規(guī)避這個問題。也就是這樣的。

  我借助這個圖粗略講一下現(xiàn)代處理器的執(zhí)行過程。

  上圖是一個四發(fā)射、亂序執(zhí)行的流水線框圖,從1995年以來的Intel處理器基本都采用類似的設(shè)計方案。所謂多發(fā)射(multiple issue),就是處理器能夠同時獲取并譯碼多條指令,目前的處理器幾乎都是四發(fā)射設(shè)計。

  首先,在取指過程中,會多出一個分支預(yù)測(branch prediction, BP)的階段,圖中未明確示出。分支預(yù)測器能檢測諸如跳轉(zhuǎn)、返回等動作的大致發(fā)生時機,并提前把跳轉(zhuǎn)目的地的指令加載到指令緩存(I$)中,以提高效率。

  然后,經(jīng)過多個譯碼器的譯碼,指令被分解成為上文所述的CPU能夠理解的操作,這些叫做微操作(μop)。微操作被送入寄存器別名表(RAT),進行重命名,以防止多條指令共用一個對程序猿非透明的寄存器時產(chǎn)生的相關(guān)性,簡單來講,就是用內(nèi)部的臨時寄存器來替代一般我們能見到的寄存器來進行操作。重命名完畢后,微操作進入后面的重排序緩存(ROB)中,進行重新排列。

  然后就是亂序執(zhí)行的重點了。微操作從保留站(reservation station, RS)中,分別打入不同的執(zhí)行端口(port),同時執(zhí)行。每個端口都是全速運行的,只要微操作準備就緒,并且有空閑的對應(yīng)端口,那么它就可以立即被執(zhí)行,而不用關(guān)心其他微操作的執(zhí)行狀態(tài),也就是可以跳過任何還沒有準備就緒的微操作。這樣,流水線產(chǎn)生阻塞的可能性就大大地降低了。每個port都可以負責一種或多種事務(wù),如整數(shù)運算、浮點運算、存數(shù)據(jù)、取地址等。

  當一條指令分解成的所有微操作被執(zhí)行完畢之后,它們會返回保留站,并通知各自的地址,通過地址可以將微操作重新聚合為一條完整的指令。完成的指令排成一個隊列,并退出流水線。也就是說,盡管所有指令的碎片是亂序執(zhí)行的,但從流水線中出來時,它們?nèi)匀皇琼樞虻?,就跟自然而然的一樣?/p>

  基礎(chǔ)知識講完了,下面開始對比,看看農(nóng)企為何不太給力。

  為了描述方便,后面用SNB/IVB代表Sandy Bridge/Ivy Bridge,BDZ/PDV代表Bulldozer/Piledriver。

  首先看SNB和BDZ的簡單框圖。下面的是以i7 2600為例。

  下面的則是以八核心Opteron為例,畢竟圖上寫了個Interlagos Node,反正是推土機就好了,你們可以把它當成FX-8150之類的。

  我們都知道,Intel的CPU采用超線程(hyper threading, HT)技術(shù),使得一個物理核心對高層而言看起來像是兩個核心一樣,這種邏輯的、虛擬的核心在Intel的概念內(nèi)叫做線程。而AMD的CPU采用模塊化設(shè)計,就是每兩個物理核心集合為一個模塊,AMD將它命名為計算單元(compute unit, CU),一個CU中的兩個核心協(xié)同完成事務(wù)。也就是說,i7是四核心、八線程,F(xiàn)X是四模塊、八核心,本質(zhì)上可以近似認為是一樣的。

  另外,從圖中還可以看到內(nèi)存控制器、顯示控制器、HyperTransport控制器等,并且還能大致觀察到它們的緩存結(jié)構(gòu),下面當然也會細說。

  下面給出SNB/IVB架構(gòu)的全圖。

  下面給出BDZ/PDV架構(gòu)的全圖。

  可以看到,上面的兩張圖被中間的一條紅線分為兩個區(qū)域。紅線上面的部分叫處理器前端(processor front-end),下面的部分叫處理器后端(processor back-end)。

  另外,圖中的方框也被五種顏色區(qū)分開了。前端部分包括紫色和橙色,紫色的為取指(IF)和分支預(yù)測(BP)模塊,橙色的為譯碼(ID)模塊。后端部分包括黃、藍、綠三種顏色,黃色的為調(diào)度和保留站(RS)模塊,藍色的為執(zhí)行(EX)模塊,綠色的為存儲(MEM)模塊。我們逐個來討論。

  首先看取指和分支預(yù)測模塊。下圖是SNB/IVB的該模塊。

  下圖是BDZ/PDV的該模塊。

  我們來比較分支預(yù)測機制,就是圖中的Branch Predictors。

  SNB/IVB的分支預(yù)測器有兩級,每個核心有一個。第一級預(yù)測器很小,但速度極快,可以在1CC內(nèi)完成一次分支預(yù)測。第二級則大得多,作為一個后備。預(yù)測器的成分包括:簡單的2-bit預(yù)測器、全局歷史預(yù)測器、循環(huán)退出預(yù)測器。Intel在內(nèi)部自建有一套算法,用于判斷當前哪個預(yù)測器的準確度較高,并選用之。

  SNB/IVB的分支目標緩存(branch target buffer, BTB)結(jié)構(gòu)目前大多認為是1層,具體細節(jié)未知,但基本上會有多達8K甚至16K條條目(”reasonably large”)。對于每16個字節(jié)長的代碼段,它能hold住最多4條跳轉(zhuǎn)指令。另外,返回棧的緩存有16條。

  當然,如果預(yù)測錯誤的話,必然會造成時間損失(因為流水線幾乎會被flush掉),這叫做誤預(yù)測罰時(misprediction penalty)。SNB/IVB的罰時大約為15~17CC。

  BDZ/PDV的分支預(yù)測器則是每個模塊有一個,由兩個核心共享,采用本地預(yù)測+全局預(yù)測的混合預(yù)測方式。AMD在其內(nèi)部使用了感知器(perceptron),像神經(jīng)元一樣跟隨并記憶分支結(jié)果,因此在經(jīng)過一段時間的訓(xùn)練過程后,對較長的跳轉(zhuǎn)有較好的表現(xiàn)。但其內(nèi)部并無循環(huán)計數(shù)器,因此對于嵌套較深的循環(huán)表現(xiàn)比較差。

  BDZ/PDV的BTB結(jié)構(gòu)是兩層組相連的緩存。L1 BTB有128組*4路=512條,L2 BTB有1024組*5路=5120條。返回棧的緩存則是有24條。誤預(yù)測罰時大約為20~25CC。

  我們大致需要知道的是:BP的誤預(yù)測率越高,誤預(yù)測罰時越長,那么整個BP模塊的效率就越低。AMD宣稱BDZ/PDV的BP效率較其上一代的K10(Barcelona/Magny-Cours)架構(gòu)為高,但實際上是相反的。K10的誤預(yù)測罰時只有12~15CC(當然,K10是沒有采用比較先進的模塊化設(shè)計的),也就是說,在同頻率下,對于那些風險比較大的分支,BDZ必須要比K10達到40%以上的正確預(yù)測率的提升,才能彌補罰時的損失,但這是不可能的事情。相對而言,SNB/IVB的BP效率比較高,預(yù)測器中的一個bit可以對應(yīng)多條分支,并且有了黑科技μop$的加成(下面會提到),誤預(yù)測帶來的損失會更小。

  上面有大神在回復(fù)中提到說,推土機有些像奔騰4時代的NetBurst架構(gòu)。這種說法還是比較中肯的。BDZ雖然沒有NetBurst那么恐怖的流水線級數(shù)(比如Prescott的39級流水線),但仍然比較長,有18~20級,并且分支預(yù)測的時間損失都比較大,都沒有實現(xiàn)“通過提高主頻就可以簡單地提升性能”的設(shè)想。

  下面來看取指過程。

  對于SNB/IVB而言,當下一條指令的地址確定之后,就會同時查詢L1I$和μop$(下面就提到),一次可以從I$取得16B的代碼段。然后,取得的指令會被放入下面的預(yù)譯碼緩存中。預(yù)譯碼器會劃分這些指令的邊界,并對指令前綴進行譯碼。隨后,經(jīng)過預(yù)譯碼的指令以每個CC 6條的速度,送入下面的指令隊列中,準備接受譯碼。SNB/IVB的指令隊列長度未知,但由于早在Merom架構(gòu)時,其長度就達到了18條,因此幾乎可以肯定這里的指令隊列長于18條。

  對于BDZ/PDV而言,取指模塊仍然是由兩個核心共享的。在兩個核心都活動的情況下,它最多可以一次從I$取得32B的代碼段;在一個核心活動的情況下,則是最多20B的代碼段。當代碼沒有對齊時,取指的速率會有降低。指令在I$中劃分邊界,然后以32B/CC的速率,進入16個條目的指令碼緩存,作用和Intel的指令隊列是相同的。

CPU是如何工作的相關(guān)文章:

1.cpu控制器如何工作

2.CPU的工作過程是怎樣的

3.cpu如何運行程序

4.cpu控制器怎么工作

5.電腦是如何工作的

1758463