一說到計算機架構(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)就應運而生了。分佈式
既然流水線技術能夠實現不間斷取指、解碼、執行、寫回,那麼咱們是否是同時可讓幾條流水線一塊兒工做,這就是超標量技術。不過須要注意的是當先後兩條指令存在依賴關係時,流水線須要停頓,例如:spa
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架構。3d
對於MISD這種架構,目前沒有系統安裝這個結構設計的,這裏就不過多介紹了。code
下面重點介紹下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 時延的存儲系統了,不過這顯然是沒法作到的,所以人們就提出了分層式的存儲系統結構,從寄存器開始每往下一層容量就更大,可是速度也更慢,以下圖所示。寄存器容量最小,可是速度最快。所以,想要設計一個良好的存儲系統,須要對容量和速度作一個權衡。
更多文章請訂閱公衆號"木可大大"。