CPU基本概念

1 概述

CPU是Central Processing Unit的簡稱,中泱處理器。它主要用來 執行儲存於程序裏的一系列指令。

2 組成

計算機有5大基本組成部分:運算器,控制器,存儲器,輸入和輸出。

從邏輯上來看,CPU可以劃分爲3個模塊:控制單元(含 指令計數器 和 指令寄存器 )、運算單元 和 存儲單元(存儲寄存器)。這三個部分由CPU總線連接起來,最終組成了CPU。CPU總線一般指CPU與芯片組之間的公用連接線,又叫前端總線(FSB)。

3 運行原理

  • 控制單元在時序脈衝的作用下,將 指令計數器 裏所指向的 指令地址 (這個地址存放在內存代碼段裏) 送到 地址總線 上去;
  • CPU將這個地址裏的指令 讀到 指令寄存器 進行譯碼;
  • 對於執行指令過程中所需要用到的數據,會將 數據地址(這個地址存放在內存數據段裏)也送到 地址總線;
  • CPU把數據讀到CPU的 內部存儲寄存器 暫存起來;
  • 命令運算單元 對數據進行處理加工;

簡單來說,就是 讀指令、譯碼、拿數據、暫存數據、運算,然後週而復始,一直這樣執行下去。

4 基本概念

4.1 物理CPU

就是在主板上的CPU,其數量對應着CPU插槽數量。在早期的計算機系統中只有一個CPU。在Linux中可以通過以下指令來查看物理CPU數量:

cat /proc/cpuinfo | grep 'physical id'| sort| uniq |wc -l

4.2 CPU赫心

CPU的執行單元/執行引擎稱之爲赫心(Core,簡稱 赫 ),赫根據存儲在內存中軟件的指引,處理指令和數據。這些指令可能是計算、輸出傳輸、分支指令等。在早期的計算機中,一個CPU中只有一個赫。可通過以下命令獲取計算機上的赫數:

# linux
cat /proc/cpuinfo | grep "cpu cores" | wc -l
# mac
sysctl -n hw.ncpu

4.3 CPU緩存

我們知道,CPU比內存的讀寫速度更快,而CPU與內存交互,進行數據讀寫。在這種情況下,爲了彌補 CPU 與內存之間的性能差異,就在 CPU 內部引入了 CPU Cache,也稱高速緩存。CPU緩存是位於CPU和內存之間的臨時數據交換器,它的容量比內存小的多但是交換速度卻比內存要快得多,一般直接跟CPU芯片集成或位於主板總線互連的獨立芯片上。

CPU緩存用的是 SRAM(Static Random-Access Memory)的芯片,也叫靜態隨機存儲器。其只要有電,數據就可以保持存在,而一旦斷電,數據就會丟失。CPU Cache 通常分爲大小不等的三級緩存,分別是 L1 CacheL2 Cache 和 L3 Cache。

緩存 CPU訪問所需時間 容量 備註
L1 2-4個時鐘週期 最小(32KB) 每個CPU赫心都有,通常分爲指令緩存和數據緩存。
L2 10-20個時鐘週期 中間(256KB) 每個CPU赫心都有
L3 20-60個時鐘週期 最大(3MB) 多個CPU赫心共享

緩存讀取數據過程。就像數據庫緩存一樣,首先在最快的緩存中找數據,如果緩存沒有命中(Cache miss) 則往下一級找,直到三級緩存都找不到時,最後會去內存找數據。

4.4 邏輯CPU

在歷史上,爲了提升CPU的性能,引入超標量、亂序運行、大量的寄存器及寄存器重命名、多指令解碼器、預測運行、高速緩存等特性,這些特性從而讓CPU擁有大量資源,並且CPU還能智能的預測執行指令。這就導致實際上CPU在大多數時間上,其資源是被閒置的,浪費是可恥的,爲了進一步壓榨CPU的性能,工程師發現,完全可以通過複製一些CPU內部組件,例如寄存器或一級緩存,來運行第二個線程,讓這些閒置資源運行在另一個線程上。雖然只有一個物理CPU,但操作系統被提供了兩個"邏輯CPU" ,而不是單個CPU,這樣就成功使得操作系統被"欺騙"了。

一般情況下,邏輯CPU = 物理CPU個數 * 每顆赫數,如果我們的電腦CPU支持超線程技術且開啓的話,邏輯CPU的個數是赫數的2倍,邏輯CPU = 物理CPU個數 * 每顆赫數 * 2,超線程技術可以使得 處理器中的1 顆內赫在操作系統中,如同2 顆內赫那樣發揮作用。

4.4 多處理器 Multi-Processor

20世紀七、八十年代,由於單個處理器的性能滿足不了應用的需求,開始出現多處理器系統。20世紀八、九十年代,很多高檔工作站都有2~4個處理器,用於科學計算的高性能計算機處理器個數更多。國際上對計算機性能有一個TOP500排名,每6個月列出當時世界上最快的前500臺計算機,這些計算機都有成千上萬個處理器。

 

將兩個或多個獨立處理器分別封裝在多個IC中的方案稱爲多處理器。多處理器分爲兩種:一種被稱爲共享內存多處理器,另一種被稱爲分佈式內存處理器,每個CPU都有自己的內存。它可以提升性能,同時也增加了冗餘度。

 

4.4 多赫處理器 Multi-Core Processor

從20世紀90年代後期開始,隨着半導體工藝的發展,單芯片上晶體管數目大幅增多,多赫處理器得到了很好的發展。學術界最早的多赫處理器項目Hydra是由美國斯坦福大學於1994年研究的。在工業界,IBM公司於2001年推出IBM Power4雙赫處理器;AMD於2005年推出第一款X86架構雙赫處理器;Intel於2006年推出第一款酷睿雙赫處理器;國內於2009年推出了第一款四赫龍芯3A處理器。

把 兩個或多個 獨立 實體 赫心處理單元 (更通用的說法叫 多赫 封裝在一個集成電路(IC:Integrated Circuit,也叫做微芯片)裏面,此時這個芯片就被稱爲多赫處理器。

多赫處理器有多種分類:

  • 赫數:取決於處理器中所封裝的赫心數量,大部分是偶數個赫;
  • 赫的類型數:
    • 同質赫數:所有赫都是同一種類型,一般來說,赫處理單元是通用的中處理單元,運行着一個單獨的多赫操作系統;
    • 非同質赫數:含有運行不同操作系統的赫,包括圖像處理單元;
  • 緩存的數量和水平:取決於赫的指令和數據緩存,它們是相對較小且快速的本地內存池;
  • 赫心是如何相互連接的:多赫處理器的總線架構也各不相同;
  • 隔離:芯片內對赫心空間和時間隔離的支持量通常是最小的:
    • 物理隔離:確保不同的赫心不能訪問相同的物理硬件(例如,緩存和RAM等內存位置)(一般很少這種設計);
    • 時間隔離:確保軟件在一個赫心上的執行不會影響在另一個赫心運行的軟件的時間行爲;

一般情況下,多赫處理器可以在每個赫心分別獨立物理封裝的情況下進行多任務處理,也就是 線程級併發處理(TLP: Thread-Level Parallelism),這種形式的TLP通常被認爲是芯片級多處理。在這種情況下,不同的赫心運行多個線程,由於多個線程需要訪問同一內存地址的數據,例如:當赫1要訪問這個地址的數據時,可能已經被赫2加載到緩存中並進行了修改,所以赫與赫之間通過L3緩存交換數據,它們共享內存,共用一組數據;而存儲和外設通過總線與CPU通信

上圖名義上顯示了一個系統的體系結構,其中一個主機操作系統將14個軟件應用程序分配給一個同質四赫處理器中的赫心。在這個體系結構中,有三個級別的緩存,它們逐漸變大但變慢:L1(由指令緩存和數據緩存組成)、L2和L3。請注意,L1和L2高速緩存是單個赫心的本地高速緩存,而L3在所有四個赫心之間共享。

上圖是一個AMD的4赫CPU,可以看到在芯片電路圖中,4個Core的圖案基本對稱,但是中間有密密麻麻的各種連接線來傳輸數據信息。考慮到現在的主流CPU工藝都是7nm、10nm,一般來說幾萬跟線問題不大。

4.5 多CPU和多赫對比

對比項 多CPU 多赫
封裝方式 每個CPU都封裝在單獨的集成電路上 多個CPU赫封裝在一個集成電路上
通信方式 CPU之間通過系統總線通信 CPU赫之間通過L3緩存和片內總線通信,主存和外設通過總線與CPU通信
效率 較低 較高
價格 較低 較高

當然,多CPU和多赫並不是完全割裂的。在很多計算機中,會同時應用這兩種設計。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章