開場先來張懷舊古董 CPU 照。

thumbnail
同場加映:CPU 背面照、傳說中的跪主機板

Intel 13/14 代 65W 以上 Core CPU 因產品瑕疵當機甚至損壞的事情最近鬧得沸沸揚揚,爬文搞清楚怎麼回事,也長了些知識。


(幸好我的 PC 是 12 代 i5,快寫點程式壓壓驚)

問題始於今年初起,Intel 13、14 代 i7、i9 CPU 開始在全球傳出大規模災情,許多使用者回報在高負載時程式會閃退或 BSOD 死當,最早 Intel 將問題歸咎於主機板預設 CPU 電壓過高,CPU 長期處於高溫導致不穩定及功能異常(甚至造成永久性損壞)。Workaround 是要主機版廠商修改 BIOS 預設電壓並鎖住超頻功能,但使用者發現此一調整讓 CPU 性能狂降 40%,i9 變 i5,引發消費者不滿。新聞

幾個月後,Intel 終於承認這是 CPU 本身的問題。依據研究人員說法,問題根源出在 CPU 裡的 Microcode 有問題,導致控制失準讓電壓過高,預計會在八月中旬釋出 Microcode 更新以解決問題。

讀完新聞,土包子學到新知識 - Microcode 微程式。原來 CPU 跟主機板一樣,有韌體可以更新。

CISC 架構的處理器會將較複雜的指令分解成一串相對簡單的指令,簡單指令用電路實作,複雜指令則被寫成軟體程式,儲存在 ROM 或 PLA 中,而這部分就稱為 Microcode。

Intel 從 Pentium Pro (1990 年代中期) 開始推出可透過 OS 或 BIOS 更新 CPU Microcode 的設計 參考,如此在發現 CPU 有 Bug 時可透過軟體更新修正,省下召回產品的可觀成本,這應該源自 Intel 從 Pentium 浮點數除法(FDIV) Bug 事件所學到的教訓。

至於 Microcode 長什麼樣子,其實只是一堆用機器語言指令寫成的無趣函式,Github 上有個 Python 開源專案解析了 Intel Pentium/Celeron/Atom x86 CPU 的 Microcode (過程還必須找出加密金鑰解密更新包 😛),大概像下面這樣,這是 Microcode 其中一個函式 Sub_75C 的內容:

最後,聊聊這幾年 CPU 架構的趨勢變化。

處理器依據指令集可分為兩大類:CISC (Complex Instruction Set Computer) 及 RISC (Reduced Instruction Set Computer),二者的設計哲學大相逕庭。

一開始處理器都是採用 CISC (當時也沒其他設計,CISC 的名字是 RISC 出現後才加上),加減乘除不管複雜度都做成單一處理器指令,對映到一個機器語言(組合語言)指令,方便程式設計師用組合語言指令開發程式。但後來大家發現,整個指令集通常只有 20% 的指令會常常用到,在全部程式碼裡佔了超過八成。如此,為剩下 80% 不常用的指令所投資的設計時間、硬體電路成本便顯得極不划算。1979 年柏克萊大學 David Patterson 教授首先提出 RISC 概念,主張硬體應該專心加速常用指令,較複雜的指令可交給編譯器轉換,用常用指令去組合出所要的結果。指令集簡化後的 CPU,硬體架構簡單可降低製造成本,也更容易進行優化提高效能。

靠著不同的指令集設計哲學,RISC 帶來硬體簡化,設計及製造成本降低,電晶體數量少降低耗電等優勢,而由於指令簡單,可以速度快的暫存器運算為主,加上指令長度固定,都有利於提高執行效能。但 RISC 也有缺點,編譯後的二進位程式碼檔案體積較大、載入時間變長,但隨著儲存裝置的技術演進,速度加快,成本降低,這些缺點如今看來幾乎都可忽略。延伸閱讀:完全看懂 ARM 處理器:RISC 與 CISC 是什麼?歷史、架構一次看透

從我學寫程式開始,x86/x64 CISC CPU 一直稱霸個人電腦及 Wintel 伺服器領域。但這幾年來風向有點改變,手機平板用的 Arm CPU 又快又省電令人印象深刻,Apple M 系列 CPU 的高效能低耗電更讓人耳目一新,微軟今年強打的 AI PC,第一波推出機型竟是採用 Arm 處理器(延伸閱讀:走出 Wintel 舒適圈,初試 Arm64 Windows)。感覺這場 CISC 與 RISC 的競爭正出現轉折,或許過幾年有機會見證 CPU 架構出現黃金交叉。(幸好我的主力開發語言 .NET 已跨平台,換 CPU 架構也不用怕,哈!)


Comments

# by Joker

苦主+1, I7 13700 K 結果跑個遊戲居然就閃退了 只能降等玩,還沒有售後,嘖嘖

# by 小黑

AMD 如何?似乎便宜一些又穩?

# by yoyo

其實寫應用程式的開發人員不用擔心CPU架構,大部分程式語言compiler都會幫你處理好 (如同x86/x64) OS層以下及韌體RD較有影響

# by Geff

報告大大, 嚴格來說, 上述應該是(機器語言)對應的組合語言, 而不是機器語言. 機器語言應該全部是 1010001 之類的玩意, 小弟曾遇強者, 據說能直接看懂 6502 的機器語言(當然是 16 進位制).

Post a comment