㈠ 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基礎知識拓展大全
★ 電腦主板應用知識大全
㈡ 處理器的架構、型號、主頻、核心數線程數之類的與性能到底是什麼關系
(一)cpu的參數重要性先後順序如下:
(1)架構或核心代號
首要參數是cpu的核心代號,或者說「架構」,先進的架構可以達成更高的運算效能。某些較新上市的但主頻低、核心少的cpu,可能比某些老舊的主頻更高的cpu性能強。
不要盲目的以為主頻高、核心多的cpu性能就強,這是目前很多新手的誤區,討論cpu性能的基礎是架構,其次才是核心數量和主板。
(2)核心數量和主頻
在架構的先進性差別不大或者完全相同的情況下,才可以直接對比核心數量和頻率,這時核心越多、頻率越高的cpu,性能越強。而在架構落差過大的情況下,比較核心數和頻率高低是毫無意義的。某些架構老舊落後的cpu,核心再多、頻率再高,最終性能仍然不堪一擊。
(二)cpu性能判定的實用方法
從前面的說明可知,cpu的最終性能既不能只看架構,也不能只論核心多、主頻高,而是看它們綜合影響後的結果,要直觀反映cpu的最終性能,可以通過以下手段:
(1)參考《cpu天梯圖》
天梯圖里越靠上的cpu整體性能越強。這個方法是粗略的、直觀的了解各種型號的cpu性能高低的方法,適合新手或者不打算深入了解硬體的朋友。可以直接在網路圖片搜索「cpu天梯圖」看到相關天梯圖的圖片。
(2)軟體跑分測評
直接看cpu天梯圖的方法雖然簡單直觀,但是天梯圖里相鄰cpu在不同應用中可能表現出互有勝負的情況,尤其是英特爾和AMD兩大陣營交叉對比時。常用的cpu參數查看和跑分測評的軟體有:CPU-Z、Fritz Chess Benchmark(國際象棋)、CineBench、等。通常來說,跑分越高表示性能越強,用時越短表示性能越強。
㈢ cpu的頻率,核心數,線程,緩存分別做什麼發揮作
cpu頻率決定了cpu相同架構下單核心的處理速度,緩存決定了在高壓下(高端cpu佔用率在85%以上時)的cpu速度,cpu緩存速度比內存快的多了。
核心數一般指物理核心數,4核cpu一般就是4顆同時工作的物理核心,intel出過膠水四核(就是一般只有兩個核心在工作)。
線程不等於核心,intel中高端cpu一顆物理核心通過超線程技術可以模擬出兩個線程,amd只能一顆核心對應一個線程,線程主要是軟體使用,多線程的好處是可以在同一時間干更多的事(需軟體支持)或者開更多的程序而感覺不卡。
㈣ cpu的頻率,核心數,線程,緩存分別做什麼發揮作用。
頻率就是一個核心的工作的快慢,每秒每刻能夠完成的計算量,通常來說是越快越好的,當然了只有頻率快也是沒有用的此外頻率越高電壓也必須越高,當然CPU也就越費電。
核心數就是物理上的核心的數量(物理的意思就是實際存在的),因為IC廠商發現與其不斷地提升頻率,反而不如去擴大整個晶元的面積,也就是擴大晶體管數量,同時讓晶體管都工作得慢一些,但是這樣子卻能夠獲得更好的收益,從NV的費米到開普勒就是這個例子,降低頻率提升過規模。每個核心是相對獨立的,並行地來處理任務(當然軟體要支持)
線程則是在邏輯層面上的,通過各種方法來最終決定輸出的時候一個核心的工作能力如何分配,通常在一些I7和個別I3上可以看到超線程,就是把一個核心在輸出的時候劃分為兩個,可以最大化利用率,把一些不那麼復雜的但是同樣需要佔用的CPU資源的程序給用一個核心就解決掉,這就是超線程的作用。
緩存就是一個內置的速度極快的內存條,按照INTEL來說一般分為L1 L2 L3甚至是L4(ibm伺服器)
速度從大到小,L1一般幾十KB,L2則幾MB左右,L3一般就可以有5MB-30MB不等。但是不要以為小,內存的速度是很有限的,如果把一個很簡單的東西存過去再取回來明顯就很浪費,所以內置的告訴緩存就可以在其中起到快速轉存的作用,同時一些必須立即處理的數據也會被放進去來提高速度。