本文的知識點比較零散,主要是關於處理器的一些基本知識,大部分內容來源於參考資料並給出了自己的理解和整理。
一,什麼是處理器
先描述下一般處理器的概念,維基百科的定義是 “In computing, a processor is an electronic circuit which performs operations on some external data source, usually memory or some other data stream”。最為常見的處理器有 CPU
(可以執行任何程式)、GPU
(圖形影像處理)和 DSP
(處理數字訊號),還有專門用來做 DNN
應用神經網路處理器。
處理器或處理單元是對外部資料來源(通常是記憶體或其他資料流)執行操作的電子元件(數位電路)。
CPU
的主要運作原理,不論其外觀,都是執行儲存於被稱為程式裡的一系列指令。在此討論的是遵循普遍的馮·諾伊曼結構(von Neumann architecture)設計的裝置。程式以一系列數字儲存在計算機儲存器中。差不多所有的馮·諾伊曼 CPU
的運作原理可分為四個階段:提取、解碼、執行和寫回。
而專用處理器就是針對特定應用或者領域的處理器,類似於是我們經常說的 Domain Specific Architecture 的概念。
二,指令集基礎
什麼是 ISA
指令集(Instruction Set Architecture
, ISA
)是計算機抽象模型的一部分,它定義了軟體如何控制 CPU
。ISA
充當硬體和軟體的介面,指示了處理器能夠實現什麼功能以及如何實現。簡單來說,ISA
就是傳統上軟體和硬體的分界線,是使用者和硬體互動的唯一方式。
ISA
定義了硬體支援的資料型別、暫存器、硬體如何管理記憶體、關鍵特性(如虛擬記憶體)、微處理器可以執行哪些指令,以及多個 ISA 實現的輸入輸出模型。ISA 可以透過新增指令或其他功能或透過新增對更大地址和資料值的支援來擴充套件。
ISA 功能
大多數 ISA
(典型如 x86
-Intel CPU 的指令集),將程式的行為描述成每條指令都是順序執行的,一條指令結束後,下一條在開始。
ISA
提供的主要指令可以分為四大類功能:
- 執行運算或處理的功能,比如算術操作指令;
- 控制程式流,比如迴圈、判斷分支和跳轉指令;
- 實現資料搬移,如記憶體到暫存器,暫存器之間資料搬移等指令;
- 最後就是一些輔助指令,如
debug
、中斷和cache
之類的指令。
三,CPU 設計與實現
整數範圍
CPU
數字表示方法是一個設計上的選擇,這個選擇影響了裝置的工作方式。一些早期的數字計算機內部使用電氣模型來表示通用的十進位制(基於 10
進位)記數系統數字。還有一些罕見的計算機使用三進製表示數字。幾乎所有的現代的 CPU
使用二進位制系統來表示數字,這樣數字可以用具有兩個值的物理量來表示,例如高低電平等等。
時脈頻率
主頻=外頻×倍頻。大部分的 CPU
,甚至大部分的時序邏輯裝置,本質上都是同步的,即它們被設計和使用的前題是假設都在同一個同步訊號中工作。
指令週期(Instruction cycle)
指令週期是指 CPU 要執行一條機器指令經過的步驟,由若干機器週期組成。一般會經歷“取指”,“譯碼”,“發射/執行”和“寫回”這些操作。處理器執行程式的過程就是不斷重複這幾個操作。
指令流水線(Instruction pipeline)
在1978年的 Intel 8086 處理器都只能一次執行單指令。 Intel首次在486晶片中開始使用,原理是:當指令之間不存在相關時,它們在流水線中是可以重疊起來並行執行。
當一條指令,完成了“取指”操作,開始進行“譯碼”的時候,取指模組就可以取程式的下一條指令了,這樣可以讓這些模組不至於閒著沒用,即指令流水線可以兩個以上的指令同時執行(類似車間流水線)。一般的四層流水線架構如下圖所示,不同的顏色格表示不同的指令。
指令並行(Instruction-level parallelism)
同時執行多條指令。比如,一邊從 memory
讀資料,一邊進行 fft
處理。我們經常聽到的超標量(Superscalar
),超長指令字(VLIW
),亂序執行( Out-of-order execution
)等等技術都是發掘指令級並行的技術。
資料並行(Data parallelism):
一個人指令同時處理多個資料。我們常聽到的向量處理器(vector procesor
),張量處理器(Tensor processor
)多數都是利用了 SIMD
(一條指令可以處理多個資料,比如一個向量乘法)技術。
併發與並行
併發與並行的通俗理解參考知乎問答-指令級並行,執行緒級並行,資料級並行區別?執行緒的概念是什麼?如下:
執行緒級並行(Thread-Lever Parallelism)
執行緒級並行主要由下面兩種技術的支撐:
- 超執行緒技術:2004年,奔騰4實現了Hyper-Threading.(單核心雙執行緒)
- 多核技術-物理核心: 2005年,英特爾宣佈他的第一個雙核心 EM64T 處理器,和 Pentium D840
超執行緒技術實現了單個物理核心同時兩個執行緒,也就是別人常說的虛擬核心數。比如單物理核心實現的雙執行緒,它同時可以處理兩個執行緒,它的物理核心數其實是是1個,透過Hyperthreading技術實現的執行緒級並行(Thread Lever Parallelism)。至於技術細節的實現,這涉及到快取記憶體的知識。
執行緒級並行的好處:
- 當執行多工時,它減少了之前的作業系統模擬出來的併發,那麼使用者進行多工處理時可以執行更多的程式進行併發了。
- 它可以使單個程式執行更快。(僅當該程式有大量執行緒可以並行處理時)
雖然在 1960 年代已經透過作業系統已經實現了執行緒級併發, 但這種頻繁的上下文切換意味損失了
CPU
的處理效率。
效能
CPU
的效能和速度取決於時脈頻率(一般以赫茲或十億赫茲計算,即 hz
與 Ghz
)和每週期可處理的指令(IPC
),兩者合併起來就是每秒可處理的指令(IPS
)。IPS
值代表了 CPU
在幾種人工指令序列下“高峰期”的執行率,指示和應用。