當前位置:編程學習大全網 - 編程語言 - cpu圖片完整圖解(什麽意思及詳細介紹)

cpu圖片完整圖解(什麽意思及詳細介紹)

CPU通常被稱為計算機的大腦,就像人腦壹樣。它由幾個部分組成,包括接收信息的部分、存儲信息的部分、處理信息的部分、幫助輸出信息的部分等等。這些部分壹起工作來處理信息。

在今天 的文章中,我們將介紹構成CPU的關鍵元素,以及它們如何壹起為計算機提供動能。

CPU藍圖:ISA

在分析任何壹個CPU的時候,首先遇到的就是指令集架構。這是壹個關於CPU如何運行以及所有內部系統如何交互的圖形藍圖。就像同壹物種有很多品種的狗壹樣,在CPU上可以構建很多不同類型的isa。兩種最常見的類型是x86和ARM。

還有其他利基應用程序,如MIPS、RISC-V和PowerPC。ISA將指定CPU可以處理哪些指令,如何與內存和緩存交互,如何在多個處理階段中劃分工作,等等。

為了涵蓋CPU的主要部分,我們將遵循壹條指令執行時所采取的路徑。不同類型的指令可能遵循不同的路徑,並使用CPU的不同部分,但這裏我們將概括涵蓋最大的部分。我們將從單核處理器的最基本設計開始,隨著我們向更現代的設計發展,逐漸增加復雜性。

控制單元和數據路徑

CPU可分為控制單元和數據通路兩部分。想象壹列火車。發動機是火車的動力源,但車長在幕後拉動操縱桿,控制著發動機的方方面面。CPU也是這樣。

數據就像壹個引擎。顧名思義,它是數據在處理過程中流動的路徑。數據路徑接收輸入,處理它們,並在完成時將它們發送到正確的位置。控制單元告訴數據路徑如何工作。根據指令,數據路徑將信號路由到不同的組件,打開和關閉數據路徑的不同部分,並監控CPU的狀態。

指令周期-獲取

我們的CPU要做的第壹件事就是搞清楚接下來要執行什麽指令,然後把指令從內存轉移到CPU。指令由編譯器生成,並且特定於CPU的ISA。ISAs將***享最常見的指令類型,如加載、存儲、加、減等。但每個特定的ISA都有許多其他特殊類型的指令。對於每種類型的指令,控制單元將知道哪些信號需要路由到哪裏。

比如跑步的時候。exe在Windows上,程序的代碼會移入內存,並告訴CPU第壹條指令的起始地址。CPU總是維護壹個內部寄存器,用於保存下壹條要執行的指令的存儲位置。這被稱為程序計數器。

壹旦妳知道從哪裏開始,指令周期的第壹步就是獲取指令。這將把指令從內存移動到CPU的指令寄存器,稱為取指令階段。實際上,該指令可能已經在CPU的緩存中,這壹點我們將在後面介紹。

指令周期-解碼

當CPU有壹條指令的時候,需要具體弄清楚是什麽類型的指令。這被稱為解碼階段。每條指令都有壹組稱為操作碼的特定位,告訴CPU如何解釋它。這類似於如何使用不同的文件擴展名來告訴計算機如何解釋文件。例如,jpg和。png都是圖像文件,但它們以不同的方式組織數據,因此計算機需要知道它們的類型才能正確地解釋它們。

根據ISA的復雜程度,CPU的指令解碼部分可能會變得復雜。像RISC-V這樣的ISA可能只有幾十條指令,而x86有上千條指令。在典型的英特爾x86 CPU上,解碼過程是最具挑戰性的過程之壹,並且占用大量空間。由CPU解碼的最常見的指令類型是內存、算術或分支指令。

3種主要指令類型

存儲指令可能類似於 quot從內存地址1234讀入值A quot或者 quot將值B寫入內存地址5678 quot。算術指令可以類似於 quot將值A加到值B,並將結果存儲到值C quot。分支指令可能類似於 quot如果C的值為正,則執行這段代碼;如果c的值為負,則執行該代碼 quot。壹個典型的程序可能會將它們鏈接在壹起,產生類似於 quot將結果為正的內存地址1234的值與內存地址5678的值相加,並將其存儲在內存地址4321中,如果結果為負,則將其存儲在地址8765中。

在開始執行剛剛解碼的指令之前,我們需要暫停壹會兒來討論寄存器。

CPU有壹些很小但速度很快的內存,叫做寄存器。在壹個64位的CPU上,每個將容納64位,並且可能只有幾十個核心。這些用來存儲當前使用的值,可以認為是類似於L0緩存的值。在上面的指令示例中,值A、B和C都將存儲在寄存器中。

ALU

現在返回執行階段。對於我們上面討論的3種類型的指令,這將是不同的,所以我們將分別介紹每壹種。

從算術指令開始,因為它們最容易理解。這些類型的指令被發送到算術對數單元進行處理。ALU是壹種通常有兩個輸入和控制信號並輸出結果的電路。

想象壹下妳在中學使用的基本計算器。要執行操作,請輸入兩個輸入數字和要執行的操作類型。計算器計算並輸出結果。對於我們的CPU ALU,操作類型由指令的操作碼決定,控制單元會發送給ALU。除了基本的算術運算之外,ALU還可以執行按位運算,例如AND、OR、NOT和XOR。ALU還將向控制單元輸出壹些關於其剛剛完成的計算的狀態信息。這可能包括諸如結果是正、負、零還是溢出之類的事情。

ALU與算術運算最相關,但它也可用於內存或分支指令。例如,CPU可能需要計算作為前面算術運算結果的內存地址。它可能還需要計算偏移量,以添加到分支指令所需的程序計數器中。比如 quot如果前面的結果是否定的,向前跳20個指令 quot。

內存指令和層次結構

對於內存指令,我們需要知道壹個叫做 quot內存層次 quot。這代表了高速緩存、RAM和主存儲器之間的關系。當CPU接收到壹個針對沒有本地存儲在其寄存器中的數據的內存指令時,它將沿著內存層次結構向下移動,直到找到它。大多數現代CPU包含三級高速緩存:L1、L2和L3。CPU檢查的第壹個地方是L1緩存。這是最小和最快的三級緩存。L1緩存通常分為數據部分和指令部分。記住,指令需要像數據壹樣從內存中檢索。

典型的L1緩存可能有數百KB。如果CPU能 如果在L1緩存中找不到它需要的內容,它將檢查L2緩存。這可能是幾個兆字節。下壹步是L3緩存,可能是幾十MB。如果CPU能 如果在三級高速緩存中找不到所需的數據,這些數據將進入RAM並最終進入主存。我們每走壹步,可用空間就增加壹個數量級,但等待時間也會增加。

在CPU找到數據後,它將調用層次結構,以便CPU在將來需要時可以快速訪問它。這裏的步驟很多,但能保證CPU快速訪問所需數據。例如,CPU可以在壹兩個周期內讀取其內部寄存器,L1需要幾個周期,L2大約需要十個周期,L3需要幾十個周期。如果需要訪問內存或主存,可能需要幾萬甚至幾百萬個周期。根據系統的不同,每個內核可能有自己的專用L1緩存,與另壹個內核***享壹個L2,並在四個或更多內核的組之間***享壹個L3。我們將在本文後面詳細討論多核CPU。

分支和跳轉指令

三種主要指令類型中的最後壹種是分支指令。現代的程序總是無休止地跳來跳去,CPU很少執行沒有分支的連續指令。分支指令來自if語句、for循環和return語句等編程元素。這些用於中斷程序執行和切換到代碼的不同部分。還有跳轉指令,總是分支指令。

對於CPU來說,條件分支尤其棘手,因為它可能壹次執行多條指令,並且在分支開始執行後續指令之前,分支的結果可能無法確定。

為了充分理解為什麽這是壹個問題,我們需要進行另壹次傳輸並討論管道。指令周期中的每個步驟可能需要幾個周期才能完成。這意味著當獲取指令時,ALU將空閑。為了最大限度地提高CPU的效率,我們將每個階段劃分為壹個稱為流水線的過程。

理解這壹點的經典方法是比較洗衣服。妳有兩件東西要洗。洗壹個晾壹個要壹個小時。可以將第壹件物品放入洗衣機,然後放入烘幹機,烘幹後再開始洗第二件物品。需要四個小時。但如果分工,在第壹件產品幹的同時開始第二次洗滌,三個小時就可以完成兩次洗滌。壹小時的減少量取決於妳要洗的衣服數量以及洗衣機和烘幹機的數量。仍然需要兩個小時來幹燥所有東西,但是如果計算重疊,總吞吐量將從0.5個產品/小時增加到0.75個產品/小時。

CPU使用相同的方法來提高指令吞吐量。現代ARM或x86 CPU可能有20多個流水線階段,這意味著在任何給定的時間點,內核都可以同時處理20多條不同的指令。每種設計都是獨特的,但是樣本分區可以是4個周期用於讀取,6個周期用於解碼,3個周期用於執行,7個周期用於將結果更新回存儲器。

回到分公司,希望妳能開始看到這個問題。如果我們不 直到第10個周期,我們才知道壹條指令是分支,那麽我們將已經開始執行9條新指令,如果采用這個分支,這些指令可能是無效的。為了解決這個問題,CPU有壹個非常復雜的結構,叫做分支預測器。他們使用機器學習中類似的概念,試圖猜測分支是否會被采用。分支預測變量的復雜性遠遠超出了本文的範圍,但是在基本層面上,它們跟蹤以前分支的狀態,以查看是否有可能采用即將到來的分支。現代分支預測器可以具有95%或更高的準確度。

壹旦分支的結果被確定,程序計數器將被更新,CPU將繼續執行下壹條指令。如果分支的預測是錯誤的,CPU會在分支開始錯誤執行後拋出所有指令,然後從正確的位置重新開始。

當前位置現在,我們知道了如何執行三種最常見的指令。讓 讓我們看看CPU的壹些更高級的功能。實際上,所有現代處理器都不 實際上並不按照接收的順序執行指令。在等待其他指令時,您可以使用壹個名為無序執行的示例來最小化停機時間。

如果CPU知道即將到來的指令,但所需的數據可以 如果沒有及時準備好,那麽它可以在等待時切換指令序列,並從程序後面引入壹條獨立的指令。這種指令重排序是壹種非常強大的工具,但它遠不是CPU使用的唯壹技能。

另壹個提高性能的特性叫做預取。如果妳從頭到尾完成壹條隨機指令都要花時間,妳會發現大部分時間內存訪問都用光了。預取器是CPU中的壹個單元,它試圖預測未來的指令以及它們將需要什麽數據。如果您發現需要由CPU緩存的數據,它將到達RAM並將數據提取到緩存中。所以它的名字叫預取。

亂序執行

在CPU中,正在添加的另壹個主要功能是特定任務的加速。這些電路的全部工作就是盡可能快地完成壹個小任務。這可能包括加密、媒體編碼或機器學習。

CPU可以自己做這些事情,但是有壹個專用於它們的單元會大大提高效率。專用GPU就是壹個很好的例子。當然,CPU可以執行圖形處理所需的計算,但為其配備專用單元可以提供更好的性能數量級。隨著加速器的興起,CPU的實際核心可能只占芯片的壹小部分。

下圖是幾年前的英特爾CPU。內核和緩存占據了大部分空間。下面第二張圖是新的AMD芯片。那裏的大部分空間被核心之外的組件占據。

加速器與未來

最後要介紹的主要功能是如何將壹堆單獨的CPU連接在壹起,形成壹個多核CPU。它 這並不像我們之前討論的簡單地將單核設計放入多個副本中那麽簡單。正如沒有簡單的方法可以將單線程程序轉換成多線程程序壹樣,同樣的概念也適用於硬件。從問題的核心之間的依賴。

例如,對於4核設計,CPU發出指令的速度需要提高4倍。它還需要四個獨立的存儲器接口。由於多個實體可能處理相同的數據,因此必須解決壹致性和不壹致性等問題。如果兩個內核使用相同的數據來處理指令,那麽它們如何知道誰擁有正確的值呢?如果壹個內核修改了數據,但是沒有 不能及時到達另壹個內核執行?因為它們有單獨的緩存可以存儲重疊的數據,所以必須使用復雜的算法和控制器來消除這些沖突。

隨著CPU內核數量的增加,正確的分支預測也非常重要。內核壹次執行的指令越多,其中壹個處理分支指令的可能性就越大。這意味著指令流可能隨時改變。

通常,壹個獨立的內核將處理來自不同線程的指令流。這有助於減少內核之間的依賴性。那 這就是為什麽如果您查看任務管理器,您會經常看到壹個內核正在努力工作,而其他內核正在工作。許多程序不是為多線程設計的。在某些情況下,讓壹個內核完成工作要比試圖劃分工作所付出的代價高得多。

走向多核

本文的大部分內容都集中在CPU的架構設計上,因為這是大部分復雜性所在。然而,所有這些都需要在現實世界中創建,這增加了另壹個層次的復雜性。

為了同步整個處理器中的所有組件,使用了時鐘信號。現代處理器通常運行在3.0GHz到5.0GHz之間,它們不會 在過去的十年裏,似乎沒有什麽變化。在每個周期中,芯片內部數十億個晶體管被開啟和關閉。

時鐘是必不可少的,以確保所有的值顯示在正確的時間,因為每個階段的管道進展。時鐘決定了CPU每秒可以處理多少條指令。通過超頻提高它的頻率會讓芯片更快,但也會增加功耗和熱量輸出。

熱量是CPU最大的敵人。隨著數字電子設備溫度的升高,微晶體管可能會開始退化。如果不散熱,芯片可能會損壞。那 這就是為什麽所有的CPU都有散熱器。CPU的實際矽片可能只占物理設備表面積的20%。占據空間的增加使得熱量更均勻地分布到散熱器上。它還允許使用更多引腳與外部元件接口。

現代CPU的背面可以有成千上萬或更多的輸入和輸出引腳。由於大多數計算組件都在芯片中,移動芯片可能只有幾百個引腳。無論采用哪種設計,都有壹半左右專用於供電,其余用於數據通信。這包括與內存、芯片組、存儲、PCIe設備等的通信。

由於高性能CPU在滿載時消耗100安培或更多,它們需要數百個引腳來均勻分布電流消耗。插腳通常鍍金以提高導電性。不同的制造商在他們的許多產品線中使用不同的引腳排列。

物理設計

總結壹下,我們就快速介紹壹下英特爾酷睿2 CPU的設計。這開始於2006年,所以有些部分可能已經過時了,但沒有關於更新設計的詳細信息。

從頂部開始,我們有指令緩存和ITLB。翻譯後備緩沖器用於幫助CPU知道所需指令在內存中的位置。這些指令存儲在L1指令緩存中,然後發送到預解碼器。x86架構極其復雜密集,解碼步驟非常多。與此同時,分支預測器和預取器都在預期由到來的指令引起的任何潛在問題。

從那裏,指令被發送到指令隊列。復習無序設計如何讓CPU執行指令,選擇最及時的指令執行。該隊列保存CPU正在考慮的當前指令。壹旦CPU知道哪條指令將是最好的執行方式,它將被進壹步解碼成微操作。雖然壹條指令可能包含CPU的復雜任務,但微操作是壹項微妙的任務,可以更容易地由CPU來解釋。

然後,這些指令輸入 quot註冊表 quot, quot羅布 quot和 quot預訂站 quot。這三個組件的確切功能有些復雜,但它們用於幫助管理無序過程中指令之間的依賴關系。

A quot核心 quot實際上會有許多alu和內存端口。將輸入操作放入保留站,直到ALU或內存端口可以使用。壹旦所需組件可用,該指令將在L1數據緩存的幫助下進行處理。輸出將被存儲,CPU現在準備好從下壹條指令開始。那 就是它!

雖然本文並不打算準確地指導每個CPU如何工作,但是它應該讓您很好地理解它們的內部工作原理和復雜性。坦白說,AMD和英特爾以外的人其實不 我不知道他們的中央處理器是如何工作的。本文的每壹部分都代表了整個研發領域,因此這裏提供的信息只是壹個開始。

來源:內容由icbank整理自techspot。謝謝妳。

王者之心2點擊試玩

  • 上一篇:matlab跳過十行讀取headerlines
  • 下一篇:論中國教育改革(主要在山東)
  • copyright 2024編程學習大全網