微架構

**微架構**（英語：microarchitecture），也被叫做**計算機組織**，微架構使得指令集架構（ISA）可以在處理器上被執行。指令集架構可以在不同的微架構上執行。
計算機結構是一門探討微架構與指令集兩者互動的一門學問。

## 和指令集架構的關係

指令集架構是指在處理器內被處理的程式，指令集架構為組合語言的設計師和編譯器所見。指令集架構包含 execution model，暫存器，位址以及資料格式。微架構包含處理器內部的構成以及這些構成起來的部分如何執行指令集架構。微架構通常被表示成流程圖，以描述機器內部元件的連結狀況，從一個閘或是暫存器，到算術邏輯單元（ALU）。圖上分布著資料路徑（可以顯示資料在微架構的位置）以及控制路徑（顯示資料該被什麼指令所處理）。

每個微架構的的元件都被表示成藉數個邏輯閘所建構而成的工具。每個邏輯閘都被表示成藉電晶體建構成的零件。擁有不同微架構的機器可能擁有相同的指令集架構，因此可以執行相同的程式。由於半導體科技的進步，新型的處理器可以以較快的速度執行相同的指令集架構。

## 微架構的概念

現時，管線資料路徑是微架構中最常被使用的資料路徑。這種作法也被普遍的用於微處理器，微控制器，以及數位訊號處理器。管線的結構允許多個指令在同一時間執行，不同的指令在微架構不同的位置執行。管線分有好幾個不同的階段（stage），這些階段是微架構的基礎。這些階段包含取指令，解碼，執行指令，以及將資料寫回。一些結構還包含其他階段，像是對記憶體做存取的動作。管線是微架構其中一項主要的工作。執行單元也是微架構的基本元件。執行單元包含算術邏輯單元（ALU），浮點運算器（FPU），load/store 單元，分支預測，以及 SIMD。這些單元在處理器內進行計算。執行單元的數量，他們的延遲（記憶體存取資料的時間）及吞吐量（將資料存到或是讀取出記憶體的速度）影響微架構的效能。

 

 

### 指令週期

所有的中央處理器，微處理器藉由以下的步驟來執行程式：

1. 讀取指令並將其解碼
2. 找到需要用到的資料以執行指令
3. 執行指令
4. 將結果寫回

指令週期將會不斷循環，直到電力用盡。

### 執行速度

上面的步驟看起來簡單，但階層記憶體使這些步驟變得複雜，階層記憶體包含快取，主記憶體，以及非揮發性的記憶體，例如硬碟（這是指令和資料儲存的地方），總是比處理器處理資料的速度慢。步驟（2）常常導致 lengthy（在 CPU 內）delay，這種延遲是在資料通過匯流排時產生。一直以來，一個不變的目標是在同一時間內執行更多指令，以提升程式執行的效率。這導致邏輯和電路設計變得更複雜。一開始，只有大型電腦和超級電腦使用這種技術，因為這種技術需要大量的電路。當半導體產業發展起來後，這樣的技術被加裝在單一的半導體晶片上。詳見摩爾定律（積體電路可容納的電晶體數量，每二年增加一倍）。

### 指令集的選擇

指令集從過去以來不斷的變化，從一開始的簡單到後來的複雜。最近，load-store 結構，VLIW 以及 EPIC 是最普遍的指令集。結構處理 data parallelism 的方法包括 SIMD 以及向量。一些指令集，例如 CISC；多早期的裝置使用 "CISC"。

然而，對指令集架構的選擇可能會對實作高效能的機器產生大的影響。發展 RISC 處理器是一個好的策略，可以將指令給簡化。這樣的指令容易在管線內被擷取，解碼與執行，由於指令頻繁的被使用，快取便被頻繁的使用，這樣就使記憶體存取的時間降低。

### 管線 (pipeline)

在目前，能夠最有效的提升效能的方法就是管線。早期的處理器是等一個指令執行完所有步驟後，然後才輪到下一個指令執行。大部分的電路在某一個步驟結束後就處在閒置的狀態，例如，對指令進行解碼的電路在指令進入執行階段後就處於閒置狀態。

管線化的電路藉由允許多個指令在同一時間，在電路上不同的位置進行不同的工作。例如，處理器可以在最後一個指令等待結果寫回時對另一個指令解碼。這使得處理器在同一時間可以處理四個指令，使處理器的效能增加了四倍。

RISC 藉由將每個階段分割清楚並讓每個階段都花費一樣的時間執行來讓管線變小和變得容易建構 — 每個階段花費 1 個 cycle 的時間。處理器使用了有如工廠管線的設計，當指令由一邊進來的同時就有另一個指令從另一邊出去。由於 RISC 管線是降低複雜度的設計，使得管線核心跟指令快取可以被裝置在同一個晶片內，這是精簡指令集較為快速的原因。早期的裝置，例如 SPARC 和 MIPS 比 Intel 和 Motorola 的 CISC 還快 10 倍。

## 與指令集架構的關係

指令集架構大致上和處理器的程式設計模型（programming model）一樣。指令集架構包括執行模型（execution model），暫存器（Processor register），位址和數據格式等。微架構包括處理器的組成部份和對指令集架構的連接和操作。一個系統的微架構通常以描述不同微架構組成部份如何互相連接的平面圖代表，而這些微架構組成部份可以是簡單的邏輯閘（Logic gates），電阻，或是算術邏輯單元（Arithmetic logic unit　，ALU）等大型元件。這些平面圖通常把數據路徑（Data path （頁面存檔備份，存於網際網路檔案館））和控制路徑（control path）分開。每個組成部份會以示意圖表達他們和執行他們的邏輯閘之間的連繫。

## 幾種典型的微架構

### Intel

* P5
* P6
* NetBurst
* Core
* Nehalem/Westmere
* Sandy Bridge/Ivy Bridge
* Haswell/Broadwell
* Skylake
* Kaby Lake
* Coffee Lake
* Comet Lake
* Ice Lake

### AMD

* K5 - AMD 的首個原創微架構。K5 基於 Am29000 的微架構，並且添加了一個 x86 的解碼器。即使這個設計的原理和 Pentium Pro 相同，而實際效能更像是 Pentium。
* K6 - K6 並非基於 K5, 而是基於當時已經被 AMD 所收購了的 NexGen 所設計的 Nx686 處理器，K6 的針腳相容 Intel Pentium。
  * K6-2 微架構 - 增加了 3DNow! SIMD 指令集。
  * K6-III 微架構 - 有 3 級快取，64KB L1 一級快取，256KB L2 二級全速快取，最高可達 2MB 的主機板裝載（motherboard mounted）L3 三級快取。
* K7 - 是 AMD Athlon 和 Athlon XP 的微架構。
* K8 微架構 - 全球首款 x86-64 處理器，整合了記憶體控制器（Integrated Memory Controller），採用 HyperTransport 技術，增加了 SSE 指令集。後期的 K8 增加了 SSE3。K8 在 2003 年 4 月 22 日上市。HyperTransport 取代了傳統的前端匯流排，讓 CPU 直接和記憶體連結。
* K9 - 被取消。
* K10 微架構 - 代號為 Barcelona , 是 AMD 系列的第十代微架構，最多內建四個核心，共享 Level 3 Cache 第三級快取，128 位元浮點單元，支援 AMD-V Nested Paging Virtualization 和 HyperTransport 3.0。
* Bulldozer - 是繼 K10 之後，使用 AMD M-SPACE 模組化設計方法（modular design methodology）的微架構。Bulldozer 是為功耗在 10W 至 100W 類別的處理器而設計，應用了 XOP，FMA 和 CVT16 指令集，並且部分產品整合了 GPU 核心（AMD APU）。
* Zen 微架構 - AMD 在 2017 年推出的微架構，是多年來效能最接近 Intel 的產品。採用 14 奈米製程。
* Zen + 微架構 - AMD 在 2018 年推出的微架構，CPU 晶片採用 12 奈米製程。
* Zen 2 微架構 - AMD 在 2019 年推出的微架構，CPU 晶片採用 7 奈米製程。
* Zen 3 - AMD 在 2020 年推出的微架構

## 微架構的發展方向

## 參考文獻

* 《電腦科學技術百科全書》（第二版）. 作者：張效祥。出版社：清華大學出版社，2005 年. ISBN：7302105944, 9787302105947

## 參見

* AMD CPU 微架構列表
* 指令集架構
* 電腦系統結構