前言
一說到計算機架構(Computer Architecture),大家可能會有疑問:計算機架構到底是個什麼東西?引用維基百科對計算機架構的定義:
computer architecture is a set of rules and methods that describe the functionality, organization, and implementation of computer systems.
複製程式碼
翻譯成中文:計算機架構是描述計算機系統功能,組織和實現的一組規則和方法。而這組規則和方法是通過ISA和Microarchitecture實現的。
我們知道計算機是由硬體和軟體組成的,而它們之間的橋樑是ISA(Instruction Set Architecture,指令集架構),換句話說,硬體的功能通過ISA提供出來,而軟體通過ISA規定的指令使用硬體。目前常用的ISA有x86和ARM,其中x86採用的是複雜指令集(CISC),被較多的應用於伺服器端,而ARM(Advanced RISC Machine)採用的是精簡指令集,目前被用於移動端。
微架構(Microarchitecture)是ISA在處理器的實現,描述處理器是怎樣實現功能的,其本質就是一系列硬體實現以滿足各種指令集。而Microarchitecture是ISA的具體實現,而且對於同一個ISA,可以使用不同技術的微架構 ,比如單週期、多週期以及流水線。比如說x86 ISA有286,386,486,Pretium,Pretium Pro等實現。目前,微架構涉及以下部分:流水線、並行、儲存系統分層結構,下面將對這幾部分進行詳細介紹。
流水線
我們知道指令的執行過程包含以下幾個步驟:取指(IF,instruction Fetch)、譯碼(ID,Instruction Decode)、執行(EXE,Execution)以及寫回(WB,Write Back),在早期微架構中我們將這些步驟放在同一個週期內順序完成,這樣設計導致效率很低,當進行取值時,其餘部件是空閒的。為了提高各個部件工作效率,流水線技術(Pipeline)就應運而生了。
既然流水線技術可以實現不間斷取指、解碼、執行、寫回,那麼我們是不是同時可以讓幾條流水線一起工作,這就是超標量技術。不過需要注意的是當前後兩條指令存在依賴關係時,流水線需要停頓,例如:
x=1+2
y = x*3
複製程式碼
並行
除了通過流水線技術來提高計算機執行速度之外, 還有沒有其他並行技術?按照費林分類法可以將計算機分為:SISD(Single Instruction Stream Single Data Stream,單指令單資料)、SIMD(Single Instruction Stream Mutiple Data Stream,單指令多資料)、MISD(Mutiple Instruction Stream Single Data Stream,多指令單資料)和MIMD(Mutiple Instruction Stream Mutiple Data Stream,多指令多資料)。
早期的馮·諾依曼結構採用的都是SISD,馮·諾依曼結構也稱儲存程式計算機,它有兩個重要特性:1. 指令和資料被儲存在記憶體中;2. 指令被順序執行,在一個時刻只有一條指令在執行,通過PC(Program Counter)識別當前指令。
SIMD 就是單指令多資料的縮寫,將一個指令廣播到多個處理器上,但每個處理器都有自己的資料。也就是說同一份控制指令同時執行不同的資料,如下圖所示,這樣做的好處就是減輕的控制成本。目前,GPUs(Graphics Processor Units)採用的就是SIMD架構。
對於MISD這種架構,目前沒有系統安裝這個結構設計的,這裡就不過多介紹了。
下面重點介紹下MIMD,它指的是不同時刻不同CPU執行的指令不同,並且資料也不同,如下圖所示。目前超級計算機,網路平行計算機叢集和“網格”,多處理器SMP計算機,多核PC都屬於這一類。而MIMD又可以根據記憶體結構,可以分為共享記憶體和訊息驅動。共享記憶體就是處理器之間共享記憶體,通過記憶體來進行通訊,而訊息驅動指的是處理器通過訊息驅動來進行通訊。目前共享記憶體有SMP、NUMA兩種,訊息驅動對應DM。
SMP全稱Symmetric Multi Processors,對稱多處理機,又稱UMA(Unifor Memory Access,統一記憶體訪問),所有CPU都共享同一記憶體。目前Intel和AMD推出的多核CPU應該歸為SMP這一類中。
NUMA(NonUniform Memory Access,非一致記憶體訪問),所有CPU共享所有的記憶體,但不同的CPU訪問不同的記憶體速度是不一樣的。
DM(Distributed Memory,分散式記憶體):每個CPU都有自己的記憶體,CPU通過訊息來通訊,由於每個處理器都有自己的本地記憶體,因此,每個處理對本地記憶體操作都不會影響其他處理器。而且,記憶體數量可隨著處理器的數量進行擴充套件。不過,它的缺點就是程式設計師負責許多與處理器之間資料通訊相關的細節。
儲存器分層結構
無論是馮·諾依曼結構還是其他結構的處理器,最理想的情況下當然是有無限大的儲存空間和 0 時延的儲存系統了,不過這顯然是無法做到的,因此人們就提出了分層式的儲存系統結構,從暫存器開始每往下一層容量就更大,但是速度也更慢,如下圖所示。暫存器容量最小,但是速度最快。因此,想要設計一個良好的儲存系統,需要對容量和速度做一個權衡。
寫在最後
更多文章請訂閱公眾號"木可大大"。