CPU是什麼?它在電腦和手機裡做些什麼
CPU(中央處理器)是把程式裡寫的指令一個一個取出來,照著指令進行計算或讀寫資料的零件。每個指令都是「加」「比較」這類簡單的動作,但CPU每秒能重複數十億次。電腦和手機的應用程式、汽車和家電的控制,都是靠這種簡單動作的反覆累積在運作。
這篇文章可以了解
- CPU實際在做的事(不斷重複「取出指令、執行指令」)
- 「3 GHz」「8核心」等數字的意思,以及為什麼光看數字無法決定速度
- CPU與記憶體、儲存裝置、GPU的角色差異
- 電腦用的應用程式,為什麼不能直接在手機上執行(指令集的差異)
前提知識:不需要。如果知道電晶體是「用電切換的小開關」,後半會比較容易讀。
生活中的例子
在手機上點一下照片放大。用試算表軟體算出總和。冷氣配合房間的溫度把風減弱。這些動作的背後,都有CPU在運作。
電腦和手機的規格表上,會列出「最高3.5 GHz」「8核心」這類數字。新聞中也會出現「x86」「Arm」等詞。本文會依序看看CPU實際在做什麼,同時說明這些數字和詞的意思。
CPU的工作是執行「指令」
用一句話來說,CPU的工作就是執行程式。程式是把想讓電腦做的工作,分成非常小的步驟排列起來的東西。其中每一個步驟,稱為「指令」。
CPU能直接處理的指令,簡單得出乎意料。代表性的種類如下。
- 讀取、寫入:從記憶體拿來數字。把數字存回記憶體
- 計算:把2個數相加、相減等
- 比較:查看2個數哪個比較大,或是否相等
- 跳躍:依比較的結果,改變下一個要執行的指令位置
例如,想想「按下按鈕後,讓畫面上的數字加1」這項工作。在CPU中,它會變成「讀取數字」「加1」「寫回」這一串指令。「有沒有按下」的判斷,則由「比較」和「跳躍」組合而成。修照片也好、玩遊戲也好,追根究柢都是這類指令的龐大組合。
CPU接收的指令不是用文字寫成,而是用0和1的排列寫成。這種形式的程式稱為「機器碼」。人寫的程式,要先轉換成機器碼,再交給CPU執行。另外,這裡為了簡化,只列出了代表性的指令種類。
「取出→解讀→執行」的反覆
一串指令放在稱為記憶體的零件中。記憶體是把大量數字加上位址(位置的編號)記住的零件。CPU指定位址,讀寫記憶體的內容。
程式的指令和計算用的資料,都排放在同一個記憶體中。只要換掉程式,同一台機器就能做完全不同的工作,就是這個緣故。這種方式稱為馮紐曼架構,現在幾乎所有電腦都是根據這個想法製造的。
CPU會不斷重複以下3個階段。
- 取出(擷取):從記憶體拿來下一個要執行的指令
- 解讀(解碼):讀懂這串0和1的排列,是要做什麼的指令
- 執行:進行計算或比較。需要時讀寫記憶體中的資料
下一個要取出哪個位址的指令,由CPU內部的一個小記憶位置記住。這稱為「程式計數器」。平常每執行1個指令,就前進到下一個位址;只有遇到「跳躍」指令時,才改寫成別的位址。重複執行和依條件分岔,都是用這個機制做出來的。
實際的CPU不會等1個指令走完這3個階段,而是像生產線一樣重疊進行。這稱為管線化處理。而且,能同時進行多個指令的CPU也很普遍。即使如此,結果都設計成和依照程式順序一個一個執行時相同。
時脈頻率:「3 GHz」是什麼數字?
CPU內部的電路,會配合以固定間隔送來的訊號,一點一點推進處理。這個訊號稱為「時脈」。它是規律地重複開、關的電訊號。
時脈頻率表示這個訊號1秒內來幾次。單位Hz(赫茲)是「每秒的次數」,G(giga)是10億。所以3 GHz的意思是,1秒內有30億次訊號。訊號的間隔只有約0.33奈秒(1奈秒是10億分之1秒)。
不過,1次訊號能完成幾個指令,依CPU的設計而不同。這個「每1個時脈能執行的指令數」稱為IPC(Instructions Per Cycle的縮寫)。1秒能執行的指令數,大致是「時脈頻率 × IPC」。即使頻率相同,IPC如果是2倍,同樣時間內就能執行2倍的指令。
此外,現在的CPU會依工作量和溫度,細微地調高或調低頻率。規格表上的「最高○ GHz」是條件良好時的上限,並不是一直以這個速度運作。
核心:負責執行指令的部分有好幾個
取出並執行指令的一整套電路,稱為「核心」。晶片是在小小的矽板上做出電路的零件。過去的CPU,1顆晶片上只有1個核心。現在幾乎所有CPU都有多個核心。8核心的CPU,可以同時進行8件工作(8串指令)。
核心會增加,是因為持續提高時脈頻率變得困難。要提高頻率,也必須提高電壓,耗電和發熱會急遽增加。2000年代中期,電腦用CPU的頻率停滯在數GHz。於是各家公司不再提高頻率,而是轉往增加核心的方向。
手機的CPU,很多是把效能高的大核心和耗電少的小核心組合在一起。例如iPhone 15 Pro(2023年)的CPU是6核心。根據Apple的規格,包含2個效能核心和4個節能核心。收信這類輕鬆的工作交給小核心,就能減少電池的消耗。
CPU、記憶體、儲存裝置的角色差異
CPU內部也有記憶的地方,但量非常少。CPU工作時,程式和資料主要放在記憶體(主記憶體)中。規格表上寫的「記憶體8 GB」,指的就是這個。現在的記憶體通常是叫作DRAM的零件,讀寫很快,但關掉電源內容就會消失。
另一方面,關掉電源也能保留照片和應用程式的地方,就是「儲存裝置」。手機的「256 GB」、電腦的SSD都屬於這一類。啟動應用程式時,它的內容會從儲存裝置讀進記憶體,CPU再執行記憶體上的指令。
從CPU的角度看,就連記憶體都很遠,讀取時要等待一段時間。因此,CPU會把常用資料的副本,放在自己身邊又小又快的記憶位置。這稱為快取。記憶體和儲存裝置的差異,在「記憶體和儲存空間有什麼不同?」中詳細說明。
CPU在哪裡?
在電腦中,CPU常常做成獨立的1顆晶片。不過,最近和手機採用相同做法的電腦也增加了。
在手機中,CPU不是單獨的零件。它和繪製影像的電路、通訊的電路等,一起集中在1顆晶片上。這種晶片稱為SoC。集中成1顆,就能做得更小,也更省電。Apple從2020年開始用在Mac上的M1等晶片,也是這種SoC。
汽車和家電中也有CPU。很多是在CPU加上小型記憶體和輸入輸出的電路,做成1顆晶片,稱為微控制器。它負責電子鍋的火候、冷氣的風量、汽車引擎和煞車的控制等。根據技術雜誌IEEE Spectrum(2021年),高級車中,這類控制用的電腦有的多達150個以上。
微控制器和電腦用CPU的差異,整理在「MCU與MPU的差異」的表格中。
CPU與GPU的差異
電腦和手機中,除了CPU,還有一種叫GPU的計算用零件。GPU原本是為了在畫面上繪圖而製造的。這項工作是用相同的步驟,同時計算畫面上數百萬個點的顏色。
CPU和GPU的差異,在於擅長的工作形式。CPU用數量較少的高效能核心,擅長把分岔很多的各種工作,一件一件快速處理完。GPU則排列了數千個簡單的計算電路,擅長把相同的計算一次套用在大量資料上。AI的計算常用GPU,是因為其中很多都是「相同計算的大量反覆」。
兩者沒有高下之分,而是分工。通常由CPU安排整體的流程,再把適合的計算交給GPU。差異整理在「CPU與GPU的差異」的表格中。
CPU由電晶體構成
CPU的電路,是把大量用電切換的小開關連接起來做成的。這種開關叫作電晶體。把開關組合起來,就能做出做簡單判斷的電路,例如「2個輸入都是1,就輸出1」。這稱為「邏輯電路」。
再把邏輯電路組合起來,就能做出把用0和1表示的數(二進位)相加的電路,以及記住數字的電路。把它們組合好幾層,就成了能取出、解讀、執行指令的CPU。電晶體的原理在「電晶體是什麼?」中說明。邏輯電路可以用「邏輯電路模擬器」實際組合試試看。
CPU使用的電晶體數量,隨著時代大幅增加。1971年發售的Intel 4004,是最早收進1顆晶片的CPU(微處理器)之一。它的電晶體約2,300個。2020年發表的Apple M1,約有160億個。不過,M1的數字不只是CPU的部分,而是包含GPU等在內的整顆晶片的數量。
指令集:x86與Arm的差異
CPU有哪些指令,各用0和1的什麼排列來表示,這個約定稱為指令集。正式名稱是「指令集架構(ISA)」。指令集是軟體和CPU之間的約定。只要指令集相同,即使內部電路的構造和速度不同,也能執行相同機器碼的程式。
廣泛使用的指令集,代表有2種。一種是「x86」,從Intel在1978年發表的8086延續下來,用在許多Windows電腦和伺服器上。另一種是「Arm」。根據Arm公司截至2024年3月的年度報告,Arm在手機用CPU中的比例,多年來都超過99%。
電腦用的應用程式不能直接在手機上執行,原因之一就是這個差異。人寫的程式,一般會先用轉換用的軟體變成機器碼再發布。這時,就要決定轉成哪種指令集的機器碼。x86用的機器碼,對Arm的CPU來說是一串意思不通的0和1。
不過,這是簡化過的說明。實際上,還有管理整台電腦的基本軟體(作業系統,OS)的差異。即使是相同的CPU,Windows的應用程式也不能直接在Android上執行。反過來,只要使用轉換的機制,也能執行為其他指令集設計的應用程式。
例如,Apple從2020年開始,把Mac的CPU從Intel的產品改為Arm架構的自家晶片。當時,Apple準備了「Rosetta 2」這個機制,可以把Intel用的應用程式轉換後執行。此外,也有把兩種機器碼放進同一個應用程式發布的方法,Apple建議開發者採用這種方法。
常見的誤解
誤解:CPU是電腦的「大腦」,會自己思考
實際上,CPU不理解指令的意思,只是照著寫好的指令執行。應用程式看起來聰明,是因為人寫的程式設計得好。AI也一樣,是CPU或GPU在執行由大量資料做出來的計算步驟。此外,程式和資料大部分都在CPU外面的記憶體和儲存裝置中。「大腦」的比喻容易讓人誤以為CPU在思考或記憶,所以本文不使用。
誤解:GHz數字越大的CPU越快
實際上,速度不只由時脈頻率決定。1個時脈能完成的指令數(IPC)、核心數、等待記憶體的時間等,影響都很大。設計不同的CPU之間,頻率較低的反而較快,也是常有的事。同系列的產品之間,頻率可以當作參考。廠牌或世代不同時,要用接近實際用途的程式實測的結果(基準測試)來比較,才可靠。
誤解:核心變成2倍,什麼都會快2倍
實際上,會變快的只有能拆開、同時進行的部分。必須等前一個計算結果才能往下走的部分,增加核心也不會變快。這個極限稱為阿姆達爾定律。可以用「阿姆達爾定律計算工具」,改變能拆開的比例和核心數,實際確認看看。
從數字來看
| 項目 | 數字 | 比較起來 |
|---|---|---|
| 3 GHz時脈1次的間隔 | 約0.33奈秒 | 連光也只能前進約10 cm的時間 |
| Intel 4004的時脈(1971年) | 最高740 kHz(1秒74萬次) | 現在數GHz的CPU,是它的數千倍 |
| 電晶體數量 | 4004約2,300個,M1(2020年)約160億個 | 約50年間增加約700萬倍 |
| iPhone 15 Pro(2023年)的CPU核心 | 6核心 | 效能核心2個+節能核心4個 |
| Arm在手機用CPU中的比例 | 超過99% | Arm公司截至2024年3月的年度報告 |
光1秒約前進30萬km。把它分成30億份,每份約10 cm。CPU中的訊號,必須在這麼短的時間內通過電路。
從表中可以看出,時脈增加數千倍的期間,電晶體數量增加了約700萬倍。CPU變快的原因不只是頻率。利用增加的電晶體,增加核心和快取,讓1個時脈能完成更多指令,這點的影響更大。
進一步學習
- 用表格看差異:RISC與CISC的差異(指令集的設計理念)、ASIC、FPGA、SoC的差異
- 下一步的用語:分支預測、超純量(讓CPU跑得更快的設計)
- 用圖來看:讓指令重疊進行的管線,以及記憶體的階層,都在圖解的一覽中
- 從基礎讀起:「半導體是什麼?」