第 2 章 中央處理單元
學習目標 看完本章, 您應該學會以下主題: 認識 CPU 在電腦中扮演的角色 CPU 運作的原理 CPU 的規格與技術名
2-1 CPU 的功用 CPU 的全名是 Central Processing Unit (中央處理單元), 也就是一般人俗稱的『處理器』 (Processor)。在電腦的五大單元中, CPU 就包含了控制 (CU, Control Unit)及算術/邏輯 (ALU, Arithmetic/Logic Unit) 兩大單元, 它在整部電腦的重要性, 就宛如大腦之於人的地位一般!
2-1 CPU 的功用 CPU 負責系統中資料的運算 (例如:加、減、乘、除) 與邏輯判斷 (例如 AND、OR...等, 請參考第 6 章) 等核心工作, 是電腦中最重要、最複雜的一個元件, 電腦若沒有了 CPU, 將無法正常運作。而CPU 的能力往往是用來評斷電腦執行效能的主要指標! CPU 除了計算的工作外, 還必須指揮、協調其它元件之間執行、搭配的步調, 我們也才得以順利操作、使用電腦上的所有軟硬體。
2-1 CPU 的功用
2-1 CPU 的功用 電腦的運作必定包含輸入→運算→輸出這 3 個過程。舉例來說, 我們將自己的名字用鍵盤輸入到電腦, 電腦螢幕便將名字顯示出來, 這些輸入與輸出的過程對我們而言很容易理解, 但是運算呢?我們的操作 (如按滑鼠左鈕 2 下這個動作) 要怎麼『運算』呢?
2-1 CPU 的功用 其實對 CPU 而言, 我們對電腦的操作會轉成一連串的指令, 而探究指令的本質, 其實就是數字資料 (0 和 1) 的組合, 實際上在電腦中所有的資料、指令都是數字。而將『數字』 拿來做運算本來就是再正常不過的了!
2-1 CPU 的功用 CPU 的種類繁多, 一般常見的 PC 個人電腦, 幾乎都是採用 x86 系列的 CPU, 但在個人電腦以外的裝置 (如 PDA、行動電話... 等), 則大多採用非 x86 系列的 CPU。 以下我們以最常用的 x86 系列 CPU 為例, 說明其內部結構, 以及實際運作時, 是如何從輸入、經過運算, 到最後產生輸出。待 2-3 節, 再介紹一些比較常見的非 x86 CPU。
隨堂練習 1. 請簡述 CPU 的工作是什麼 ?
2-2 CPU 的工作原理-以 x86 CPU 為例 在了解 CPU 的工作原理之前, 我們先從 CPU 的結構開始認識起。
2-2-1 CPU 的構造 CPU 的構造包含了控制單元 (CU, Control Unit)、算術/邏輯單元 (ALU, Arithmetic/Logic Unit)、暫存器 (Register) 等, 並透過匯流排 (Bus) 來溝通:
2-2-1 CPU 的構造
2-2-1 CPU 的構造 在上圖中, 快取記憶體 (Cache Memory) 雖然也會設置在 CPU 內部, 不過就傳統 C P U 的結構 (Architecture) 來說, 快取記憶體並不屬於 CPU 的一部份。關於快取記憶體, 稍後會有詳細的介紹。
控制單元 控制單元 (Control Unit) 負責控制資料流和指令流。當我們輸入指令 (如鍵盤或滑鼠的操作) 時, 控制單元會讀取並解譯指令, 以便將需要運算的資料送到算術/邏輯單元進行運算, 並將運算完成的資料流或指令流, 送到輸出或輸入單元。 其實說穿了, 控制單元的主要任務就是在『控制』輸出與輸入而已。
算術/邏輯單元 算術/邏輯單元 (Arithmetic/Logic Unit), 從字面上來理解就是負責算術運算及邏輯運算。簡單地說, 算術運算就是加、減、乘、除等運算, 而邏輯運算則是 AND 、OR、NOT等運算, 這些都是數學上再熟悉不過的運算方法了。 關於邏輯運算 (AND、OR...等), 在第 6 章會有詳細介紹。
暫存器 暫存器 (Register) 是 CPU 內部用來暫時存放資料的地方, 是相當重要的一個元件。暫存器其實就是記憶體, 位於記憶體階層的最上層 (關於記憶體階層的詳細介紹, 請參考 3-1 節)。 主要是為了配合 CPU 的高速運算而設置。雖然暫存器的存取速度相當快, 但因成本太高, 所以通常只能配置幾個位元組 (Bytes) 的容量。每個暫存器的大小 (寬度) 也決定了 CPU 所能處理的字組 (Word) 大小。
暫存器 字組 (Word) 是一個單位, 表示 CPU 在一個指令週期(詳細後述)所處理的資料量。若 CPU 一次能處理 32 位元大小的字組, 則這個 CPU 就稱為 32 位元 CPU。 CPU 裏的暫存器有很多個, 依功能的不同會分別配置在控制單元及算術/邏輯單元中。通常, 對程式設計者而言, 只要學習 CPU 的指令, 並且熟習暫存器的用法, 便可以順利的控制 CPU 動作。
暫存器
暫存器 不同架構 CPU, 其暫存器種類、數量都不同, 以下介紹 x86 系列 CPU 中幾種較常見的暫存器: 一般用途暫存器 (General Purpose Register) :一般用途暫存器是用來存放運算的資料、指令或位址。一般用途暫存器依其功能而有不同的名稱, 以下是幾種常見的一般用途暫存器:
暫存器 資 料暫存器 (Data Register):資料暫存器即用來存放資料的地方。 累加器 (Accumulator):累加器通常會被單獨拿出來介紹, 因為累加器是算術/邏輯運算單元中相當重要的部份, 是用來存放運算過程及運算結果的資料。 指令暫存器 (Instruction Register):通常設置在控制單元內, 用來存放目前被執行的指令。 程式計數器 (Program Counter):用來記錄 CPU 下一個要執行指令所存放的位址。
暫存器 位址暫存器 (Address Register):用來記錄資料存放在記憶體的位址, 也稱為指位器(Pointer)。常見的位址暫存器有以下幾種: 堆疊暫存器 (Stack Register):堆疊暫存器是用來記錄堆疊最頂端位址的暫存器。堆疊 (Stack) 是一種重要的資料結構 (Data Structure) , 就是規定資料元素必須依著後進先出 (LIFO, Last In First Out) 之次序來存取。例如下圖, 我們將甲、乙、丙、丁這 4 個資料依次堆入 (Push) 堆疊:
暫存器
暫存器 所謂的資料結構指的是資料組織與管理的方法。有關資料結構的詳細說明, 請參考第 16 章。 當我們想由堆疊取出 (Pop) 資料時, 其次序會是丁、丙、乙、甲。也就是說, 像 "甲" 這個最早被 Push 的資料是最後才會被 Pop 的。這是因為堆疊是一種單一出入口的資料結構體, 自然就會造成 『後進先出』 這樣的特性了。以此例來說, 堆疊暫存器記錄的就是 『丁』 的位址。 所謂的資料結構指的是資料組織與管理的方法。有關資料結構的詳細說明, 請參考第 16 章。
暫存器 基底暫存器 (Base Register):基底暫存器是『基底定址法』 在做暫存器定址時所使用的暫存器。基底定址法就是以基底暫存器所指位址為起點, 再加上一固定距離來得到資料所在的位址。舉例來說, 如果要從堆疊區取資料, 那麼必須先指定基底的位置, 再依指定的距離找到要存取的位置:
暫存器
暫存器 如上圖所示, 假設我們要取 『丁』, 那麼可以指定 『乙』 的位址為基底, 加上 2 Bytes 的距離就可以找到 『丁』的位址;或是以 『丙』的位址為基底, 加上 1 Bytes 的距離也可以找到 『丁』 的位址。 所謂定址法 (Addressing Mode) 就是 CPU 尋找資料所在位置的方法。簡言之, 就是 CPU 存取(Access) 資料的途徑, CPU 除了可以對暫存器定址, 也可以對主記憶體定址。
暫存器 索引暫存器 (Index Register):索引暫存器是『索引定址法』在做暫存器定址時使用的暫存器。 索引定址法的原理與基底定址法是一樣的, 但這時是以固定之位址 (如堆疊的開頭) 為基底, 再加上索引暫存器儲存的值以得到資料所在位址。 同樣以從堆疊區取資料為例, 如下圖所示,假設我們要取 『丁』 , 此時會固定以 『甲』 為基底, 再加上 3 (索引暫存器所記錄的值) 的距離來找到『丁』 的位址。索引定址法和基底定址法最大的不同, 就是說我們無須、也無法指定基底的位址。
暫存器
暫存器 旗標暫存器 (Flag Register):旗標暫存器是一種比較特殊的暫存器, 是用來記錄 CPU 在處理運算時的狀態, 或運算之後的狀態。
匯流排 電腦上各元件傳送資料的管道就是匯流排 (Bus)。從字面上解讀, 取其 『匯流』 之意, 就大致可以明白這個傳送資料的管道, 是由許多不同的管道整合在一起的。 而這樣做的好處在於管道 (也就是主機板上的電子線路) 容易安排, 也能確保所有元件都能互相傳送資料。
匯流排 舉例來說, 就像高速公路也是採用 『匯流』 的概念一樣, 不同的地點都以交流道和高速公路銜接, 而不是地點和地點之間各自連接。如此, 就算新增加了一個地點, 只要此地點有交流道連上高速公路,還是可以確保我們一定能到達該處。
匯流排 在電腦中匯流排主要分為三大類: 內部匯流排 (Internal Bus):CPU 內部用來傳送資料的通道。控制單元、算術/邏輯單元及暫存器在讀取、存放資料時, 都是經過內部匯流排。 系統匯流排 (System Bus或Processor System Bus):CPU 與主機板上晶片組傳送資料的通道。依傳輸資料種類、方式的不同還可區分為以下三種匯流排:
匯流排 擴充匯流排 (Expansion Bus):晶片組和主機板上除了 CPU 之外的各元件傳送資料的通道。 資料匯流排 (data bus):傳送指令或資料的管道, 其傳輸方向為雙向。 位址匯流排 (address bus):CPU 指定資料存取的位址, 其傳輸方向為單向。 控制匯流排 (control bus):CPU 傳送控制單元 (Control Unit) 訊號的管道, 其傳輸方向為單向。 擴充匯流排 (Expansion Bus):晶片組和主機板上除了 CPU 之外的各元件傳送資料的通道。
匯流排
何謂晶片組 早期主機板必須佈滿許多電阻、電容、IC 晶片、與複雜的電子線路, 才能供應主機板所需的各項功能, 不但製造成本高, 維修時更是困難重重。不過, 拜半導體科技突飛猛進之賜, 現在只要以 2、3 顆晶片便能取代原先眾多的元件與線路, 在功能上更是有過之而無不及。 這幾顆晶片必須整組運用在同一塊板子上, 因此便稱為 『晶片組』。通常晶片組是由北橋(North Bridge) 與南橋 (South Bridge) 晶片所組成的。
何謂晶片組 所以用最簡單的一句話來解釋, 晶片組就負責整個主機板上所有裝置、元件間溝通與控制的樞紐。而北橋與南橋晶片所負責的元件如下表:
何謂晶片組 隨半導體及相關技術持續演進, 以及為了進一步提昇系統效能, 所以 CPU 與晶片組的架構也持續在演變, 例如近年來廠商先是將存取記憶體或其它高速裝置的匯流排移到 CPU 上, 讓CPU 不必多繞一圈即可直接存取記憶體或高速的週邊, 也簡化晶片組的設計。 或是將繪圖晶片 (GPU)、音效控制晶片整合在晶片組中, 降低消費者的硬體採購成本。近來廠商更進一步將顯示晶片整合至 CPU 封裝中, 有可能成為未來的主流。
快取記憶體 CPU 利用暫存器來進行資料的存取和運算, 但暫存器和主記憶體的速度差異實在太大, 若從暫存器直接和主記憶體進行輸出或輸入, 可能造成 CPU 長時間的閒置, 只為了等待主記憶體將資料送進來。 為了提升系統的效能, 於是在暫存器和主記憶體間, 配置了快取記憶體 (Cache Memory)。
快取記憶體 快取記憶體是位於記憶體階層的第二層, 相較於主記憶體, 仍是屬於速度快、成本高的記憶體, 因此通常也只能配置容量遠少於主記憶體的容量。
快取記憶體 快取記憶體的容量雖然小, 但可以存放較常使用的指令或資料。由於 CPU 讀取需要的指令或資料時, 會直接到快取記憶體尋找, 若找不到需要的資料才會到主記憶體中讀取。 因此, 若 CPU 在快取就能找到需要的資料, 便無需再到主記憶體讀取, 而資料傳送的時間就能大幅縮短了;這樣的工作方式正是快取記憶體能夠提高效能的最主要原因。
快取記憶體 快取記憶體通常與 CPU 直接整合在一起, 因此我們是無法自行增減快取記憶體的大小。快取記憶體依層級 (Level) 區分為 Level1 (L1, 資料/指令快取) 與 Level2 (L2, 記憶快取) 等 2 種。 在高階伺服器版本的 CPU 上, 還會看到有第 3 層快取 (L3 Cache) , 其速度以 L1 快取最快, 接著依次是 L2 和 L3。通常我們較會注意到的是 L2 Cache 的大小, 目前 CPU 使用的 L2 快取已經多達 1 MB。
快取記憶體 理論上 Cache 愈大、CPU 的效能愈好, 也因此目前新型的 CPU 都不斷加大快取記憶體。不過, 快取記憶體一旦超過一個『額度』後, 其帶來的效益差異將變得不明顯了。目前主流 CPU 多為 1,024 KB (1 MB), 入門級產品則縮減為 512 KB。
2-2-2 CPU 的規格與技術名詞 在了解 CPU 的架構和一些重要的元件之後, 接著要介紹一些 CPU 常見的規格和技術名詞, 認識這些規格和技術名詞, 對於學習 CPU 是相當有幫助的。
CPU 如何執行指令 認識了控制單元、算術/邏輯單元及暫存器之後, 我們就可以開始來瞭解指令是如何在CPU 當中運作的。
CPU 如何執行指令 上述 CPU 執行指令的一連串過程, 就稱之為機器週期 (Machine Cycle), 亦可稱為指令週期 (Instruction Cycle)。過程中, 控制單元從讀取指令到解譯完成的時間叫做指令時間 (Instruction Time), 而算術/邏輯單元從運算到運算完成並存入暫存器的時間, 叫做執行時間 (Execution Time), 如下圖所示:
CPU 如何執行指令
CPU 如何執行指令 上圖為指令執行流程的示意圖, 實際上指令並不一定在算術/邏輯單元中執行, 也可能是由控制單元來執行的。
CPU 如何執行指令 通常我們用指令週期衡量 CPU 運算的速度。一個指令週期所需的時間, 大約幾百萬分之一秒, 也就是說一秒鐘可執行幾百萬個的指令。 而用來計量 CPU 運算速度的單位稱為 MIPS (Millions of Instruction Per Second, 每秒百萬個指令), 意即 CPU 一秒鐘可以執行幾百萬個的指令。MIPS 值越高, 代表 CPU 的運算速度越快。
CPU 的工作時脈 一般描述 CPU 的效能時, 都是以 CPU 運作的 「時脈頻率」, 也稱為 「工作時脈」來描述, 早期其單位為 MHz (每秒百萬次);如 Celeron 950、Duron 800 就是指其時脈頻率分別為 950 MHz 與 800 MHz。近來則發展到 GHz (每秒十億次) 的速度, 例如 Intel Core i3-540 具有 3.06 G 的工作時脈。
CPU 的工作時脈 CPU 時脈的計算方式如下: 關於內頻、外頻和倍頻係數分別說明如下: 內頻 (Internal Clock):是 CPU 內部在工作時的頻率, 以 AMD Athlon II X2-255 的 CPU 為例, 其內頻即是 3100 MHz。
CPU 的工作時脈 外頻 (External Clock):是主機板提供給 CPU 的時脈頻率。 倍頻係數 (Clock Multiplier Factor):以內頻除以外頻, 會得到一係數, 此係數即稱為倍頻係數, 也就是內頻和外頻相差的倍數。
什麼是超頻? 所謂的超頻, 就是讓原本時脈較低的 CPU 以更高的時脈運作。超頻的方法不外乎是調高外頻或倍頻係數, 以提昇 CPU 的時脈。
什麼是超頻? 既然超頻可以得到額外的效能, 何樂而不為呢?實際上超頻可是有相當風險的! 因為迫使 CPU 以更高時脈運作, 當然會產生更高的溫度, 不僅 CPU 本身有燒壞的可能, 對於其它週邊也是一大考驗。 若是為了多一點效能, 而不慎燒毀 CPU 或硬碟...等其它元件, 都是很不划算的。
傳輸頻寬 傳輸頻寬 (Bandwidth) 是指單位時間內可傳送/接收的資料量 (Bytes/Sec);在電腦上各元件之間會使用不同的傳輸頻寬, 這些頻寬都是可以計算出來的。在計算前, 必須先瞭解 『頻寬』 是如何算出來的:
傳輸頻寬 以使用 1333 MHz 系統匯流排的 Intel Core 2 Duo E8400 CPU 為例, 其 CPU 的資料寬度為 64 位元, 故可傳輸的資料頻寬就是:
CPU 的指令集 從字面上來看, 指令集(Instruction Set) 是一群指令的集合;而指令則是 CPU 提供的服務。系統只要說明:『請執行 xxxx 服務, 所需的相關資料有:yyy, zzz, www, ...』, CPU 就會依序執行。 不過這是系統內部的運作, 當中的執行細節完全由 CPU 廠商來決定, 我們根本無權置喙。您要了解是:指令集提供的服務是影響 CPU 效能的重要關鍵。我們舉 2 個例子說明:
CPU 的指令集 相同指令, 需要不同執行週期 假設A、I 兩個相同頻率的 CPU 都執行相同的指令, I 需要 3 個執行週期, A 只需2 個;則在相同時脈下, A 的效能自然比 I 快。 組合指令較慢 另一種情形則是:有些服務並非單一指令所提供, 而是由多道指令組合而成;您可以想像, 這類組合指令所需的執行週期自然比單一指令來得長。
CPU 的指令集 談到 CPU 的指令集, 就不能不提到 CISC 和 RISC 這兩種分類, 所以接著我們要來認識 CISC 與 RISC。
CISC 與 RISC CISC (Complex Instruction Set Computer) 稱為複雜指令集, 是指 CPU 內使用功能較多、較強的指令。 CISC 的電路設計較為複雜, 成本也較高, 但由於功能強大, 因此較容易處理複雜的指令, 也使得編譯器 (Compiler) 的撰寫也較為簡單。使用 CISC 最具代表性的 CPU, 即是 Intel x86 系列的 CPU。
CISC 與 RISC 編譯器 (Compiler) 的功能是將高階語言 (如C、Visual Basic...等) 轉換為電腦看得懂的機械語言 (也就是 0 和 1的組合)。關於編譯器, 在第 7 章會有詳細的介紹。
CISC 與 RISC RISC (Reduced Instruction Set Computer) 稱為精簡指令集, 也就是使用少量、較常用, 且功能較簡單的基本指令, 來完成複雜的指令。 雖然 RISC 的指令功能較少, 但因為每個指令較簡單, 所以執行的速度較快, 而相關的電路設計也較為容易。使用 RISC 的 CPU 通常是非 x86 系列的CPU, 最具代表性的是 IBM、Motorola 與 Apple 共同開發的 PowerPC。
CISC 與 RISC
CISC 與 RISC 我們以電子計算機來比喻 CISC 和 RISC, 將計算機的使用者比喻成編譯器。CISC就像工程用的計算機, 功能多而且強大, 可以很容易的算出開根號、三角函數等運算。 然而要製作一台工程用的計算機比較困難, 成本比較高, 但對於使用者來說, 不需要很強的數學知識 (也就是說編譯器不需要很強大) 就能藉以完成高難度的數學運算。
CISC 與 RISC 而 RISC 就像普通的計算機, 只能使用加、減、乘、除這些簡單而基本的四則運算;若是較複雜的數學運算, 就運用許多次的四則運算來計算出結果, 也因此使用者必須具備很強的數學知識才行 (也就是說編譯器必須很強大, 因此設計上較困難)。 不過這個比喻只是形容CISC 和 RISC 的概念而已, 可不能單純以此來比較 CISC 和 RISC 的優劣。
CISC 與 RISC CISC 的概念是利用硬體的電路來完成較複雜運算, 以增加電腦的效能;而複雜的電路設計也代表著必須使用更多的電晶體, 在以往的半導體技術不像現在這麼進步的時候, 很難在一塊晶片中放入大量的電晶體。 因此使用 CISC 必須付出較大的成本。此外, 複雜的電路設計也代表 CPU 的指令週期將因此變長, 即使是處理較單純的指令, 效能仍然不佳。
CISC 與 RISC 而 RISC 的概念則是盡可能只使用最精簡、最基本及最常用的功能, 而不加入其它複雜、強大、卻很少使用的功能。 以電子計算機來做比喻, 如果使用計算機一百次, 可能用不到一次『log』計算, 那麼做出這個功能不就是浪費了嗎?
CISC 與 RISC 而 RISC 因為指令的功能較簡單, 使得電路的設計較為精簡, 使用的電晶體也減少許多, CPU 的指令週期也得以縮短。 因此執行指令時, RISC 的執行效能更是遠勝 CISC, 再加上軟體技術越來越進步, 編譯器的功能越來越強大、越來越完整, 因而使得 RISC 大行其道, 甚至一度被認為將會取代 CISC。
CISC 與 RISC 關於 CISC 和 RISC 的比較整理如下:
CISC 與 RISC CISC 和 RISC 之爭存在已久, 雖然 RISC 一度情勢大好, 不過 CISC 還是有其價值, 並未因此消失。 其實現在的 CPU 已經找不到 『純粹』 CISC 或 RISC 設計了, 反而大多是兩種設計混合使用。
CISC 與 RISC 首先, 近來半導體技術的躍進, 使得一個晶片內可以放入更多的電晶體, 而 RISC 也不再堅持以往 『少量電晶體』 的想法, 而加入了以往CISC 主張-使用大量的電晶體, 並且加入了部份 CISC 的指令藉以應付複雜的運算。 而 CISC 也導入了 L1 快取記憶體的設計, 甚至是將部份複雜的指令拆解成 RISC 指令來執行, 藉以提高效能。
CISC 與 RISC CISC 和 RISC 之爭在現在看來意義已經不大, 重要的是彼此各取優點、各自發展, 以達成提高效能的目標。 L1 Cache 原本是 RISC 所採用的設計, 而 Intel 從 486 的 CPU 開始導入 L1 Cache 的設計。
Hyper-Threading Hyper-Threading 中文翻譯為 『超執行緒』, 簡稱為『H.T.』。用比較淺顯的概念來說, Hyper-Threading 就是把 1 個實體 CPU 『模擬』成 2 顆 CPU、增加處理器運作效率, 藉以有效地善用資源、減少系統資源的浪費:
Hyper-Threading
Hyper-Threading 既然 Hyper-Threading 是 『模擬』 2 顆 CPU 的效果, 故其效能是無法等同 2 顆真正的 CPU, 或 1 顆雙核心(稍後介紹)的 CPU;但比起原先單一架構的處理器, 確實可提高不少的執行效率。 同樣簡稱為 『H.T.』 的 Hyper Transport (超傳輸) 技術是由 AMD所開發, 其與 Hyper-Threading 技術完全不同, 主要是作為晶片與晶片之間的高速互連通道, 如:CPU 與北橋晶片, 或南橋與北橋晶片間的連結。
多核心 在個人電腦的 CPU 市場由於競爭激烈, 以及求新求快的消費主義推波助瀾下, 因此CPU 廠商便不斷地提高 CPU 時脈, 汲汲營營於速度之王的寶座。但提高運作時脈也帶來高溫, 早在數年前, 就有人驗證過用 CPU 煎蛋並非只是笑話。
多核心 拜半導體技術躍進之賜, 業界有所謂的摩爾定律 (Moore's Law), 也就是積體電路每平方英吋上的電晶體數量, 每兩年會增加一倍, 使單一晶片能放入更多電晶體, 提供更多的功能。 而個人電腦 CPU 的效能, 則大概每 18 個月成長一倍, 例如 1995 年上市的 100 MHz CPU, 相較於 2005 年上市的 3800 MHz CPU, 其 10 年間速度成長將近 40 倍。
多核心 因此在面臨 CPU 時脈無法再有效提升的瓶頸時, 廠商們改弦易轍, 將多個 CPU 核心包裝在單一個 CPU 晶片上, 也就是所謂的多核心技術。
多核心 以簡單的概念來解釋, 若將 CPU 比喻為廚房, 那麼單核心就像只有一位廚師, 一次只能做一道菜, 必須做完一道菜之後才能再做下一道。 若加上 Hyper-Threading 技術, 那麼這個廚師就有能力一次做兩道菜, 只不過這個廚師必須分心輪流做這兩道菜。
多核心 而雙核心就像是兩個廚師, 可以同時專心做兩道菜, 當然速度要比一個廚師快得多了。這種同時處理多個工作的概念, 稱為平行運算或平行處理。
多核心 目前個人電腦市場上的 CPU 幾乎是多核心的天下, 像是 Intel i 系列及 AMD Athlon II 或 FX 系列等產品。 就連在其它平台, 也都有多核心 CPU 的應用, 例如知名的電玩主機-XBOX 360 所採用的 PowerPC, 就是 3 核心的 CPU, 其驚人的運算能力, 從高解析度、流暢的遊戲畫面上就可以感受得到;再者像平板電腦iPad2 所使用的 Apple A5 處理器, 則是雙核心。
多核心
多核心 而要進一步發揮多核心的功效, 應用程式也需針對多核心架構來設計, 例如像微軟SQL Server、Oracle 等資料庫管理系統之類的伺服器軟體, 以及最新的 Office 2010 都能發揮多核心的長處。
64 位元和 32 位元 CPU 的區別 CPU 的位元數, 主要決定於 CPU 一次能處理的字組 (Word) 大小。而能處理多大的字組, 則是依暫存器的大小而定。暫存器越大, 一個指令週期所能處理的字組便越大。 以 Intel 早期的 8086 CPU 為例, 其一個指令週期可以處理一個 16 Bits 的字組(Word), 因此 8086 被稱為 16 位元的 CPU。 而所謂的 32 位元 CPU, 就是可以處理32 Bits 的字組;同樣地, 64 位元的 CPU 就是可以處理 64 Bits 的字組。
64 位元和 32 位元 CPU 的區別 Intel 與 HP 最早合作推出名為 Itanium 的 64 位元 CPU (通常稱為 IA-64), 主要是針對高階伺服器的市場。因為 IA-64 完全不能向下相容 IA-32 (即 x86 的 32 位元 CPU), 只能執行 64 位元的作業系統及軟體, 故市場接受度較低。
64 位元和 32 位元 CPU 的區別 AMD 推出把 x86 架構擴充成 64 位元版本的 AMD64 技術, 其 CPU 可以執行64 位元或 32 位元的作業系統。 另一方面, Intel 也推出使用 EM64T(後來更名為 Intel 64) 技術的 CPU, 它同樣是把 x86 架構擴充成 64 位元版本的 CPU, 所以也可以執行 32 位元或 64 位元的作業系統。
64 位元和 32 位元 CPU 的區別 目前個人電腦市場所買到的 64 位元 CPU 多半是使用 Intel 64 或 AMD64 技術, 對這類由 x86 架構擴充而來的 64 位元技術, 一般稱其為 x86-64, 也有人簡稱其為 x64。
64 位元和 32 位元 CPU 的區別 64 位元 CPU 仍必須搭配針對 64 位元設計的軟體, 才能發揮效能。雖然 CPU 擁有處理 64 位元字組的能力, 但 32 位元軟體所傳送的仍然是 32 位元的字組, 因此 CPU 一次還是只能處理 32 位元的字組, 另外 32 位元的空間則白白浪費掉了。
64 位元和 32 位元 CPU 的區別 反過來說, 若是以 32 位元的 CPU 執行 64 位元的軟體, 由於軟體所傳送的是 64 位元的字組, 32 位元的 CPU 上根本就放不下, 因此 32 位元的 CPU 是無法執行 64 位元的軟體。 例如 Intel x86 的 CPU 只能向下相容, 卻無法向上相容 (如 16 位元的 286 CPU 無法執行設計給 386 CPU 使用的 32 位元軟體) 的原因即是如此。
64 位元和 32 位元 CPU 的區別 目前仍以 32 位元的軟體最普遍, 但 64 位元版本的作業系統也已日漸普及, 微軟公司的 Windows Vista 與 Windows 7 作業系統就有 32 位元和 64 位元 x86-64 2 種版本, 相信 64 位元的軟硬體變成主流已是指日可待了。
隨堂練習 1. 請觀察您電腦的 BIOS 資訊, 試著算出您電腦 所使用的 CPU, 其內頻、外頻、倍頻係數各 是多少? 3. 請列舉 3 種常見的暫存器, 並簡要地說明其功 能為何?
隨堂練習 4. 請試著上網查詢, 目前 64 位元作業系統有哪 些? 4. 請試著上網查詢, 目前 64 位元作業系統有哪 些? 5. 請試著上網查詢或觀察電腦賣場的報價單, 試 著分辨報價單上的 CPU 是多少位元?有幾 個核心?使用了什麼樣的技術?
2-3 ARM 處理器 一般桌上電腦、筆記型電腦的 CPU 是由 Intel 和 AMD 瓜分, 但是到了手持裝置, 像是平板電腦、PDA, 乃至 MP3 播放器、行動電話, 則可說是 ARM 處理器的天下了。 ARM (Acorn RISC Machines, 或稱 Advanced RISC Machines) 是採 RISC 架構為基礎的 CPU 架構。ARM 公司本身並不生產、製造處理器, 而是以智慧財產(Intellectual Property) 授權的方式, 將晶片設計技術賣給其它廠商, 讓他們生產、製造各自的處理器產品。
2-3 ARM 處理器 以智慧財產授權為主的公司, 稱為 Intellectual Property Provider (簡稱 IP Provider)。其中關於晶片製造的智慧財產, 更被進一步稱為矽智財 (Silicon Intellectual Property)。目前國內的學界, 如:台灣大學、交通大學..等都設有光電研究所, 進行矽智財設計的研究。
2-3 ARM 處理器 ARM 系列的處理器應用相當廣泛, 不管是 PDA、行動電話等消費電子產品, 或是工業控制、網路/通信系統都能看到其身影, 甚至像任天堂 DS/DS-Lite/3DS 系列的遊戲機, 都是採用 ARM 處理器。 ARM 系列的處理器, 基於不同的應用及功能需求, 而有不同等級的處理器架構。
2-3 ARM 處理器
2-3 ARM 處理器 例如目前許多行動電話, 都是使用 ARM7 或 ARM9 架構的處理器;而較高階的 Cortex-A5、Cortex-R5、ARM11MPCore...等則具備多核心能力。雖然架構有所不同, 但其共通特色是體積小、低功耗、低成本、高性能, 因此廣被採用。
2-3 ARM 處理器 由於是採用授權的方式, 所以市面上多數使用 ARM 架構的處理器, 其名稱上並不一定會看到 ARM 的字眼, 而是由生產廠商自訂的名稱, 但若稍微探究一下它們的規格, 就會發現眾多處理器都是系出同門, 均使用相同的 ARM 架構。
2-3-1 XScale 處理器 90 年代, 迪吉多 (DEC, Digital Equipment Corporation) 電腦向 ARM 取得授權, 重新設計出手持裝置使用的 StrongARM 架構處理器。其後, 面臨倒閉的 DEC 將半導體部門出售給 Intel 公司。而 Intel 以 StrongARM 架構為基礎, 設計了 XScale 架構處理器。 目前在 PDA 市場常見的 PXA 系列處理器, 即是 XScale 架構的處理器。
2-3-1 XScale 處理器
2-3-1 XScale 處理器 Intel 已於 2006 年 7 月將 PXA 系列處理器的部門出售給 Marvell 公司。不過 Intel 旗下 XScale 架構的處理器, 尚有 IXC (控制平台處理器)、IOP (IO 處理器)、IXP (網路處理器) 等系列。
2-3-2 Qualcomm Snapdragon 晶片組 高通國際 (Qualcomm International) 是美國知名的通訊廠商, 也是全球最大的無晶圓廠 (fabless) 半導體公司。 該公司有多項通訊相關專利與產品, 其中 Snapdragon 晶片組是將以 ARM 為基礎的處理器, 整合了 3G、WiFi、藍牙、GPS 等多項功能而成的 SoC (System on Chip) 產品, 許多國內外知名的行動電話或小筆電, 其內部都是使用 Snapdragon 晶片組。
2-3-2 Qualcomm Snapdragon 晶片組
2-3-2 Qualcomm Snapdragon 晶片組 高通國際在 2 0 1 2 年推出最新的Snapdragon 晶片組整合 4 核心架構、最高達 2.5GHz 時脈, 並加入圖形處理器 (GPU), 而且耗用的電力反而減少。 可以想見這些高性能的晶片組, 將使手持裝置的處理能力更上層樓
2-3-3 Windows 與 ARM 在個人電腦產業向來用 Wintel 聯盟, 來說明微軟的 Windows 作業系統加 Intel 微理器的軟硬體組合, 主宰了個人電腦市場及發展。 然而由於網路的發展、Google 的崛起、個人電腦走向行動化等發展, 使得 Wintel 的關係不再牢不可破。
2-3-3 Windows 與 ARM 有鑑於眾多小筆電與平板電腦改採 ARM + Android (Google推出的作業系統, 參見第 8 章) 組合, 微軟也開始著手將 Windows 作業系統移植到 ARM 平台。 並在 2011 年於消費電子展 (CES) 上正式宣布下一代的 Windows 8 作業系統將支援 ARM 平台, 並現場展示了 Windows 8 在包含 Qualcomm、NVIDIA 及德州儀器 (TI) 等公司 ARM 的處理器平台上的執行效果。
隨堂練習 1.請研究一下家中使用的行動電話、網路設備、影音裝置. . .等, 是否是使用 ARM處理器?並可統計一下使用 ARM 處理器與非 ARM 處理器的比例為何。
2-4 其他 CPU 大型電腦、手持裝置 (PDA、行動電話...等)、各種網路設備 (IP 分享器、路由器、無線 AP...等), 這些裝置或大或小, 但也都是電腦, 也需要使用 CPU。 或許您手上、家中就有這些裝置, 但是您知道它們使用的是哪一種 CPU 嗎?以下我們來看看除了 x86、ARM 系列的 CPU 之外, 還有哪些 CPU 種類。
Power 系列處理器 Power 是由 IBM 公司設計的處理器, 全名為 『Performance Optimized With Enhanced RISC』, 由其全名便可了解 Power 處理器是採用 RISC 架構。 Power 處理器多使用於 IBM 的大型電腦、超級電腦、伺服器、工作站...等。其後, IBM 與 Apple 及摩托羅拉 (Motorola) 公司合作成立了 AIM 聯盟 (AIM alliance), 將 Power CPU 的架構重新設計, 發展出 PowerPC 處理器。
Power 系列處理器 先前PowerPC 最廣為人知的, 就是用於 Apple 公司的麥金塔 (Macintosh) 電腦。
Power 系列處理器 使用 PowerPC 處理器的麥金塔電腦, 通常會以 Power Macintosh (簡稱 Power Mac) 來表示。最後一款使用 PowerPC 處理器的麥金塔電腦為 Power Mac G5。其後 Apple 的電腦則改用 Intel x86 系列處理器。
Power 系列處理器 目前除了 IBM 的伺服器產品外, PowerPC 處理器亦廣泛用於各種嵌入式系統, 從汽車至戰鬥機都可看到其應用。 此外 PowerPC 處理器也被許多電玩遊戲機採用, 像是微軟公司開發的 XBOX 360 遊戲機, 及任天堂公司開發的 Wii 遊戲機, 都是採用 PowerPC 處理器。
Power 系列處理器
Power 系列處理器 繼 PowerPC 之後, Power 系列處理器又有了新的成員-Cell 處理器。IBM 和 Sony、Toshiba 公司合作, 以 PowerPC 的架構作為基礎, 開發出 Cell 處理器。 目前Cell處理器使用於Sony公司的 PlayStation 3 遊戲機, 以及 IBM 的刀鋒伺服器(Blade Server) 上, 而 Toshiba 公司則用於高階的 HDTV、3D 電視等產品。
MIPS 架構處理器 2-2 節提到的 MIPS 是『Millions of Instruction Per Second, 每秒百萬指令』, 是計量 CPU 運算速度的單位;而此處所提的 MIPS, 是 『Microprocessor without Interlocked Pipeline Stages』 的縮寫, 為一種 CPU 的架構。 MIPS 架構最初是由美國史丹佛大學的研究團隊所設計出來的, 其概念是利用簡單的硬體架構, 加上強大編譯器, 以達到高效能的輸出。
MIPS 架構處理器
MIPS 架構處理器 MIPS 公司於1984年成立, 並於 1986 年推出第一款商業化的 MIPS 處理器-R2000。 MIPS 公司在 1992 年被 SGI (Silicon Graphics, Inc.) 公司併購, 後來又脫離 SGI 成為 MIPS 科技公司。 目前 MIPS 公司本身並不製造 CPU, 而改以智慧財產授權 (也就是 MIPS 的技術授權) 為主要業務。
MIPS 架構處理器 MIPS 曾一度是世界上銷售最多的 CPU, 例如 Sony PlayStation (後來改稱為 PS One) 遊戲機所採用的 MIPS R3000A 處理器, 其銷售量就超過 1 億顆。掌上型遊戲機 Sony PSP (PlayStation Portable) 亦是採用 MIPS 的 CPU。
隨堂練習 1. 請和同學一起討論, 自己的電腦和計算機中心 的電腦, 有沒有使用非 x86 系列的 CPU? 2. 請試著上網查詢您的手機、PDA、電玩遊戲 機...等, 所使用的 CPU 之相關資料。
特別企劃 CPU 算太慢?GPU 來幫忙!- 利用繪圖處理器進行一般計算 在本章內文提到, 多核心、平行運算、電腦叢集...等發展, 主要就是為了提供更強更快的運算能力, 除了使用更多的 CPU、更多核心外, 就連繪圖處理器 (GPU, Graphics Processing Units) 也加入這場電腦運算競技大賽。
特別企劃 CPU 算太慢?GPU 來幫忙!- 利用繪圖處理器進行一般計算 讀者可能好奇, 圖形處理器不就只是做圖形的處理, 能提供什麼樣的運算能力呢?我們可由繪圖卡 (顯示卡) 的功能演進, 來瞭解這個發展趨勢。 120
特別企劃 從繪圖晶片到 GPU 早期個人電腦的運算能力不強、顯示器的解析度/色彩數也不高, 因此繪圖相關的應用也有限, 最初電腦甚至不需顯示卡、而是利用主機板上的晶片來做顯示器的視訊輸出。 121
特別企劃 從繪圖晶片到 GPU 隨著軟硬體功能的加強, 以及使用者的需求 (像是採圖形操作介面的 Windows 作業系統問世), 開始有提供 2D 繪圖功能的『加速卡』, 意指卡上內建基本的 2D 繪圖處理能力 (像是圖塊的移動、變形等) , 可『加速』電腦繪圖的處理速度。 122
特別企劃 從繪圖晶片到 GPU 接著進入 3D 加速的年代, 利用顯示卡上的晶片實做 3D 繪圖相關處理, 減輕 CPU 的負擔、加速圖形的顯示, 此時顯示晶片已需做相當複雜的處理和計算, 所以 Nvidia 公司在 1999 年推出其產品 GeForce 256, 率先提出 GPU (Graphics Processing Units) 這個名詞。 123
特別企劃 從專用的繪圖功能到通用的運算能力 電腦的 3D 繪圖是將採用 3D 座標設計的物件, 投影到 2D 的顯示平面上, 此過程稱為繪圖管線 (Graphics Pipeline)。 為加速電腦繪圖的速度, 早期的 GPU 就將管線中各階段以硬體來實作, 例如計算圖形頂點在螢幕上的位置、光源的位置、移除重疊的部份、將圖點上色...等。 124
特別企劃 從專用的繪圖功能到通用的運算能力 但因為硬體線路是固定的, 所以繪圖晶片做好之後功能就不能改變, 然而不同類型的 3D 圖形, 著重的運算不同:例如有些圖形可能有許多 3D 物件, 計算頂點位置費時、有些則是上色階段很費時, 因而會造成處理上的瓶頸與資源上的浪費。 125
特別企劃 從專用的繪圖功能到通用的運算能力 由於這些處理其實都要用到大量的浮點運算, 所以廠商讓原本功能固定的 GPU, 改良為具備可程式化 (Programmable) 的能力, 亦即可由程式控制硬體所要執行的功能, 達到有效的資源分配, 提高整體運作的效率。 126
特別企劃 從專用的繪圖功能到通用的運算能力 可程式化 GPU 的出現, 加上優於 CPU 的浮點運算能力, 就有人想到可以利用 GPU 處理繪圖以外的一般性運算。 127
特別企劃 驚人的浮點運算能力 前面提過的摩爾定律, 也同樣適用於 GPU, 隨著半導體技術的發展, GPU 可以加入更多的電晶體, 實做更多的管線 (平行處理) 和處理單元, 連帶使 GPU 的浮點運算能力快速提升。 128
特別企劃 驚人的浮點運算能力 評估浮點運算能力有一種單位稱為 GFlops, 也就是以『每秒可做十億次浮點運算』為單位, 在 2007 年底推出的 NVidia GeForce 8800 系列中的入門級繪圖處理器已可達300GFlops 以上。 129
特別企劃 驚人的浮點運算能力 但同期的 Intel 頂級產品 Core 2 Extreme QX9650 則只有 40GFlops 的水準。且兩方面的差距還在擴大, 目前個人電腦 CPU 才勉強達到 100GFlops 的水準, 但 GPU 的已可達上千 GFlops 了。 130
特別企劃 GPGPU 有鑑於 GPU 的運算能力強大, 加上其可程式化的能力, 於是就有人提出 GPGPU (General Purpose computing on Graphics Processing Units) 的概念, 也就是在 GPU 上進行一般性的運算。不過由於兩者架構不同, 無法輕易將為 CPU 設計的運算程式移植到 GPU 上, 加上初期控制 GPU 的方式仍不夠友善, 應用較不普及。 131
特別企劃 GPGPU 所幸眾廠商與組織也在努力提供較佳的方案, 以便讓 GPGPU 應用能更普及。例如兩家主要 GPU 廠商都提出 GPGPU 的程式設計架構:NVidia 提出 CUDA (Compute Unified Device Architecture)、AMD (購併 ATI) 則提出 APP (Accelerated Parallel Processing) 技術 (原本稱為 ATI Stream)。 132
特別企劃 GPGPU 另一方面, 由包括 NVidia、ATI、Intel 等廠商合作成立的 Khronos Group 組織, 則在制定名為 OpenCL (Open Computing Language) 程式設計介面, 其目的即是希望讓程式能透過一致的方式, 就能同時應用 CPU、GPU 等不同資源來進行運算。 133
特別企劃 GPGPU 而一些學術、研究單位, 更是早已讓 GPGPU 實用化, 例如我國的國家實驗研究院高速網路與計算中心 (國網中心) 就已建立 6.0TFlops 的 GPU 叢集電腦, 並已在 2010 年開放外界申請使用其運算服務。 134
特別企劃 GPGPU 而檢視 2011 年 11 月的 Top500 清單, 就可看到前 5 名內有 3 部電腦都是利用 GPU 來提升其運算能力, 可以預見未來將會有更多 GPGPU 的應用。 135
特別企劃 GPGPU 136
特別企劃 GPGPU 137