本文的知識點比較零散,主要是關於處理器的一些基本知識,大部分內容來源於參考資料並給出了自己的理解和整理。
先描述下一般處理器的概念,維基百科的定義是 「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 的概念。
指令集(Instruction Set Architecture
, ISA
)是計算機抽象模型的一部分,它定義了軟體如何控制 CPU
。ISA
充當硬體和軟體的介面,指示了處理器能夠實現什麼功能以及如何實現。簡單來說,ISA
就是傳統上軟體和硬體的分界線,是使用者和硬體互動的唯一方式。
ISA
定義了硬體支援的資料型別、暫存器、硬體如何管理記憶體、關鍵特性(如虛擬記憶體)、微處理器可以執行哪些指令,以及多個 ISA 實現的輸入輸出模型。ISA 可以通過新增指令或其他功能或通過新增對更大地址和資料值的支援來擴充套件。
大多數 ISA
(典型如 x86
-Intel CPU 的指令集),將程式的行為描述成每條指令都是順序執行的,一條指令結束後,下一條在開始。
ISA
提供的主要指令可以分為四大類功能:
debug
、中斷和 cache
之類的指令。CPU
數位表示方法是一個設計上的選擇,這個選擇影響了裝置的工作方式。一些早期的數位計算機內部使用電氣模型來表示通用的十進位制(基於 10
進位)記數系統數位。還有一些罕見的計算機使用三進位製表示數位。幾乎所有的現代的 CPU
使用二進位制系統來表示數位,這樣數位可以用具有兩個值的物理量來表示,例如高低電平等等。
主頻=外頻×倍頻。大部分的 CPU
,甚至大部分的時序邏輯裝置,本質上都是同步的,即它們被設計和使用的前題是假設都在同一個同步訊號中工作。
指令週期是指 CPU 要執行一條機器指令經過的步驟,由若干機器週期組成。一般會經歷「取指」,「譯碼」,「發射/執行」和「寫回」這些操作。處理器執行程式的過程就是不斷重複這幾個操作。
在1978年的 Intel 8086 處理器都只能一次執行單指令。 Intel首次在486晶片中開始使用,原理是:當指令之間不存在相關時,它們在流水線中是可以重疊起來並行執行。
當一條指令,完成了「取指」操作,開始進行「譯碼」的時候,取指模組就可以取程式的下一條指令了,這樣可以讓這些模組不至於閒著沒用,即指令流水線可以兩個以上的指令同時執行(類似車間流水線)。一般的四層流水線架構如下圖所示,不同的顏色格表示不同的指令。
同時執行多條指令。比如,一邊從 memory
讀資料,一邊進行 fft
處理。我們經常聽到的超標量(Superscalar
),超長指令字(VLIW
),亂序執行( Out-of-order execution
)等等技術都是發掘指令級並行的技術。
一個人指令同時處理多個資料。我們常聽到的向量處理器(vector procesor
),張量處理器(Tensor processor
)多數都是利用了 SIMD
(一條指令可以處理多個資料,比如一個向量乘法)技術。
並行與並行的通俗理解參考知乎問答-指令級並行,執行緒級並行,資料級並行區別?執行緒的概念是什麼?如下:
執行緒級並行主要由下面兩種技術的支撐:
超執行緒技術實現了單個物理核心同時兩個執行緒,也就是別人常說的虛擬核心數。比如單物理核心實現的雙執行緒,它同時可以處理兩個執行緒,它的物理核心數其實是是1個,通過Hyperthreading技術實現的執行緒級並行(Thread Lever Parallelism)。至於技術細節的實現,這涉及到快取記憶體的知識。
執行緒級並行的好處:
雖然在 1960 年代已經通過作業系統已經實現了執行緒級並行, 但這種頻繁的上下文切換意味損失了
CPU
的處理效率。
CPU
的效能和速度取決於時脈頻率(一般以赫茲或十億赫茲計算,即 hz
與 Ghz
)和每週期可處理的指令(IPC
),兩者合併起來就是每秒可處理的指令(IPS
)。IPS
值代表了 CPU
在幾種人工指令序列下「高峰期」的執行率,指示和應用。