CPU內(nèi)核結(jié)構(gòu)解析
CPU內(nèi)核結(jié)構(gòu)解析
?
?CPU內(nèi)核主要分為兩部分:運(yùn)算器和控制器。
?。ㄒ唬?運(yùn)算器
1、 算術(shù)邏輯運(yùn)算單元ALU(Arithmetic and Logic Unit)
ALU主要完成對(duì)二進(jìn)制數(shù)據(jù)的定點(diǎn)算術(shù)運(yùn)算(加減乘除)、邏輯運(yùn)算(與或非異或)以及移位操作。在某些CPU中還有專門(mén)用于處理移位操作的移位器。
通常ALU由兩個(gè)輸入端和一個(gè)輸出端。整數(shù)單元有時(shí)也稱為IEU(Integer Execution Unit)。我們通常所說(shuō)的“CPU是XX位的”就是指ALU所能處理的數(shù)據(jù)的位數(shù)。
2、 浮點(diǎn)運(yùn)算單元FPU(Floating Point Unit)
FPU主要負(fù)責(zé)浮點(diǎn)運(yùn)算和高精度整數(shù)運(yùn)算。有些FPU還具有向量運(yùn)算的功能,另外一些則有專門(mén)的向量處理單元。
3、通用寄存器組
通用寄存器組是一組最快的存儲(chǔ)器,用來(lái)保存參加運(yùn)算的操作數(shù)和中間結(jié)果。
在通用寄存器的設(shè)計(jì)上,RISC與CISC有著很大的不同。CISC的寄存器通常很少,主要是受了當(dāng)時(shí)硬件成本所限。比如x86指令集只有8個(gè)通用寄存器。所以,CISC的CPU執(zhí)行是大多數(shù)時(shí)間是在訪問(wèn)存儲(chǔ)器中的數(shù)據(jù),而不是寄存器中的。這就拖慢了整個(gè)系統(tǒng)的速度。而RISC系統(tǒng)往往具有非常多的通用寄存器,并采用了重疊寄存器窗口和寄存器堆等技術(shù)使寄存器資源得到充分的利用。
對(duì)于x86指令集只支持8個(gè)通用寄存器的缺點(diǎn),Intel和AMD的最新CPU都采用了一種叫做“寄存器重命名”的技術(shù),這種技術(shù)使x86CPU的寄存器可以突破8個(gè)的限制,達(dá)到32個(gè)甚至更多。不過(guò),相對(duì)于RISC來(lái)說(shuō),這種技術(shù)的寄存器操作要多出一個(gè)時(shí)鐘周期,用來(lái)對(duì)寄存器進(jìn)行重命名。
4、 專用寄存器
專用寄存器通常是一些狀態(tài)寄存器,不能通過(guò)程序改變,由CPU自己控制,表明某種狀態(tài)。
?。ǘ?控制器
運(yùn)算器只能完成運(yùn)算,而控制器用于控制著整個(gè)CPU的工作。
1、 指令控制器
指令控制器是控制器中相當(dāng)重要的部分,它要完成取指令、分析指令等操作,然后交給執(zhí)行單元(ALU或FPU)來(lái)執(zhí)行,同時(shí)還要形成下一條指令的地址。
2、 時(shí)序控制器
時(shí)序控制器的作用是為每條指令按時(shí)間順序提供控制信號(hào)。時(shí)序控制器包括時(shí)鐘發(fā)生器和倍頻定義單元,其中時(shí)鐘發(fā)生器由石英晶體振蕩器發(fā)出非常穩(wěn)定的脈沖信號(hào),就是CPU的主頻;而倍頻定義單元?jiǎng)t定義了CPU主頻是存儲(chǔ)器頻率(總線頻率)的幾倍。
3、 總線控制器
總線控制器主要用于控制CPU的內(nèi)外部總線,包括地址總線、數(shù)據(jù)總線、控制總線等等。
4、中斷控制器
中斷控制器用于控制各種各樣的中斷請(qǐng)求,并根據(jù)優(yōu)先級(jí)的高低對(duì)中斷請(qǐng)求進(jìn)行排隊(duì),逐個(gè)交給CPU處理。
?。ㄈ?CPU核心的設(shè)計(jì)
CPU的性能是由什么決定的呢?單純的一個(gè)ALU速度在一個(gè)CPU中并不起決定性作用,因?yàn)锳LU的速度都差不多。而一個(gè)CPU的性能表現(xiàn)的決定性因素就在于CPU內(nèi)核的設(shè)計(jì)。
1、超標(biāo)量(Superscalar)
既然無(wú)法大幅提高ALU的速度,有什么替代的方法呢?并行處理的方法又一次產(chǎn)生了強(qiáng)大的作用。所謂的超標(biāo)量CPU,就是只集成了多個(gè)ALU、多個(gè)FPU、多個(gè)譯碼器和多條流水線的CPU,以并行處理的方式來(lái)提高性能。
超標(biāo)量技術(shù)應(yīng)該是很容易理解的,不過(guò)有一點(diǎn)需要注意,就是不要去管“超標(biāo)量”之前的那個(gè)數(shù)字,比如“9路超標(biāo)量”,不同的廠商對(duì)于這個(gè)數(shù)字有著不同的定義,更多的這只是一種商業(yè)上的宣傳手段。
2、流水線(Pipeline)
流水線是現(xiàn)代RISC核心的一個(gè)重要設(shè)計(jì),它極大地提高了性能。
對(duì)于一條具體的指令執(zhí)行過(guò)程,通??梢苑譃槲鍌€(gè)部分:取指令,指令譯碼,取操作數(shù),運(yùn)算(ALU),寫(xiě)結(jié)果。其中前三步一般由指令控制器完成,后兩步則由運(yùn)算器完成。按照傳統(tǒng)的方式,所有指令順序執(zhí)行,那么先是指令控制器工作,完成第一條指令的前三步,然后運(yùn)算器工作,完成后兩步,在指令控制器工作,完成第二條指令的前三步,在是運(yùn)算器,完成第二條指令的后兩部……很明顯,當(dāng)指令控制器工作是運(yùn)算器基本上在休息,而當(dāng)運(yùn)算器在工作時(shí)指令控制器卻在休息,造成了相當(dāng)大的資源浪費(fèi)。解決方法很容易想到,當(dāng)指令控制器完成了第一條指令的前三步后,直接開(kāi)始第二條指令的操作,運(yùn)算單元也是。這樣就形成了流水線系統(tǒng),這是一條2級(jí)流水線。
如果是一個(gè)超標(biāo)量系統(tǒng),假設(shè)有三個(gè)指令控制單元和兩個(gè)運(yùn)算單元,那么就可以在完成了第一條指令的取址工作后直接開(kāi)始第二條指令的取址,這時(shí)第一條指令在進(jìn)行譯碼,然后第三條指令取址,第二條指令譯碼,第一條指令取操作數(shù)……這樣就是一個(gè)5級(jí)流水線。很顯然,5級(jí)流水線的平均理論速度是不用流水線的4倍。
流水線系統(tǒng)最大限度地利用了CPU資源,使每個(gè)部件在每個(gè)時(shí)鐘周期都工作,大大提高了效率。但是,流水線有兩個(gè)非常大的問(wèn)題:相關(guān)和轉(zhuǎn)移。
在一個(gè)流水線系統(tǒng)中,如果第二條指令需要用到第一條指令的結(jié)果,這種情況叫做相關(guān)。以上面哪個(gè)5級(jí)流水線為例,當(dāng)?shù)诙l指令需要取操作數(shù)時(shí),第一條指令的運(yùn)算還沒(méi)有完成,如果這時(shí)第二條指令就去取操作數(shù),就會(huì)得到錯(cuò)誤的結(jié)果。所以,這時(shí)整條流水線不得不停頓下來(lái),等待第一條指令的完成。這是很討厭的問(wèn)題,特別是對(duì)于比較長(zhǎng)的流水線,比如20級(jí),這種停頓通常要損失十幾個(gè)時(shí)鐘周期。目前解決這個(gè)問(wèn)題的方法是亂序執(zhí)行。亂序執(zhí)行的原理是在兩條相關(guān)指令中插入不相關(guān)的指令,使整條流水線順暢。比如上面的例子中,開(kāi)始執(zhí)行第一條指令后直接開(kāi)始執(zhí)行第三條指令(假設(shè)第三條指令不相關(guān)),然后才開(kāi)始執(zhí)行第二條指令,這樣當(dāng)?shù)诙l指令需要取操作數(shù)時(shí)第一條指令剛好完成,而且第三條指令也快要完成了,整條流水線不會(huì)停頓。當(dāng)然,流水線的阻塞現(xiàn)象還是不能完全避免的,尤其是當(dāng)相關(guān)指令非常多的時(shí)候。
另一個(gè)大問(wèn)題是條件轉(zhuǎn)移。在上面的例子中,如果第一條指令是一個(gè)條件轉(zhuǎn)移指令,那么系統(tǒng)就會(huì)不清楚下面應(yīng)該執(zhí)行那一條指令?這時(shí)就必須等第一條指令的判斷結(jié)果出來(lái)才能執(zhí)行第二條指令。條件轉(zhuǎn)移所造成的流水線停頓甚至比相關(guān)還要嚴(yán)重的多。所以,現(xiàn)在采用分支預(yù)測(cè)技術(shù)來(lái)處理轉(zhuǎn)移問(wèn)題。雖然我們的程序中充滿著分支,而且哪一條分支都是有可能的,但大多數(shù)情況下總是選擇某一分支。比如一個(gè)循環(huán)的末尾是一個(gè)分支,除了最后一次我們需要跳出循環(huán)外,其他的時(shí)候我們總是選擇繼續(xù)循環(huán)這條分支。根據(jù)這些原理,分支預(yù)測(cè)技術(shù)可以在沒(méi)有得到結(jié)果之前預(yù)測(cè)下一條指令是什么,并執(zhí)行它?,F(xiàn)在的分支預(yù)測(cè)技術(shù)能夠達(dá)到90%以上的正確率,但是,一旦預(yù)測(cè)錯(cuò)誤,CPU仍然不得不清理整條流水線并回到分支點(diǎn)。這將損失大量的時(shí)鐘周期。所以,進(jìn)一步提高分支預(yù)測(cè)的準(zhǔn)確率也是正在研究的一個(gè)課題。
越是長(zhǎng)的流水線,相關(guān)和轉(zhuǎn)移兩大問(wèn)題也越嚴(yán)重,所以,流水線并不是越長(zhǎng)越好,超標(biāo)量也不是越多越好,找到一個(gè)速度與效率的平衡點(diǎn)才是最重要的。
?
?
非常好我支持^.^
(87) 71.9%
不好我反對(duì)
(34) 28.1%
相關(guān)閱讀:
- [電子說(shuō)] 射頻識(shí)別技術(shù)漫談(27)——CPU卡概述 2023-10-24
- [電子說(shuō)] 講一講Apple Macintosh處理器過(guò)渡的故事 2023-10-24
- [電子說(shuō)] 國(guó)產(chǎn)金融工控機(jī)的廣泛應(yīng)用領(lǐng)域和獨(dú)特優(yōu)勢(shì) 2023-10-24
- [人工智能] 研華推出EPC-B3000系列嵌入式工控機(jī),搭載先進(jìn)X86架構(gòu)CPU,助力邊緣人工智能應(yīng)用 2023-10-24
- [電子說(shuō)] 異構(gòu)時(shí)代:CPU與GPU的發(fā)展演變 2023-10-24
- [電子說(shuō)] 11KW變頻器同時(shí)多個(gè)故障維修實(shí)例 2023-10-24
- [處理器/DSP] 高通Hexagon NPU架構(gòu)技術(shù)詳解 2023-10-23
- [電子說(shuō)] Python 如何獲取旅游景點(diǎn)信息 2023-10-21
( 發(fā)表人:admin )