不是.CPU從存儲器或高速緩沖存儲器中取出指令,放入指令寄存器,並對指令解碼,並執行指令
簡單的說,電腦所有的動作都是輸入指令然後通過CPU來執行
最後把結果呈現在我們眼前
B. 電子計算機的工作原理和執行程序的過程是怎樣的
計算機從一開機就在執行程序,除了執行程序,它什麼都不會干。執行程序的過程僅是以下4個過程的不斷重復。
①CPU按指定的地址從存儲器中取出指令。
②執行這條指令。
·每次執行指令一般是以下幾種操作之一或二:
·從指定存儲單元或I/O介面單元取出數據。
·將數據寫入指定的存儲單元或I/O介面單元。
·對數據進行算術或邏輯運算。
③計算下一條指令在存儲器中的地址(在大多數情況下,下一條指令地址緊接著上一條指令的地址)。
④返回到第1步開始下一個取指令、執行指令周期。
可以看出計算機的運行過程,就是執行程序的過程。CPU 不斷地從存儲器中取出指令執行,通過執行指令完成對存儲器中數據的加工和實現對I/O設備的操作。以上過程雖然很簡單,每條指令能乾的事情很少,但是計算機依靠高速地、大量地執行簡單的指令來實現復雜的功能。所以計算機發展一直以提高速度為目標。
C. CPU執行方式
CPU的工作分為 5 個階段:取指令階段、指令解碼階段、執行指令階段、訪存取數和結果寫回。
1、取指令(IF,instruction fetch),即將一條指令從主存儲器中取到指令寄存器的過程。
2、指令解碼階段(ID,instruction decode),取出指令後,指令解碼器按照預定的指令格式,對取回的指令進行拆分和解釋,識別區分出不同的指令類 別以及各種獲取操作數的方法。
3、執行指令階段(EX,execute),具體實現指令的功能。CPU的不同部分被連接起來,以執行所需的操作。
4、訪存取數階段(MEM,memory),根據指令需要訪問主存、讀取操作數,CPU得到操作數在主存中的地址,並從主存中讀取該操作數用於運算。
5、結果寫回階段(WB,write back),作為最後一個階段,結果寫回階段把執行指令階段的運行結果數據「寫回」到某種存儲形式。
(3)cpu執行指令需要從存儲器搜索嗎擴展閱讀:
CPU的根本任務就是執行指令,對計算機來說最終都是一串由「0」和「1」組成的序列。CPU從邏輯上可以劃分成3個模塊,分別是控制單元、運算單元和存儲單元,這三部分由CPU內部匯流排連接起來。
1、控制單元是整個CPU的指揮控制中心,由指令寄存器IR(Instruction Register)、指令解碼器ID(Instruction Decoder)和 操作控制器 OC(Operation Controller)等,對協調整個電腦有序工作極為重要。
2、運算單元,是運算器的核心。可以執行算術運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。
3、存儲單元,包括CPU片內緩存和寄存器組,是CPU中暫時存放數據的地方,裡面保存著那些等待處理的數據,或已經處理過的數據,CPU訪問寄存器所用的時間要比訪問內存的時間短。
一 CPU的原始工作模式
在了解CPU工作原理之前,我們先簡單談談CPU是如何生產出來的。CPU是在特別純凈的硅材料上製造的。一個CPU晶元包含上百萬個精巧的晶體管。人們在一塊指甲蓋大小的矽片上,用化學的方法蝕刻或光刻出晶體管。因此,從這個意義上說,CPU正是由晶體管組合而成的。簡單而言,晶體管就是微型電子開關,它們是構建CPU的基石,你可以把一個晶體管當作一個電燈開關,它們有個操作位,分別代表兩種狀態:ON(開)和OFF(關)。這一開一關就相當於晶體管的連通與斷開,而這兩種狀態正好與二進制中的基礎狀態「0」和「1」對應!這樣,計算機就具備了處理信息的能力。
但你不要以為,只有簡單的「0」和「1」兩種狀態的晶體管的原理很簡單,其實它們的發展是經過科學家們多年的辛苦研究得來的。在晶體管之前,計算機依靠速度緩慢、低效率的真空電子管和機械開關來處理信息。後來,科研人員把兩個晶體管放置到一個硅晶體中,這樣便創作出第一個集成電路,再後來才有了微處理器。
看到這里,你一定想知道,晶體管是如何利用「0」和「1」這兩種電子信號來執行指令和處理數據的呢?其實,所有電子設備都有自己的電路和開關,電子在電路中流動或斷開,完全由開關來控制,如果你將開關設置為OFF,電子將停止流動,如果你再將其設置為ON,電子又會繼續流動。晶體管的這種ON與OFF的切換只由電子信號控制,我們可以將晶體管稱之為二進制設備。這樣,晶體管的ON狀態用「1」來表示,而OFF狀態則用「0」來表示,就可以組成最簡單的二進制數。眾多晶體管產生的多個「1」與「0」的特殊次序和模式能代表不同的情況,將其定義為字母、數字、顏色和圖形。舉個例子,十進位中的1在二進位模式時也是「1」,2在二進位模式時是「10」,3是「11」,4是「100」,5是「101」,6是「110」等等,依此類推,這就組成了計算機工作採用的二進制語言和數據。成組的晶體管聯合起來可以存儲數值,也可以進行邏輯運算和數字運算。加上石英時鍾的控制,晶體管組就像一部復雜的機器那樣同步地執行它們的功能。
CPU的內部結構
現在我們已經大概知道CPU是負責些什麼事情,但是具體由哪些部件負責處理數據和 執行程序 呢?
1.算術邏輯單元ALU(Arithmetic Logic Unit)
ALU是運算器的核心。它是以全加器為基礎,輔之以 移位寄存器 及相應控制邏輯組合而成的電路,在控制信號的作用下可完成加、減、乘、除四則運算和各種邏輯運算。就像剛才提到的,這里就相當於工廠中的生產線,負責運算數據。
2.寄存器組 RS(Register Set或Registers)
RS實質上是CPU中暫時存放數據的地方,裡面保存著那些等待處理的數據,或已經處理過的數據,CPU訪問寄存器所用的時間要比訪問內存的時間短。採用寄存器,可以減少CPU訪問內存的次數,從而提高了CPU的工作速度。但因為受到晶元面積和集成度所限,寄存器組的容量不可能很大。寄存器組可分為專用寄存器和通用寄存器。專用寄存器的作用是固定的,分別寄存相應的數據。而通用寄存器用途廣泛並可由程序員規定其用途。通用寄存器的數目因微處理器而異
您在瀏覽本頁面時使用的計算機便通過微處理器來完成其工作。微處理器是所有標准計算機的心臟,無論該計算機是桌面計算機、伺服器還是筆記本電腦。您正在使用的微處理器可能是奔騰、K6、PowerPC、Sparc或者其他任何品牌和類型的微處理器,但是它們的作用大體相同,工作方式也基本類似。
3.控制單元(Control Unit)
正如工廠的物流分配部門,控制單元是整個CPU的指揮控制中心,由指令寄存器IR(Instruction Register)、指令解碼器ID(Instruction Decoder)和 操作控制器 0C(Operation Controller)三個部件組成,對協調整個電腦有序工作極為重要。它根據用戶預先編好的程序,依次從存儲器中取出各條指令,放在指令寄存器IR中,通過指令解碼(分析)確定應該進行什麼操作,然後通過 操作控制器 OC,按確定的時序,向相應的部件發出微操作控制信號。操作控制器OC中主要包括節拍 脈沖發生器 、控制矩陣、 時鍾脈沖 發生器、 復位電路 和啟停電路等控制邏輯。
4.匯流排(Bus)
就像工廠中各部位之間的聯系渠道,匯流排實際上是一組導線,是各種公共信號線的集合,用於作為電腦中所有各組成部分傳輸信息共同使用的「公路」。直接和CPU相連的匯流排可稱為局部匯流排。其中包括: 數據匯流排DB(Data Bus)、地址匯流排AB(Address Bus) 、控制匯流排CB(Control Bus)。其中,數據匯流排用來傳輸數據信息;地址匯流排用於傳送CPU發出的地址信息;控制匯流排用來傳送控制信號、時序信號和狀態信息等。
CPU的工作流程
由晶體管組成的CPU是作為處理數據和 執行程序 的核心,其英文全稱是:Central Processing Unit,即中央處理器。首先,CPU的內部結構可以分為控制單元,邏輯運算單元和存儲單元(包括內部匯流排及緩沖器)三大部分。CPU的工作原理就像一個工廠對產品的加工過程:進入工廠的原料(程序指令),經過物資分配部門(控制單元)的調度分配,被送往生產線(邏輯運算單元),生產出成品(處理後的數據)後,再存儲在倉庫(存儲單元)中,最後等著拿到市場上去賣(交由應用程序使用)。在這個過程中,我們注意到從控制單元開始,CPU就開始了正式的工作,中間的過程是通過邏輯運算單元來進行運算處理,交到存儲單元代表工作的結束。
數據與指令在CPU中的運行
剛才已經為大家介紹了CPU的部件及基本原理情況,現在,我們來看看數據是怎樣在CPU中運行的。我們知道,數據從輸入設備流經內存,等待CPU的處理,這些將要處理的信息是按位元組存儲的,也就是以8位二進制數或8比特為1個單元存儲,這些信息可以是數據或指令。數據可以是二進製表示的字元、數字或顏色等等。而指令告訴CPU對數據執行哪些操作,比如完成加法、減法或移位運算。
我們假設在內存中的數據是最簡單的原始數據。首先,指令指針(Instruction Pointer)會通知CPU,將要執行的指令放置在內存中的存儲位置。因為內存中的每個存儲單元都有編號(稱為地址),可以根據這些地址把數據取出,通過地址匯流排送到控制單元中,指令解碼器從指令寄存器IR中拿來指令,翻譯成CPU可以執行的形式,然後決定完成該指令需要哪些必要的操作,它將告訴算術邏輯單元(ALU)什麼時候計算,告訴指令讀取器什麼時候獲取數值,告訴指令解碼器什麼時候翻譯指令等等。
假如數據被送往算術邏輯單元,數據將會執行指令中規定的算術運算和其他各種運算。當數據處理完畢後,將回到寄存器中,通過不同的指令將數據繼續運行或者通過DB匯流排送到數據緩存器中。
基本上,CPU就是這樣去執行讀出數據、處理數據和往內存寫數據3項基本工作。但在通常情況下,一條指令可以包含按明確順序執行的許多操作,CPU的工作就是執行這些指令,完成一條指令後,CPU的控制單元又將告訴指令讀取器從內存中讀取下一條指令來執行。這個過程不斷快速地重復,快速地執行一條又一條指令,產生你在顯示器上所看到的結果。我們很容易想到,在處理這么多指令和數據的同時,由於數據轉移時差和CPU處理時差,肯定會出現混亂處理的情況。為了保證每個操作準時發生,CPU需要一個時鍾,時鍾控制著CPU所執行的每一個動作。時鍾就像一個節拍器,它不停地發出脈沖,決定CPU的步調和處理時間,這就是我們所熟悉的CPU的標稱速度,也稱為主頻。主頻數值越高,表明CPU的工作速度越快。
如何提高CPU工作效率
既然CPU的主要工作是執行指令和處理數據,那麼工作效率將成為CPU的最主要內容,因此,各CPU廠商也盡力使CPU處理數據的速度更快。
根據CPU的內部運算結構,一些製造廠商在CPU內增加了另一個算術邏輯單元(ALU),或者是另外再設置一個處理非常 大和 非常小的數據浮點運算單元(Floating Point Unit,FPU),這樣就大大加快了數據運算的速度。
而在執行效率方面,一些廠商通過流水線方式或以幾乎並行工作的方式執行指令的方法來提高指令的執行速度。剛才我們提到,指令的執行需要許多獨立的操作,諸如取指令和解碼等。最初CPU在執行下一條指令之前必須全部執行完上一條指令,而現在則由分布式的電路各自執行操作。也就是說,當這部分的電路完成了一件工作後,第二件工作立即占據了該電路,這樣就大大增加了執行方面的效率。
另外,為了讓指令與指令之間的連接更加准確,現在的CPU通常會採用多種預測方式來控制指令更高效率地執行。
D. CPU當前正在執行的指令與數據必須都存放在內存儲器中嗎
對!內存有堆內存,和棧內存。CPU可以直接訪問內存數據,硬碟數據必須導到內存才能被使用!CPU-->內存-->硬碟
E. cpu執行指令需要從存儲器讀取數據時數據搜索的順序是么
它是按堆棧的順序順序執行的,至於棧中的順序是按優先順序排 cache叫做高速緩沖存儲器,是集成在CPU中的,存取速度最快,其次是內存,也就是主板上插的那個條條,速度最慢的是外存,也就是硬碟
F. CPU所執行的指令和處理的數據
錯誤的原因:CPU所執行的指令和處理的數據都是直接從磁碟或光碟中取出,處理結果也直接存入磁碟。
CPU和IO設備的速度不匹配。CPU不會直接從磁碟或CD-ROM執行指令,為了提高CPU效率,也不可能將數據直接保存到磁碟。
當計算機工作時,由中央處理器執行的程序和被處理的數據直接從主存儲器而不是磁碟或CD-ROM中獲得。
讀取數據的順序是:CPU——CPU緩存——內存——磁碟緩存——磁碟(CD-ROM)。
(6)cpu執行指令需要從存儲器搜索嗎擴展閱讀:
CPU的結構大致可分為操作邏輯單元、寄存器單元和控制單元。所謂運算邏輯單元,主要是能進行相關的邏輯運算,如:能執行移位運算和邏輯運算,除了還能執行定點或浮點運算和地址運算和轉換命令外,是一種多功能的運算單元。
寄存器是用來臨時存儲指令、數據和地址的。控制單元主要用於對指令進行分析並發出相應的控制信號。而計算機的存儲器又可分為隨機存取存儲器(RAM)和只讀存儲器(ROM)。
G. 電腦CPU工作原理的知識簡介
CPU從存儲器或高速緩沖存儲器中取出指令,放入指令寄存器,並對指令解碼。它把指令分解成一系列的微操作,然後發出各種控制命令,執行微操作系列,從而完成一條指令的執行。指令是計算機規定執行操作的類型和操作數的基本命令。指令是由一個位元組或者多個位元組組成,其中包括操作碼欄位、一個或多個有關操作數地址的欄位以及一些表徵機器狀態的狀態字以及特徵碼。有的指令中也直接包含操作數本身。
提取
第一階段,提取,從存儲器或高速緩沖存儲器中檢索指令(為數值或一系列數值)。由程序計數器(Program Counter)指定存儲器的位置,程序計數器保存供識別目前程序位置的數值。換言之,程序計數器記錄了CPU在目前程序里的蹤跡。提取指令之後,程序計數器根據指令長度增加存儲器單元。指令的提取必須常常從相對較慢的存儲器尋找,因此導致CPU等候指令的送入。這個問題主要被論及在現代處理器的快取和管線化架構。
解碼
CPU根據存儲器提取到的指令來決定其執行行為。在解碼階段,指令被拆解為有意義的`片斷。根據CPU的指令集架構(ISA)定義將數值解譯為指令。一部分的指令數值為運算碼(Opcode),其指示要進行哪些運算。其它的數值通常供給指令必要的信息,諸如一個加法(Addition)運算的運算目標。這樣的運算目標也許提供一個常數值(即立即值),或是一個空間的定址值:暫存器或存儲器位址,以定址模式決定。在舊的設計中,CPU里的指令解碼部分是無法改變的硬體設備。不過在眾多抽象且復雜的CPU和指令集架構中,一個微程序時常用來幫助轉換指令為各種形態的訊號。這些微程序在已成品的CPU中往往可以重寫,方便變更解碼指令。
在提取和解碼階段之後,接著進入執行階段。該階段中,連接到各種能夠進行所需運算的CPU部件。例如,要求一個加法運算,算數邏輯單元(ALU,Arithmetic Logic Unit)將會連接到一組輸入和一組輸出。輸入提供了要相加的數值,而輸出將含有總和的結果。ALU內含電路系統,易於輸出端完成簡單的普通運算和邏輯運算(比如加法和位元運算)。如果加法運算產生一個對該CPU處理而言過大的結果,在標志暫存器里,運算溢出(Arithmetic Overflow)標志可能會被設置。
最終階段,寫回,以一定格式將執行階段的結果簡單的寫回。運算結果經常被寫進CPU內部的暫存器,以供隨後指令快速存取。在其它案例中,運算結果可能寫進速度較慢,但容量較大且較便宜的主記憶體中。某些類型的指令會操作程序計數器,而不直接產生結果。這些一般稱作「跳轉」(Jumps),並在程式中帶來循環行為、條件性執行(透過條件跳轉)和函式。許多指令也會改變標志暫存器的狀態位元。這些標志可用來影響程式行為,緣由於它們時常顯出各種運算結果。例如,以一個「比較」指令判斷兩個值的大小,根據比較結果在標志暫存器上設置一個數值。這個標志可藉由隨後的跳轉指令來決定程式動向。在執行指令並寫回結果之後,程序計數器的值會遞增,反覆整個過程,下一個指令周期正常的提取下一個順序指令。如果完成的是跳轉指令,程序計數器將會修改成跳轉到的指令位址,且程序繼續正常執行。許多復雜的CPU可以一次提取多個指令、解碼,並且同時執行。這個部分一般涉及「經典RISC管線」,那些實際上是在眾多使用簡單CPU的電子裝置中快速普及(常稱為微控制(Microcontrollers))。
CPU包括運算邏輯部件、寄存器部件和控制部件等。
運算邏輯部件
運算邏輯部件,可以執行定點或浮點的算術運算操作、移位操作以及邏輯操作,也可執行地址的運算和轉換。
寄存器部件
寄存器部件,包括通用寄存器、專用寄存器和控制寄存器。通用寄存器又可分定點數和浮點數兩類,它們用來保存指令中的寄存器操作數和操作結果。通用寄存器是中央處理器的重要組成部分,大多數指令都要訪問到通用寄存器。通用寄存器的寬度決定計算機內部的數據通路寬度,其埠數目往往可影響內部操作的並行性。專用寄存器是為了執行一些特殊操作所需用的寄存器。控制寄存器通常用來指示機器執行的狀態,或者保持某些指針,有處理狀態寄存器、地址轉換目錄的基地址寄存器、特權狀態寄存器、條件碼寄存器、處理異常事故寄存器以及檢錯寄存器等。有的時候,中央處理器中還有一些緩存,用來暫時存放一些數據指令,緩存越大,說明CPU的運算速度越快,目前市場上的中高端中央處理器都有2M左右的二級緩存,高端中央處理器有4M左右的二級緩存。
H. CPU基礎知識大全詳解
CPU基礎 知識大全 詳解有哪些? CPU在電腦中是最核心關鍵的硬體之一,相當於人的大腦,決定了電腦運算能力,因此CPU的選擇至關重要。下面就讓我帶你去看看CPU基礎知識大全詳解,希望對你有所幫助吧!
程序員必須了解的CPU知識 - 科普篇
1導讀
對於一名程序員來說,無論你使用的是什麼語言,代碼最終都會交給CPU來執行。所以了解CPU相關的知識一方面屬於程序員的內功,另一方面也可以幫助你在日常編寫代碼時寫出更加高效的代碼
本文不打算對CPU進行深入探究,相反是以簡單的語言來幫助大家了解CPU的工作原理以及不得不提到的CPU緩存相關知識,其中晦澀的內容我會通過配圖來幫助大家理解,最後會以幾個例子來幫助大家更直觀的感受到CPU緩存帶來的性能影響
2CPU基礎知識
CPU即Central Processing Unit(中央處理器),是我們的代碼打交道最多的硬體之一,要想讓一個CPU工作,就必須給它提供指令和數據,而這里的指令和數據一般就放在我們的內存當中。其中指令就是由我們平常編寫的代碼翻譯而來,數據也是我們代碼中需要用到的數據(例如一個int值、一串字元串等等)
以C語言為例,從我們開始編寫到運行的生命周期可以粗略的用下圖表示:
大致分為以下幾個步驟
我們日常中使用編輯器或者IDE敲入代碼
代碼編寫完成後使用編譯和鏈接工具生成可以被執行的程序,也就是機器語言(指令的集合)
當程序被運行時,整個程序(包括指令和數據)會被完整的載入到內存當中
CPU不停的向內存讀取該程序的指令執行直到程序結束
通過上述第4步我們知道,CPU自身是沒有保存我們的程序的,需要不停的向內存讀取
那麼有個問題是CPU是如何向內存讀取的呢?
這里其實存在一個「匯流排」的概念,即CPU會通過地址匯流排、控制匯流排、數據匯流排來與我們的內存進行交互。其中地址匯流排的作用是定址,即CPU告訴內存需要哪一個內存地址上的數據;控制匯流排的作用是對外部組件的控制,例如CPU希望從內存讀取數據則會在控制匯流排上發一個「讀信號」,如果希望往內存中寫一個數據則會發一個「寫信號」;而數據匯流排的作用顧名思義就是用來傳輸數據本身的了
例如CPU需要希望從內存中讀一條數據,那麼整個過程為:
到這里我們已經知道了CPU在執行我們程序的過程中會不斷的與內存交互,讀取需要的指令和數據或者寫入相關的數據。這個過程是非常非常快的,一般CPU與內存交互一次需要200個時鍾周期左右,而現代的處理器單個時鍾周期一般都短於1納秒(1秒 = 十億納秒)
但我們的前輩們仍然對這個速度不滿足,所以又對CPU設計了一套緩存系統來加速對內存中數據的讀取
3CPU緩存
現代CPU通常設計三級緩存(L1、L2、L3),其中L1、L2緩存是每個CPU核心獨享的,L3緩存是所有CPU核心共享的,而L1緩存又分為數據緩存和指令緩存
我們的數據就從內存先到L3緩存中,再到L2緩存中,再到L1緩存中,最後再到CPU寄存器中
按照大小來看,通常L1 < L2 < L3 < 內存 < 磁碟,如果你手邊有一台Linu__機器的話,可以通過下面的命令查看CPU各級緩存的大小
以我手上這台伺服器為例,L1指令緩存大小為32K、數據緩存大小為32K,L2緩存大小為1MB,L3緩存大小為35.75MB
按照速度來看,通常L1 > L2 > L3 > 內存 > 磁碟,以時鍾周期為計量單位
L1緩存:約 4 個CPU時鍾周期
L2緩存:約 10 個CPU時鍾周期
L3緩存:約 40 個CPU時鍾周期
內存:約 200 個CPU時鍾周期
也就意味著如果能命中緩存,我們程序的執行速度至少提升5倍左右,如果能命中L1緩存則提升50倍左右,這已經屬於相當大的性能提升了
有了緩存系統後,CPU就不必要每條指令或數據都讀一次了,可以一次性讀取若干條指令或數據然後放到緩存里供以後查詢,因為根據局部性原理,CPU訪問內存時,無論是讀取指令還是數據,所訪問的內存單元都趨於聚集在一個較小的連續區域中,所以一次性讀取一塊連續的內存有利於後續的緩存命中
現實中,CPU通常情況下每次的讀取內存時都會一次性讀取內存中連續的64個位元組,這個連續的64位元組術語就叫做Cache Line(緩存行),所以每一級CPU緩存就像下面這樣
如果你手邊有一台Linu__機器的話,可以通過下面的命令查看你的機器使用的CPU的Cache Line大小是多少
對於我的伺服器來說,L1緩存就有 32KB / 64B = 512 個Cache Line
到這里,我們已經知道了CPU緩存的工作原理和載入方式,這里實際上還遺留了兩個話題沒有講,一個是如何組織每一級的 Cache Line(例如 L1 的 512 個Cache Line)來提升訪問的命中率;另一個更加復雜一點,在現代CPU都是多核的場景下如何保證數據的一致性,因為每個核都有自己的L1和L2緩存,那麼如果核心1修改的時候只修改了緩存的數據而沒有修改內存中的數據,其他核心讀到的就是舊數據了,如何解決這一問題?
由於本篇 文章 只是期望對CPU知識進行一個科普,不希望對於小白來說一次性接觸大量的新內容,所以這兩個問題我准備在後面的另外兩篇再進行更細致的討論
4性能對比
下面以幾個實際的例子來加深大家對Cache Line如何影響程序性能的理解
示例一
我們假設有一個5000萬長度的int數組,接著把這個數組的其中一些元素乘以2,考慮下面這兩份代碼
直覺上代碼一比代碼二少循環了4倍,並且也少乘2了4倍,理論上代碼一比代碼二快4倍左右才合理
但在我的伺服器上運行的結果是代碼一平均花費90毫秒,代碼二平均花費93毫秒,性能幾乎是差不多的,讀者可以自行思考一下原因,再點擊下方空白處查看解析
點擊下方空白區域查看解析
▼
解析
這里最主要的原因還是Cache Line,雖然代碼一需要執行的指令確實比代碼二要少4倍,但由於CPU一次會把連續的64個位元組都讀入緩存,而讀寫緩存的速度又特別快(還記得嗎?L1的讀取速度只有約4個時鍾周期,是內存的50倍),以至於我們很難察覺到這4倍指令的差距
示例二
假設我們需要遍歷一個二維數組,考慮下面這兩種遍歷 方法 :
由於數組長度是一模一樣的,直覺上我們期望的是兩份代碼運行時間相差無幾。但在我的伺服器上代碼一運行需要23毫秒,代碼二運行需要51毫秒,讀者可以自行思考一下原因,再點擊下方空白處查看解析
點擊下方空白區域查看解析
▼
解析
這里最主要的原因依然是Cache Line,由於C語言中二維數組的內存是連續的,所以我們按行訪問的時候訪問的一直都是連續的內存,而Cache Line也是連續的64個位元組,所以按行訪問對Cache Line更友好,更容易命中緩存
而按列訪問的話每次訪問的內存不是連續的,每次的跨度都是256__sizeof(int)也就是1KB,更容易出現緩存Miss
示例三
假設我們有一個數組,我們希望計算所有大於100的元素的和,考慮下面兩份代碼
其中代碼一是隨機生成了個長度為1000W的數組,然後統計大於100的所有數字的和;代碼二也是隨機生成了個長度為1000W的數組,但是是先排完序,再統計大於100的所有數字的和。並且可以看到,兩份代碼都是只計算了統計sum的那段代碼的消耗時間,所以兩份代碼都不考慮隨機生成數組和排序花費的時間
理論上來講兩份代碼花費時間應當是相差無幾的,但實際上在我的機器上跑出來第一份代碼輸出的是46毫秒,第二份代碼輸出的是23毫秒
讀者可以自行思考一下原因,再點擊下方空白處查看解析,提示:第二份代碼中在統計sum之前數組是有序的
電腦CPU如何選購? 台式機 CPU知識掃盲和選購建議
CPU有幾個重要的參數:架構、主頻、核心、線程、緩存、介面。
架構:
有句老話叫「拋開架構看核心主頻都是耍流氓」,那什麼是架構?假如我們把架構想像成交通工具,那麼老的架構就是火車,而新的架構就是高鐵,所以架構的提升直接影響CPU的性能。這也就是為什麼老式的CPU雖然也有超高的主頻但性能還是被現在的i3碾壓的原因了。
電腦CPU如何選購?台式機CPU知識掃盲和選購建議
主頻:
我們常在CPU的信息里看到 某某CPU主頻3.6GHz,這里的主頻其實是CPU內核工作的時鍾頻率,並不直接等於CPU的運算速度,但是高的主頻對於CPU的運算速度卻至關重要。
核心:
核心又稱內核,是CPU用來完成所有計算、接受/存儲命令、處理數據等任務的裝置。我們可以簡單的把核心理解為人的手,單核就是一隻手、雙核就是兩只手、四核就是四隻手。
核心數並不是越多越好的,要看使用場景,比如在打字的時候,兩只手就比一隻手效率高,但是在操作滑鼠的時候,使用兩只手只會起到適得其反的效果。至於什麼場景需要使用多少核心的CPU在下面會講到。
電腦CPU如何選購?台式機CPU知識掃盲和選購建議
線程:
我們通常會看到「四核四線程」 和「四核八線程」這兩種說法,我們可以簡單的把工廠里的流水線比作線程,把工人比作核心,早先由於工人工作技能不高,一個工人只能處理一條流水線的任務,我們可以把這個稱為單核單線程,但是後來工人技術熟練了,覺得操作一條流水線很無聊,不能體現自己的價值,於是就給又分配一條流水線,讓這個工人同時處理兩條流水線的任務,我們可以把這個稱為「單核雙線程」。
緩存:
緩存也是CPU里的一項非常重要的參數,由於CPU的運算速度比內存條的讀寫速度要快很多,這會讓CPU花費很長的時間等待數據的到來或是把數據寫入內存條,這個時候CPU內的高速緩存可以作為臨時的存儲介質來緩解CPU的運算速度與內存讀寫速度不匹配的矛盾,所以緩存越大越好。
電腦CPU如何選購?台式機CPU知識掃盲和選購建議
介面:
CPU需要通過介面安裝在主板上才能工作,而目前CPU的介面都是針腳式介面,AMD和英特爾的CPU在介面上就有很大的差別,所以需要使用適配介面的主板才能正常工作。目前英特爾主流的介面類型為LGA-1151介面(6、7、8代i3 i5 i7都是這種介面);AMD平台主流的介面類型有AM4介面(銳龍系列)和FM2+介面(速龍系列、APU系列)。
PS:英特爾最新的酷睿8代CPU雖然也是LGA-1151介面,但不適配老式的LGA-1151介面主板的平台,需要另購主板
說完了這些重要的參數,相信你也對CPU有了一個大概的了解,我們再談談不同場景對CPU的選擇。
計算機系統基礎:CPU相關知識筆記
1、什麼是CPU
計算機的基本硬體系統由運算器、控制器、存儲器、輸入設備、輸出設備5大部件組成。
運算器和控制器等部件被集成在一起稱為中央處理單元(Central Processing Unit,CPU).CPU
是硬體系統的核心。
2、CPU的用途
CPU主要負責獲取程序指令、對指令進行解碼並加以執行。
CPU的功能如下:
3、CPU的組成
CPU主要由運算器、控制器、寄存器和內部匯流排等部件組成。
3.1 運算器
運算器包括算術邏輯單元(ALU)、累加器、緩沖寄存器、狀態條件寄存器等。它的主要工作是完成所規定的的各種算術和邏輯運算。
算術邏輯單元(ALU):ALU的重要組成部件,負責處理數據,實現算術和邏輯運算。
累加器(AC):當執行算術或邏輯運算時,為ALU提供一個工作區。
數據緩沖器(DR):作為CPU和內存、外部設備之間數據傳送的中轉站、操作速度的緩沖;
在單累加器結構的運算器中,DR還可以作為操作數寄存器。
狀態寄存器(PSW):保存算術指令和邏輯指令運行或測試的結果建立的的各種條件碼內容,分為狀態標志和控制標志。
3.2 控制器
用於控制這個CPU的工作,不僅要保證程序的正確執行,還要能處理異常事件。
控制器主要包括指令控制邏輯、時序控制邏輯、匯流排控制邏輯、中斷控制邏輯。
3.2.1 指令控制
指令寄存器(IR):當執行一條指令時,需要先把它從內存存儲器取到緩沖寄存器中,再送入IR中暫存,指令解碼器會根據IR的內容產生各種微操作命令,控制其他部件協調工作,完成指令的功能。
程序計數器(PC):PC具有寄存和計數兩種功能。又稱為指令計數器。
地址寄存器(AR):用來保存當前CPU所訪問的內存單元地址。
指令解碼器(ID):包含指令操作碼和地址碼兩部分,為了能執行任何給定的指令必須對操作碼進行分析,以便識別要進行的操作。
3.2.2 時序控制
時序控制要為每條指令按時間順序提供應有的控制信號。
3.2.3 匯流排控制
為多個功能部件提供服務的信息通路的控制電路。
3.2.4 中斷控制
用於控制各種中斷請求,並根據優先順序排隊,逐個交給CPU處理。
3.3 寄存器組
分為專用寄存器、通用寄存器。運算器和控制器中的寄存器是專用寄存器,作用是固定的。
通用寄存器用途廣泛由程序員規定其用途。
4、什麼是多核CPU
內核:CPU的核心稱為內核,是CPU的最重要組成部分。CPU的所有計算、接收/存儲命令、處理數據都是由核心執行。
多核:在一個單晶元上集成兩個或者更多個處理器內核,並且每個內核都有自己的邏輯單元、控制單元、中端處理器、運算單元、一級Cache、二級Cache共享或獨有。
多核CPU優點:可滿足用戶同時進行多任務處理等要求。
CPU基礎知識大全詳解相關文章:
★ CPU的基礎知識大全有哪些
★ CPU基礎知識拓展大全
★ 電腦主板應用知識大全
I. cup所有的計算、存儲、處理數據操作都由什麼執行
CPU從存儲器或高速緩沖存儲器中取出指令,放入指令寄存器,並對指令解碼。這是一個非常復雜的過程。它把指令分解成一系列的微操作,然後發出各種控制命令,執行微操作系列,從而完成一條指令的執行。指令是計算機規定執行操作的類型和操作數的基本命令。指令是由一個位元組或者多個位元組組成,其中包括操作碼欄位、一個或多個有關操作數地址的欄位以及一些表徵機器狀態的狀態字以及特徵碼。有的指令中也直接包含操作數本身。
提取
第一階段,提取,從存儲器或高速緩沖存儲器中檢索指令(為數值或一系列數值)。由程序計數器(program counter)指定存儲器的位置。(程序計數器保存供識別程序位置的數值。換言之,程序計數器記錄了cpu在程序里的蹤跡。)
解碼
cpu根據存儲器提取到的指令來決定其執行行為。在解碼階段,指令被拆解為有意義的片段。根據cpu的指令集架構(isa)定義將數值解譯為指令。一部分的指令數值為運算碼(opcode),其指示要進行哪些運算。其它的數值通常供給指令必要的信息,諸如一個加法(addition)運算的運算目標。
執行
在提取和解碼階段之後,緊接著進入執行階段。該階段中,連接到各種能夠進行所需運算的cpu部件。
例如,要求一個加法運算,算術邏輯單元(alu,arithmetic logic
unit)將會連接到一組輸入和一組輸出。輸入提供了要相加的數值,而輸出將含有總和的結果。alu內含電路系統,易於輸出端完成簡單的普通運算和邏輯運算(比如加法和位元運算)。如果加法運算產生一個對該cpu處理而言過大的結果,在標志暫存器里可能會設置運算溢出(arithmetic
overflow)標志。
寫回
最終階段,寫回,以一定格式將執行階段的結果簡單的寫回。運算結果經常被寫進cpu內部的暫存器,以供隨後指令快速存取。在其它案例中,運算結果可能寫進速度較慢,但容量較大且較便宜的主記憶體中。某些類型的指令會操作程序計數器,而不直接產生結果。這些一般稱作「跳轉」(jumps),並在程式中帶來循環行為、條件性執行(透過條件跳轉)和函式。許多指令會改變標志暫存器的狀態位元。這些標志可用來影響程式行為,緣由於它們時常顯出各種運算結果。例如,以一個「比較」指令判斷兩個值大小,根據比較結果在標志暫存器上設置一個數值。這個標志可藉由隨後跳轉指令來決定程式動向。在執行指令並寫回結果之後,程序計數器值會遞增,反覆整個過程,下一個指令周期正常的提取下一個順序指令。