日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

來源:內容由半導體行業觀察(icbank)編譯自「techspot」,謝謝。

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

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

關于CPU科普,這篇說得最詳細

 

CPU藍圖:ISA

分析任何CPU時,您首先遇到的就是指令集體系結構(ISA)。這是有關CPU如何運行以及所有內部系統如何交互的圖形化藍圖。就像同一物種中有許多品種的狗一樣,可以在CPU上構建許多不同類型的ISA。兩種最常見的類型是x86(在臺式機和筆記本電腦中找到)和ARM(在嵌入式和移動設備中找到)。

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

為了覆蓋CPU的主要部分,我們將遵循一條指令在執行時所采用的路徑。不同類型的指令可能遵循不同的路徑,并使用CPU的不同部分,但在這里我們將進行概括以涵蓋最大部分。我們將從單核處理器的最基本設計開始,并隨著我們朝著更現代的設計逐步增加復雜性。

 

控制單元和數據路徑

CPU可以分為兩部分:控制單元和數據路徑。想象一輛火車。引擎是火車的動力來源,但指揮員卻在幕后拉動操縱桿并控制引擎的各個方面。CPU是相同的方式。

數據路徑就像引擎一樣,顧名思義,是數據在處理過程中流動的路徑。數據路徑接收輸入,處理它們,并在完成后將它們發送到正確的位置??刂茊卧嬖V數據路徑如何工作。根據指令,數據路徑會將信號路由到不同的組件,打開和關閉數據路徑的不同部分,并監視CPU的狀態。

關于CPU科普,這篇說得最詳細

 

指令周期-獲取

我們的CPU必須做的第一件事是弄清楚下一步要執行什么指令,然后將它們從內存轉移到CPU中。指令由編譯器產生,并且特定于CPU的ISA。ISA將共享最常見的指令類型,例如加載,存儲,加法,減法等,但是每個特定ISA都有許多其他特殊類型的指令。對于每種類型的指令,控制單元將知道需要將哪些信號路由到何處。

例如,當您在windows上運行.exe時,該程序的代碼將移入內存,并且告訴CPU第一條指令的起始地址。CPU始終維護一個內部寄存器,該寄存器保存要執行的下一條指令的存儲器位置。這稱為程序計數器(PC)。

一旦知道從哪里開始,指令周期的第一步就是獲取該指令。這會將指令從存儲器移到CPU的指令寄存器中,這稱為提取階段。實際上,指令可能已經在CPU的高速緩存中,這個我們在后續再介紹。

 

指令周期-解碼

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

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

 

3種主要指令類型

存儲指令可能類似于“將值從存儲地址1234讀入值A”或“將值B寫入存儲地址5678”。算術指令可能類似于“將值A添加到值B并將結果存儲到值C”。分支指令可能類似于“如果C值為正,則執行此代碼;如果C值為負,則執行彼代碼”。一個典型的程序可能將它們鏈接在一起,以產生類似“將結果為肯定的內存地址1234的值添加到內存地址5678的值,并將其存儲在內存地址4321的結果,如果結果為負的則存儲在地址8765的東西” 。

在開始執行剛剛解碼的指令之前,我們需要暫停片刻以討論寄存器。

CPU具有一些很小但非??斓拇鎯ζ鳎Q為寄存器。在64位CPU上,每個將容納64位,并且內核可能只有幾十個。這些用于存儲當前正在使用的值,可以將其視為類似于L0緩存的值。在上面的指令示例中,值A,B和C都將存儲在寄存器中。

 

ALU

現在回到執行階段。對于我們上面討論的3種類型的指令,這將有所不同,因此我們將分別介紹每一種。

從算術指令開始,因為它們最容易理解。這些類型的指令被送入算術日志單元(ALU)進行處理。ALU是一種通常具有兩個輸入和控制信號并輸出結果的電路。

關于CPU科普,這篇說得最詳細

想象一下您在中學時期使用的基本計算器。要執行操作,請輸入兩個輸入數字以及要執行的操作類型。計算器進行計算并輸出結果。對于我們的CPU的ALU,操作類型由指令的操作碼決定,控制單元會將其發送給ALU。除了基本的算術運算之外,ALU還可以執行AND,OR,NOT和XOR之類的bitwise運算。ALU還將為控制單元輸出一些有關其剛剛完成的計算的狀態信息。這可能包括諸如結果是肯定的,否定的,零的還是溢出的事情。

ALU與算術運算最相關,但是它也可以用于存儲器或分支指令。例如,CPU可能需要計算作為先前算術運算結果給出的內存地址。它還可能需要計算偏移量,以添加到分支指令所需的程序計數器中。諸如“如果先前的結果是否定的,則向前跳20條指令”。

 

內存指令和層次結構

對于內存指令,我們需要了解一個稱為“ 內存層次結構”的概念。這代表了高速緩存,RAM和主存儲之間的關系。當CPU接收到一條內存指令,該指令針對尚未在其寄存器本地存儲的數據時,它將沿內存層次結構下降,直到找到它為止。大多數現代CPU包含三級緩存:L1,L2和L3。CPU首先要檢查的地方是L1緩存。這是三級緩存中最小和最快的。L1高速緩存通常分為用于數據的部分和用于指令的部分。請記住,指令需要像數據一樣從內存中獲取。

典型的L1緩存可能為數百KB。如果CPU在L1緩存中找不到所需的內容,它將檢查L2緩存。這可能約為幾MB。下一步是L3緩存,它可能是幾十MB。如果CPU在三級緩存中找不到所需的數據,它將進入RAM,最后進入主存儲器。當我們沿著每一步走時,可用空間大約增加一個數量級,但是等待時間也增加。

關于CPU科普,這篇說得最詳細

CPU找到數據后,它將調出層次結構,以便將來如有需要,CPU可以快速訪問它。這里有很多步驟,但是可以確保CPU快速訪問所需的數據。例如,CPU可以在一個或兩個周期內讀取其內部寄存器,在幾個周期中讀取L1,在十個左右周期中讀取L2,在幾十個周期中讀取L3。如果需要進入內存或主存儲,則可能要花費數萬甚至數百萬個周期。根據系統的不同,每個核心可能會擁有自己的私有L1緩存,與另一個核心共享一個L2,并在四個或更多核心的組之間共享一個L3。我們將在本文后面詳細討論多核CPU。

 

分支和跳轉指令

三種主要指令類型中的最后一種是分支指令?,F代程序始終無休止地跳來跳去,CPU很少執行沒有分支的連續指令。分支指令來自諸如if語句,for循環和return語句之類的編程元素。這些都用于中斷程序執行并切換到代碼的不同部分。也有跳轉指令,這些跳轉指令是始終采用的分支指令。

條件分支對于CPU尤其棘手,因為它可能一次執行多個指令,并且可能直到分支開始執行后續指令后才能確定分支的結果。

為了完全理解為什么這是一個問題,我們需要進行另一種轉移,并討論流水線。指令周期中的每個步驟可能需要幾個周期才能完成。這意味著在提取指令時,ALU否則將處于空閑狀態。為了最大化CPU的效率,我們在稱為流水線的過程中劃分每個階段。

理解這一點的經典方法是以洗衣服為對比。您有兩個東西要洗,洗滌和干燥個需要一個小時。您可以將第一個物件放入洗衣機中,然后在烘干機中放入,等烘干之后后再開始洗第二個產品。這將花費四個小時。但是,如果您劃分工作并在第一個產品干燥的同時開始第二個洗滌,則可以在三個小時內完成兩個裝載。一小時減少量取決于您的要洗的東西數量以及洗衣機和烘干機的數量。洗烘每個東西仍然需要兩個小時,但是如果計算重疊,則將總吞吐量從0.5個產品/小時增加到0.75個產品/小時。

關于CPU科普,這篇說得最詳細

CPU使用相同的方法來提高指令吞吐量。現代的ARM或x86 CPU可能具有20多個流水線級,這意味著在任何給定點,該內核一次都可以處理20多個不同的指令。每種設計都是唯一的,但是一個樣本劃分可能是4個周期用于讀取,6個周期用于解碼,3個周期用于執行以及7個周期將結果更新回內存。

回到分支機構,希望您可以開始看到此問題。如果直到周期10才知道一條指令是分支,那么我們將已經開始執行9條新指令,如果采用該分支,這些指令可能無效。為了解決這個問題,CPU具有非常復雜的結構,稱為分支預測器。他們使用機器學習中的類似概念來嘗試猜測是否將采用分支。分支預測變量的復雜性遠遠超出了本文的范圍,但是在基本級別上,它們跟蹤先前分支的狀態,以了解是否可能采用即將到來的分支?,F代分支預測器可以具有95%或更高的準確性。

一旦確定分支的結果(已完成流水線的該階段),程序計數器將被更新,CPU將繼續執行下一條指令。如果分支的預測錯誤,則CPU將在分支錯誤地開始執行后拋出所有指令,然后從正確的位置重新啟動。

 

亂序執行

現在,我們知道如何執行三種最常見的指令類型,讓我們看一下CPU的一些更高級的功能。實際上,所有現代處理器實際上并沒有按接收順序執行指令。等待執行其他指令時,可以使用稱為亂序執行的范例來最大程度地減少停機時間。

如果CPU知道即將到來的指令,但所需的數據并不能及時準備,這時候它可以在等待時切換指令順序并從程序的后面引入一條獨立的指令。該指令重新排序是一種功能非常強大的工具,但它遠非CPU使用的唯一技巧。

關于CPU科普,這篇說得最詳細

另一個提高性能的功能稱為預取。如果您要花時間從頭到尾完成一條隨機指令需要多長時間,您會發現內存訪問大部分時間都用完了。預取器是CPU中的一個單元,它試圖預見將來的指令以及它們將需要什么數據。如果發現需要CPU尚未緩存的數據,它將到達RAM并將該數據提取到緩存中。因此它的名稱叫做預取。

 

加速器與未來

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

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

下圖顯示了幾年前的Intel CPU。大部分空間被內核和緩存占用。下面的第二張圖片是新的AMD芯片。那里的大部分空間都由核心以外的組件占用。

關于CPU科普,這篇說得最詳細關于CPU科普,這篇說得最詳細

 

走向多核

最后要介紹的主要功能是如何將一堆單獨的CPU連接在一起以形成多核CPU。這不只是簡單地放入我們之前討論的單核設計的多個副本那樣簡單。就像沒有簡單的方法將單線程程序轉換為多線程程序一樣,相同的概念也適用于硬件。問題來自核心之間的依賴性。

例如,對于4核設計,CPU需要能夠以4倍的速度發出指令。它還需要四個單獨的內存接口。由于多個實體可能會處理相同的數據,因此必須解決諸如一致性和非一致性之類的問題。如果兩個內核都使用相同的數據來處理指令,那么他們如何知道誰擁有正確的價值?如果一個內核修改了數據但又沒有及時到達另一個內核執行該怎么辦?由于它們具有可存儲重疊數據的單獨緩存,因此必須使用復雜的算法和控制器來消除這些沖突。

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

通常,單獨的內核將處理來自不同線程的指令流。這有助于減少內核之間的依賴性。這就是為什么如果您檢查“任務管理器”,您會經??吹揭粋€核心在努力工作,而其他核心卻在工作。許多程序不是為多線程設計的。在某些情況下,讓一個核心來完成工作比支付試圖分工的開銷要高得多。

 

物理設計

本文的大部分內容都集中在CPU的體系結構設計上,因為這是大多數復雜性所在。但是,所有這些都需要在現實世界中創建,這又增加了另一層次的復雜性。

為了使整個處理器中的所有組件同步,使用了時鐘信號?,F代處理器通常在3.0GHz和5.0GHz之間運行,并且在過去十年中似乎沒有改變。在每個周期中,芯片內部數十億個晶體管處于導通和截止狀態。

時鐘對于確保在流水線的每個階段前進時,所有值在正確的時間顯示都是至關重要的。時鐘確定CPU每秒可以處理多少條指令。通過超頻提高其頻率將使芯片速度更快,但也會增加功耗和熱量輸出。

關于CPU科普,這篇說得最詳細

熱量是CPU的最大敵人。隨著數字電子設備的升溫,微觀晶體管可能開始退化。如果不清除熱量,可能會導致芯片損壞。這就是為什么所有CPU都帶有散熱器的原因。CPU的實際硅芯片可能僅占物理設備表面積的20%。占用空間的增加允許熱量更均勻地散布到散熱器。它還允許更多的引腳用于與外部組件的接口。

現代CPU的背面可以有數千個或更多的輸入和輸出引腳。由于大多數計算部件都在芯片內,因此移動芯片可能只有幾百個引腳。不管采用哪種設計,其中約有一半專門用于供電,其余用于數據通信。這包括與RAM,芯片組,存儲,PCIe設備等的通信。

隨著高性能CPU在滿負載下汲取100安培或更高的電流,它們需要數百個引腳才能平均分散電流消耗。引腳通常鍍金以提高導電性。不同的制造商在其許多產品線中使用不同的銷釘布置。

 

結合一個例子

總結一下,我們將快速介紹一下Intel Core 2 CPU的設計。這是從2006年開始的,因此某些零件可能已過時,但是尚無有關較新設計的詳細信息。

從頂部開始,我們有指令緩存和ITLB。轉換后備緩沖區(TLB)用于幫助CPU知道存儲器中要查找所需指令的位置。這些指令存儲在L1指令緩存中,然后發送到預解碼器中。x86體系結構極其復雜且密集,因此有許多解碼步驟。同時,分支預測器和預取器都在期待由傳入指令引起的任何潛在問題。

關于CPU科普,這篇說得最詳細

從那里,指令被發送到指令隊列?;仡櫼幌聼o序設計如何使CPU執行指令并選擇最及時的指令來執行。該隊列保存CPU正在考慮的當前指令。一旦CPU知道哪一條指令將是最佳執行方式,它將進一步解碼為微操作。雖然一條指令可能包含CPU的復雜任務,但微操作是精細的任務,CPU可以更輕松地對其進行解釋。

然后,這些指令進入“注冊表”,“ ROB”和“保留站”。這三個組成部分的確切功能有些復雜(請考慮研究生水平的大學課程),但是它們在亂序過程中用于幫助管理指令之間的依賴關系。

一個“核心”實際上將具有許多ALU和內存端口。將傳入的操作放入預留站,直到可以使用ALU或內存端口。一旦所需的組件可用,該指令將在L1數據緩存的幫助下進行處理。輸出結果將被存儲,并且CPU現在準備從下一條指令開始。就是這樣!

雖然本文并不是要確切地指導每個CPU的工作方式,但是它應該使您對它們的內部工作原理和復雜性有一個很好的了解。坦白說,AMD和Intel之外的人實際上都不知道他們的CPU如何工作。本文的每個部分都代表了整個研究和開發領域,因此此處提供的信息只是從頭開始。

*點擊文末閱讀原文,可閱讀英文原文。

*免責聲明:本文由作者原創。文章內容系作者個人觀點,半導體行業觀察轉載僅為了傳達一種不同的觀點,不代表半導體行業觀察對該觀點贊同或支持,如果有任何異議,歡迎聯系半導體行業觀察。

分享到:
標簽:CPU
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定