本文主要介紹cpu的兩部分是什么 它們的作用是什么(cpu的兩部分是什么)?,下面一起看看cpu的兩部分是什么 它們的作用是什么(cpu的兩部分是什么)?相關(guān)資訊。
cpu通常被稱為計(jì)算機(jī)的大腦。就像人的大腦一樣,由幾個(gè)部分組成,包括接收信息、存儲(chǔ)信息、處理信息、幫助輸出信息等等。這些部分一起工作來處理信息。
在今天 的文章中,我們將介紹構(gòu)成cpu的關(guān)鍵元素,以及它們?nèi)绾我黄馂橛?jì)算機(jī)提供動(dòng)能。
cpu藍(lán)圖:isa分析任何一個(gè)cpu,首先碰到的就是指令集架構(gòu)(isa)。這是cpu如何工作以及所有內(nèi)部系統(tǒng)如何交互的圖形藍(lán)圖。就像同一物種有很多品種的狗一樣,在cpu上可以構(gòu)建很多不同類型的isa。兩種最常見的類型是x86(見于臺(tái)式機(jī)和筆記本電腦)和arm(見于嵌入式和移動(dòng)設(shè)備)。
還有其他利基應(yīng)用程序,如mips,riscv和powerpc。isa將指定cpu可以處理哪些指令,如何與內(nèi)存和緩存交互,如何將工作劃分到多個(gè)處理階段,等等。
為了涵蓋cpu的主要部分,我們將遵循指令執(zhí)行時(shí)所采取的路徑。不同類型的指令可能遵循不同的路徑,并使用cpu的不同部分,但這里我們將對(duì)它們進(jìn)行總結(jié),以涵蓋最大的部分。我們將從單核處理器的最基本設(shè)計(jì)開始,隨著我們向更現(xiàn)代的設(shè)計(jì)發(fā)展,逐漸增加復(fù)雜性。
控制單元和數(shù)據(jù)通路cpu可分為控制單元和數(shù)據(jù)通路兩部分。想象一列火車。發(fā)動(dòng)機(jī)是火車的動(dòng)力源,但車長在幕后拉動(dòng)操縱桿,控制著發(fā)動(dòng)機(jī)的方方面面。cpu也是一樣。
就像引擎一樣,數(shù)據(jù)路徑,顧名思義,就是數(shù)據(jù)在處理過程中流經(jīng)的路徑。數(shù)據(jù)路徑接收輸入,處理它們,并在完成時(shí)將它們發(fā)送到正確的位置??刂茊卧嬖V數(shù)據(jù)路徑如何工作。根據(jù)指令,數(shù)據(jù)路徑將信號(hào)路由到不同的組件,打開和關(guān)閉數(shù)據(jù)路徑的不同部分,并監(jiān)控cpu的狀態(tài)。
指令周期——得到我們的cpu必須做的第一件事就是搞清楚接下來執(zhí)行什么指令,然后把指令從內(nèi)存轉(zhuǎn)移到cpu。指令由編譯器生成,并且特定于cpu的isa。isa將共享最常見的指令類型,如加載、存儲(chǔ)、加法、減法等。,但每個(gè)特定的isa都有許多其他特殊類型的指令。對(duì)于每種類型的指令,控制單元將知道哪些信號(hào)需要路由到哪里。
比如跑步的時(shí)候。exe,程序的代碼將被移到內(nèi)存中,cpu將被告知第一條指令的起始地址。cpu總是維護(hù)一個(gè)內(nèi)部寄存器,用于保存下一條要執(zhí)行的指令的存儲(chǔ)位置。這被稱為程序計(jì)數(shù)器(pc)。一旦你知道從哪里開始,指令周期的第一步就是獲取指令。這將把指令從內(nèi)存移動(dòng)到cpu的指令寄存器,這被稱為提取階段。事實(shí)上,指令可能已經(jīng)在cpu緩存中了,這一點(diǎn)我們將在后面介紹。
指令周期——解碼當(dāng)cpu有一條指令時(shí),需要找出它是哪種指令。這被稱為解碼階段。每條指令都有一組稱為操作碼的特定位,告訴cpu如何解釋它。這類似于如何使用不同的文件擴(kuò)展名來告訴計(jì)算機(jī)如何解釋文件。例如,。jpg和。png都是圖像文件,但它們以不同的組織數(shù)據(jù),因此計(jì)算機(jī)需要知道它們的類型才能正確地解釋它們。
根據(jù)isa的復(fù)雜程度,cpu的指令解碼部分可能會(huì)變得復(fù)雜。像riscv這樣的isa可能只有幾十條指令,而x86有上千條指令。在典型的英特爾x86 cpu上,解碼過程是最具挑戰(zhàn)性的過程之一,并且占用大量空間。cpu將解碼的最常見的指令類型是內(nèi)存、算術(shù)或分支指令。
存儲(chǔ)指令的三種主要指令類型可能類似于 將值從存儲(chǔ)地址1234讀入值a or 將值b寫入存儲(chǔ)地址5678 。算術(shù)指令可能類似于 將值a與值b相加,并將結(jié)果存儲(chǔ)在值c 。分支指令可能類似于 如果c的值為正,則執(zhí)行這段代碼;如果c的值為負(fù),則執(zhí)行該代碼。 一個(gè)典型的程序可能將它們連接在一起,產(chǎn)生類似 將結(jié)果為正的內(nèi)存地址1234的值與內(nèi)存地址5678的值相加,并將其存儲(chǔ)在內(nèi)存地址4321中,如果結(jié)果為負(fù),則將其存儲(chǔ)在地址8765 。
在開始執(zhí)行剛剛解碼的指令之前,我們需要暫停一會(huì)兒來討論寄存器。
cpu有一些很小但速度很快的內(nèi)存,叫做寄存器。在一個(gè)64位的cpu上,每個(gè)將容納64位,并且可能只有幾十個(gè)核心。這些用于存儲(chǔ)當(dāng)前使用的值,這些值可被視為類似于l0緩存的值。在上面的指令示例中,值a、b和c都將存儲(chǔ)在寄存器中。
alu現(xiàn)在回到執(zhí)行階段。對(duì)于我們上面討論的三種類型的指令,這將是不同的,所以我們將分別介紹每一種。
從算術(shù)指令開始,因?yàn)樗鼈冏钊菀桌斫?。這些類型的指令被發(fā)送到算術(shù)對(duì)數(shù)單元(alu)進(jìn)行處理。alu是一種通常有兩個(gè)輸入和控制信號(hào)并輸出結(jié)果的電路。
想象一下你在中學(xué)使用的基本計(jì)算器。要執(zhí)行操作,請(qǐng)輸入兩個(gè)輸入數(shù)字和要執(zhí)行的操作類型。計(jì)算器計(jì)算并輸出結(jié)果。對(duì)于我們cpu的alu來說,操作類型是由指令的操作碼決定的,控制單元會(huì)發(fā)送給alu。除了基本的算術(shù)運(yùn)算,alu還可以執(zhí)行與、或、非和x。像or這樣的按位運(yùn)算。alu還將為控制單元輸出一些關(guān)于它剛剛完成的計(jì)算的狀態(tài)信息。這可能包括諸如結(jié)果是正、負(fù)、零還是溢出之類的事情。
alu與算術(shù)運(yùn)算最相關(guān),但它也可用于內(nèi)存或分支指令。例如,cpu可能需要計(jì)算作為先前算術(shù)運(yùn)算的結(jié)果而給出的存儲(chǔ)器地址。它可能還需要計(jì)算一個(gè)偏移量,以添加到分支指令所需的程序計(jì)數(shù)器中。比如 如果前面的結(jié)果是否定的,向前跳過20條指令 。
對(duì)于內(nèi)存指令,我們需要理解一個(gè)叫做 內(nèi)存層次和。這代表了高速緩存、ram和主存儲(chǔ)器之間的關(guān)系。當(dāng)cpu接收到一個(gè)針對(duì)沒有本地存儲(chǔ)在其寄存器中的數(shù)據(jù)的內(nèi)存指令時(shí),它將沿著內(nèi)存層次結(jié)構(gòu)下降,直到找到它。大多數(shù)現(xiàn)代cpu包含三級(jí)高速緩存:l1、l2和l3。cpu檢查的第一個(gè)地方是l1緩存。這是最小和最快的三級(jí)緩存。l1緩存通常分為數(shù)據(jù)部分和指令部分。記住,指令需要像數(shù)據(jù)一樣從內(nèi)存中取出。
典型的l1緩存可能有數(shù)百kb。如果cpu在l1緩存中找不到它需要的東西,它將檢查l2緩存。這可能是幾個(gè)兆字節(jié)。下一步是l3緩存,可能是幾十mb。如果cpu可以 如果在三級(jí)緩存中找不到所需的數(shù)據(jù),它將進(jìn)入ram,最后進(jìn)入主存。當(dāng)我們每走一步,可用空間增加了大約一個(gè)數(shù)量級(jí),但等待時(shí)間也增加了。
在cpu找到數(shù)據(jù)后,它將調(diào)用層次結(jié)構(gòu),以便cpu在將來需要時(shí)可以快速訪問它。這里的步驟很多,但能保證cpu快速訪問所需數(shù)據(jù)。例如,cpu可以在一個(gè)或兩個(gè)周期內(nèi)讀取其內(nèi)部寄存器,l1需要幾個(gè)周期,l2需要大約十個(gè)周期,l3需要幾十個(gè)周期。如果您需要進(jìn)入內(nèi)存或主存儲(chǔ),根據(jù)系統(tǒng)的不同,可能需要數(shù)萬甚至數(shù)百萬個(gè)周期,每個(gè)內(nèi)核可能有自己的專用l1緩存,與另一個(gè)內(nèi)核共享一個(gè)l2,并在四個(gè)或更多內(nèi)核的組之間共享一個(gè)l3。我們將在本文后面詳細(xì)討論多核cpu。
分支指令是三種主要指令類型中的最后一種:分支指令和跳轉(zhuǎn)指令?,F(xiàn)代程序總是無休止地跳來跳去,cpu很少執(zhí)行沒有分支的連續(xù)指令。分支指令來自if語句、for循環(huán)和return語句等編程元素。這些用于中斷程序執(zhí)行和切換到代碼的不同部分。還有跳轉(zhuǎn)指令,總是分支指令。
條件分支對(duì)cpu來說特別棘手,因?yàn)樗赡芤淮螆?zhí)行多條指令,而分支的結(jié)果可能要到分支開始執(zhí)行后續(xù)指令時(shí)才能確定。
要完全理解為什么這是一個(gè)問題。問題,我們需要再轉(zhuǎn)一次,討論一下流水線。指令周期中的每個(gè)步驟可能需要幾個(gè)周期才能完成。這意味著當(dāng)提取指令時(shí),alu將空閑。為了最大限度地提高cpu的效率,我們將每個(gè)階段劃分為一個(gè)稱為流水線的過程。
理解這一點(diǎn)的經(jīng)典方法是比較洗衣服。你有兩件東西要洗。洗和烘干它們需要一個(gè)小時(shí)??梢詫⒌谝患锲贩湃胂匆聶C(jī),然后放入烘干機(jī),烘干后再開始洗第二件物品。需要四個(gè)小時(shí)。但是,如果您分工合作,在第一件產(chǎn)品烘干時(shí)開始第二次洗滌,您可以在三個(gè)小時(shí)內(nèi)完成兩次洗滌。一小時(shí)的減少量取決于你要洗的衣服以及洗衣機(jī)和烘干機(jī)的數(shù)量。清洗和烘干所有物品仍然需要兩個(gè)小時(shí),但如果計(jì)算重疊,總處理量將從0.5件產(chǎn)品/小時(shí)增加到0.75件產(chǎn)品/小時(shí)。
cpu使用相同的方法來提高指令吞吐量?,F(xiàn)代arm或x86 cpu可能有20多個(gè)流水線階段,這意味著在任何給定的時(shí)間點(diǎn),內(nèi)核都可以一次處理20多個(gè)不同的指令。每種設(shè)計(jì)都是獨(dú)一無二的,但樣本可分為四個(gè)讀取周期、六個(gè)解碼周期、三個(gè)執(zhí)行周期和七個(gè)將結(jié)果更新回存儲(chǔ)器的周期。
回到分公司,希望你能開始看到這個(gè)問題。如果我們不這樣做。;直到第10個(gè)周期,我們才知道一條指令是分支,我們將開始執(zhí)行9條新指令,如果采用分支,這些指令可能無效。為了解決這個(gè)問題,cpu有一個(gè)非常復(fù)雜的結(jié)構(gòu),叫做分支預(yù)測(cè)器。他們使用機(jī)器學(xué)習(xí)中類似的概念,試圖猜測(cè)分支是否會(huì)被采用。分支預(yù)測(cè)變量的復(fù)雜性遠(yuǎn)遠(yuǎn)超出了本文的范圍,但在基本層面上,它們跟蹤以前分支的狀態(tài),以查看是否有可能采用即將到來的分支?,F(xiàn)代分支預(yù)測(cè)器可以具有95%或更高的準(zhǔn)確度。
一旦分支結(jié)果被確定(流水線的這一階段已經(jīng)完成),程序計(jì)數(shù)器將被更新,cpu將繼續(xù)執(zhí)行下一條指令。如果分支預(yù)測(cè)錯(cuò)誤,cpu會(huì)在分支開始錯(cuò)誤執(zhí)行后拋出所有指令,然后從正確的位置重新開始。
亂序執(zhí)行現(xiàn)在,我們知道如何執(zhí)行三種最常見的指令類型。讓 讓我們來看看cpu的一些更高級(jí)的功能。事實(shí)上,所有現(xiàn)代處理器實(shí)際上并不按照接收指令的順序執(zhí)行指令。在等待執(zhí)行其他指令時(shí),可以使用一個(gè)稱為無序執(zhí)行的示例來最小化停機(jī)時(shí)間。
如果cpu知道即將到來的指令,但所需的數(shù)據(jù)可以 如果沒有及時(shí)準(zhǔn)備好,它可以在等待時(shí)切換指令順序,并從程序后面引入一條獨(dú)立的指令。這種指令重排序是一種非常強(qiáng)大的工具,但它遠(yuǎn)不是cpu使用的唯一技能。
另一個(gè)提高性能的特性叫做預(yù)取。如果你想從頭開始從頭到尾完成一個(gè)隨機(jī)指令需要多長時(shí)間?你會(huì)發(fā)現(xiàn)大部分的內(nèi)存訪問都用完了。預(yù)取器是cpu中的一個(gè)單元,它試圖預(yù)測(cè)未來的指令以及它們將需要什么數(shù)據(jù)。如果它發(fā)現(xiàn)它需要cpu沒有緩存的數(shù)據(jù),它將到達(dá)ram并將數(shù)據(jù)提取到緩存中。所以它的名字就叫預(yù)取。
加速器和未來在cpu中,另一個(gè)正在增加的主要功能是特定任務(wù)的加速。這些電路的全部工作就是盡可能快地完成一個(gè)小任務(wù)。這可能包括加密、媒體編碼或機(jī)器學(xué)習(xí)。
cpu可以自己做這些事情,但是有專用于它們的單元將大大提高效率。專用gpu就是一個(gè)很好的例子。cpu當(dāng)然可以執(zhí)行圖形處理所需的計(jì)算,但為它們配備特殊的單元可以提供更好的性能數(shù)量級(jí)。隨著加速器的興起,cpu的實(shí)際核心可能只占芯片的一小部分。
下圖是幾年前的英特爾cpu。大部分空間被內(nèi)核和緩存占用。下面第二張圖是新的amd芯片。那里的大部分空間被核心之外的組件占據(jù)。
最后,走向多核要介紹的主要功能是如何把一堆單個(gè)的cpu連接在一起,形成多核cpu。這并不像我們之前討論的簡單地放入單核設(shè)計(jì)的多個(gè)副本那么簡單。正如沒有簡單的方法可以將單線程程序轉(zhuǎn)換成多線程程序一樣,同樣的概念也適用于硬件。問題來自于內(nèi)核之間的依賴。
例如,對(duì)于4核設(shè)計(jì),cpu需要能夠以四倍的速度發(fā)出指令。它還需要四個(gè)獨(dú)立的內(nèi)存接口。由于多個(gè)實(shí)體可能處理相同的數(shù)據(jù),因此必須解決一致性和不一致性等問題。如果兩個(gè)內(nèi)核使用相同的數(shù)據(jù)來處理指令,它們?nèi)绾沃勒l擁有正確的值?如果一個(gè)內(nèi)核修改了數(shù)據(jù),但沒有及時(shí)到達(dá)另一個(gè)內(nèi)核執(zhí)行,該怎么辦?因?yàn)樗鼈冇袉为?dú)的緩存可以存儲(chǔ)重疊的數(shù)據(jù),所以必須使用復(fù)雜的算法和控制器來消除這些。
隨著cpu內(nèi)核數(shù)量的增加,正確的分支預(yù)測(cè)也非常重要。內(nèi)核一次執(zhí)行的指令越多,其中一條指令處理分支指令的可能性就越大。這意味著指令流可能隨時(shí)改變。
通常,獨(dú)立的內(nèi)核將處理來自不同線程的指令流。這有助于減少內(nèi)核之間的依賴性。這就是為什么如果您檢查任務(wù)管理器,您會(huì)經(jīng)??吹揭粋€(gè)內(nèi)核正在努力工作,而其他內(nèi)核正在工作。許多程序不是為多線程設(shè)計(jì)的。在某些情況下,讓一個(gè)內(nèi)核來完成工作要比嘗試劃分工作的成本高得多。
物理設(shè)計(jì)本文的大部分內(nèi)容都集中在cpu的架構(gòu)設(shè)計(jì)上,因?yàn)檫@是最復(fù)雜的。然而,所有這些都需要在現(xiàn)實(shí)世界中創(chuàng)建,這增加了另一個(gè)層次的復(fù)雜性。
為了同步整個(gè)處理器中的所有組件,當(dāng)使用時(shí)。時(shí)鐘信號(hào)?,F(xiàn)代的處理器通常運(yùn)行在3.0ghz到5.0ghz之間,在過去的十年里似乎沒有改變。在每個(gè)周期中,芯片中數(shù)十億個(gè)晶體管被開啟和關(guān)閉。
時(shí)鐘是必不可少的,以確保所有的值顯示在正確的時(shí)間,因?yàn)槊總€(gè)階段的管道前進(jìn)。時(shí)鐘決定了cpu每秒可以處理多少條指令。通過超頻提高它的頻率會(huì)讓芯片更快,但也會(huì)增加功耗和熱量輸出。
熱量是cpu最大的敵人。隨著數(shù)碼電子設(shè)備溫度的升高,微晶體管可能開始變質(zhì)。如果不散熱,芯片可能會(huì)損壞。那個(gè) 這就是為什么所有的cpu都有散熱器。cpu的實(shí)際硅片可能只占物理設(shè)備表面積的20%。占據(jù)空間的增加使得熱量更均勻地分布到散熱器上。它還允許更多引腳與外部元件接口。
現(xiàn)代cpu的背面可以有成千上萬或更多的輸入和輸出引腳。由于大多數(shù)計(jì)算組件都在芯片中,移動(dòng)芯片可能只有幾百個(gè)引腳。無論采用哪種設(shè)計(jì),都有一半左右專用于供電,其余用于數(shù)據(jù)通信。這包括與內(nèi)存、芯片組、存儲(chǔ)、pcie設(shè)備等的通信。
由于高性能cpu在滿載時(shí)消耗100安培或更多,它們需要數(shù)百個(gè)引腳來均勻分配電流消耗。引線通常鍍金以提高導(dǎo)電性。不同的制造商在他們的許多產(chǎn)品線中使用不同的引腳排列。
用一個(gè)例子來總結(jié),我們就快速介紹一下英特爾酷睿2 cpu的設(shè)計(jì)。這開始于2006年,所以有些部分可能已經(jīng)過時(shí)了,但沒有關(guān)于更新設(shè)計(jì)的詳細(xì)信息。
從頂部開始,我們有指令緩存和itlb。翻譯后備緩沖器(tlb)用于幫助cpu知道所需指令在內(nèi)存中的位置。這些指令存儲(chǔ)在l1指令緩存中,然后發(fā)送到預(yù)解碼器。x86架構(gòu)極其復(fù)雜密集,解碼步驟非常多。與此同時(shí),分支預(yù)測(cè)器和預(yù)取器都預(yù)計(jì)到由傳入指令引起的任何潛在問題。
從那里,指令被發(fā)送到指令隊(duì)列。復(fù)習(xí)無序設(shè)計(jì)如何讓cpu執(zhí)行指令,選擇最及時(shí)的指令執(zhí)行。這個(gè)隊(duì)列保存cpu正在考慮的當(dāng)前指令。一旦cpu知道哪條指令將是最佳執(zhí)行模式,就會(huì)進(jìn)一步解碼成微操作。雖然一條指令可能包含cpu復(fù)雜的任務(wù),但微操作是精細(xì)的任務(wù),cpu更容易解釋。
然后,這些指令進(jìn)入 注冊(cè)和登記, 羅布 和 保留站和這三個(gè)組件的確切功能有些復(fù)雜(請(qǐng)考慮研究生水平的大學(xué)課程),但是用來幫助管理無序過程中指令之間的依賴關(guān)系。
a 核心 實(shí)際上會(huì)有許多alu和內(nèi)存端口。將輸入操作放入保留站,直到alu可以使用。、或存儲(chǔ)器端口。一旦所需組件可用,將在l1數(shù)據(jù)緩存的幫助下處理指令。輸出將被存儲(chǔ),cpu現(xiàn)在準(zhǔn)備好從下一條指令開始。那個(gè) 就是它!
雖然本文并不打算精確地指導(dǎo)每個(gè)cpu的工作模式,但是它應(yīng)該讓您很好地理解它們的內(nèi)部工作原理和復(fù)雜性。坦率地說,amd和英特爾之外的人不認(rèn)為。;我真的不知道他們的cpu是如何工作的。本文的每一部分都代表了整個(gè)研發(fā)領(lǐng)域,因此這里提供的信息只是從一開始。
了解更多cpu的兩部分是什么 它們的作用是什么(cpu的兩部分是什么)?相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。