本次 Nvidia GTC 大會的一大焦點,肯定是 NVIDIA 將推出 RTX Spark,採用 ARM 架構 Grace CPU (20 Arm 核心 + Blackwell GPU)及大容量記憶體,運行 Windows on Arm 的新世代 PC,在地端跑 AI 模型將不再遙不可及。(咳,前題是荷包能扛得住)


畫面來源

長期使用 Windows 的一般電腦玩家,講到處理器,腦中想到應該就只有 Intel 與 AMD 二選一。但其實處理器世界不只 x86/x64,甚至 CISC 之外有另一個更大陣營 RISC,近年來全面主宰了 PC/Notebook 以外的世界,新版 MacBook、iPhone、Android 手機/平板,幾乎都是 RISC 處理器的天下。

我因為有玩 Linux,很早前就知道世界不只 x86/x64,但對這堆名詞一知半解。像是 Debian 下載區,我只知道如果是 PC 筆電要裝機,要選 amd64 (為什麼不是 x64?),其餘就不知了。

趁著這次 RTX Spark 採用 Arm 處理器的話題,整理一下處理器常識。
(註:我對計算機結構研究有限,以下會以建立基本常識為目標,點到為止,但如有發現謬誤,歡迎指正)

CISC vs RISC

處理器依據「指令集架構 (ISA) 」可分為兩大陣營:CISC (複雜指令集) 與 RISC (精簡指令集) ,採行截然不同的設計哲學。

  • CISC (Complex Instruction Set Computer)
    核心理念: 用最少的程式碼行數完成任務
    始於 1970 年代,當時記憶體極貴且容量小,編譯器技術也不成熟。CISC 的目標是從硬體層直接支援複雜功能,讓程式設計師能用一個指令就能完成很多步驟,從而節省珍貴的記憶體空間。
    典型代表是大家熟知的 Intel Core/Xeon/Atom、AMD 的 Ryzen、EPYC。
  • RISC (Reduced Instruction Set Computer)
    核心理念: 用最簡單、執行速度最快的基礎指令來組合出複雜功能
    1980 年代,科學家發現大部分程式執行時間集中於少數簡單指令,許多複雜指令使用頻率偏低,同時由於記憶體變便宜,編譯器變強,若處理器只實作簡單指令,簡化指令集有助於管線化設計與提高時脈效率,也能降低硬體複雜度,降低硬體設計及製造成本,並有省電減少功耗的額外效果。 典型代表有 Apple Silicon (M / A 系列)、Qualcomm Snapdragon (驍龍)、AWS Graviton / NVIDIA Grace 等雲端伺服器專用處理器、應用於 AI 加速晶片 / 車載晶片 / 新興 Linux 開發板的 RISC-V ... 等等。

但近年來,CISC 與 RISC 的界線已開始模糊。Intel Core 或 AMD Ryzen 處理器內建了硬體解碼器,當 CISC 指令輸入時,會被拆解成多個類似 RISC 的微指令 (Micro-ops) 再以高效率管線 (Pipeline) 執行;現代的 ARM 處理器為了應對 AI、3D 繪圖與多媒體運算,加入向量運算、矩陣運算、加密與 AI 相關擴充功能,使 ISA 規模與功能日益複雜。

ARM 王朝

ARM 架構(Advanced RISC Machine,更早稱作 Acorn RISC Machine) ,由 Acorn 公司於 1983 年開始發展,他們嫌當時市場上的主流處理(包含 Intel 286 和 Motorola 68000)要不是速度太慢,就是太貴,決定自己動手設計 RISC 處理器。

第一代 ARM1 電晶體數量只有約 25,000 個 (Intel 386 有 275,000 個),當時還有段小插曲,工程師意外發現 ARM1 在拔掉電源線後居然還能單靠一條測試訊號線的微弱漏電繼續運作(註:實驗室環境的低時脈測試),由此可見 RISC 極其省電的特性,這也是 30 年後 ARM 能稱霸行動裝置的關鍵之一。

1990 年,Acorn、Apple 以及晶片代工廠 VLSI Technology 合資將 ARM 部門獨立成為一家新公司,全名改為 Advanced RISC Machines Ltd,也就是今天的 ARM 公司。ARM CEO 評估自己沒本錢蓋晶片廠與 Intel 對決,便做了一個大膽決定,ARM 自己不製造也不販售實體晶片,而是將設計圖授權給其他半導體公司,收取授權費與權利金。

Nokia 在開發 6110 手機時嫌 32 位元程式碼太佔記憶體空間(當時記憶體很貴,呃... 今年也是),ARM 為此開發了 Thumb 指令集,將常用指令改以 16 位元編碼,大幅降低成本,讓 ARM 漸成手機晶片的隱形標準。第一代 iPhone 搭載的是三星製造的 ARM 架構處理器,隨後崛起的 Android 陣營 (高通、聯發科) 也全數採用 ARM 架構。因為智慧型手機非常在乎電池續航力,x86 陣營在功耗上終始無法與 ARM 抗衡,只能任由主打省電的 ARM 在行動裝置世界稱霸。

2020 年,蘋果宣布 Mac 電腦全面放棄 Intel 晶片,改用自家設計、基於 ARM 指令集架構的 Apple Silicon (M1/M2/M3/M4) ,一舉證明 ARM 不僅節能,在效能上不輸傳統 x86 桌機高階處理器。而隨著 ESG 節能減碳要求與雲端運算成本上升,AWS (Graviton 家族)、微軟 (Cobalt 系列) 和 Google (Axion 系列) 也纷纷在自家雲端資料中心大量引進 ARM 架構伺服器。

時至今日,CISC 家族的 x86/x64 處理器,除了在 PC 筆電界仍保有一席之地,從手機、IoT 到雲端伺服器,RISC 架構已佔據絕大多數新成長市場。而 NVIDIA RTX Spark 主推採用 ARM 處理器 AI PC,CISC 不知會不會失去最後的聖地?

延伸閱讀:

編譯版本的處理器代號

最後,來學會看懂 Debian 編譯版本代號列舉的 CPU 指令集架構代號,涵蓋了當今主流的開放生態系統處理器家族,搞懂它就算把常見的處理器類型認識一輪:

  1. amd64
    對應現代絕大多數的 Intel 與 AMD 的 64 位元處理器,名稱用 amd 而不是 x64 是因為 AMD 當年率先制定了這個 64 位元標準,現今的個人電腦、筆記型電腦、雲端 VM,大部分都屬於 amd64 家族。
  2. arm64 (又稱 AArch64)
    64 位元的 ARM 處理器 (ARMv8-A 及之後的架構),常見於 Raspberry Pi 3 / 4 / 5 (樹莓派 64 位元作業系統)、Apple Silicon (M1/M2/M3)、高通 Snapdragon 筆電,以及越來越多雲端廠商提供的 ARM 伺服器 (如 AWS Graviton)。
  3. armhf
    支援硬體浮點運算的 32 位元 ARM 處理器 (ARMv7 架構),hf 代表 Hard Float (硬體浮點運算)。早期的 32 位元 ARM 處理器如果遇到小數點運算,需要用軟體模擬 (很慢);armhf 則是針對擁有硬體浮點運算單元 (FPU) 的 32 位元晶片,常見於 ARMv7 世代的嵌入式設備、工業電腦與部分舊款 Raspberry Pi。
  4. ppc64el
    IBM 的 POWER 架構處理器 (64 位元,小端序 Little-Endian),主要用於企業級的高階伺服器、大型資料中心,特別是 IBM Power Systems 伺服器 (如 POWER8 / POWER9 / POWER10)。
  5. riscv64
    64 位元的 RISC-V 架構處理器。RISC-V 是近年非常熱門的開源指令集架構,不像 ARM 需要支付昂貴的授權費,被視為未來抗衡 ARM 與 x86 的明星。常見裝置包含新生代開發板 (如 Milk-V、SiFive、StarFive VisionFive 2) 以及科研機構、物聯網晶片、定制化 AI 加速器。
  6. s390x
    IBM 的 z/Architecture 大型主機 (Mainframe) 處理器,常用於金融業或極端高併發核心系統的「大型主機」(如 IBM z15 / z16),非尋常百姓可及。
  7. i386
    對應傳統 32 位元 的 Intel 與 AMD 處理器 (x86 架構,現在幾乎找不到只能跑 32 位元的純硬體 CPU。
  8. armel
    對應早期不帶硬體浮點運算單元的 32 位元 ARM 處理器 (主要是 ARMv4t, ARMv5, ARMv6 架構) ,出現在早期網路儲存伺服器 (老舊的 NAS,如早期 QNAP/Synology 的低階型號) 、初代或古董級的嵌入式開發板。
  9. mips64el
    64 位元的 MIPS 架構處理器 (小端序),MIPS 是一種老牌的 RISC 指令集架構,在 1990 年代曾與 ARM、SPARC 齊名,廣泛用於 SGI 工作站、索尼的 PlayStation 2 (PS2) 以及早期的寬頻路由器。
  10. loong64 對應中國龍芯中科 (Loongson) 研發的 LoongArch (龍架構) 64 位元處理器,由於 MIPS 架構走向終點,龍芯中科在 2021 年推出自主設計的指令集架構 LoongArch。在設計理念上借鑑了 MIPS 與 RISC-V 等 RISC 哲學,但是一套完全獨立、擁有自主智慧財產權的全新指令集。

文章的最後,解答一個我長久以來的疑惑:x86、i386、amd64、x64 怎麼分?

  • x86 - 1978 年 Intel 8086 傳承下來的指令集架構,始於 16 位元的 8086/80286,但 x86 可泛指後續衍生的整個家族。
  • i386 - 1985 年 Intel 推出 32 位元的 80386,編譯版本可寫為 i386 或 x86_32。
  • amd64 - 2003 年 AMD 公司率先發明相容 32 位元舊軟體的 64 位元延伸擴充,並命名為 AMD64。
  • ia64 - 當年 Intel 升級 64 位元時走錯路,打算砍掉重練推出不相容 x86 的純 64 位元架構 - IA-64 (Itanium) ,最後市場跟 Windows 都選擇了 AMD64 (愈成功的系統,相容愈是甩不掉的包袱) ,Intel 不得不低頭向 AMD 取得授權生產自己的 64 位元晶片。
  • x64 - x64 是 AMD64 的通俗名稱。該架構後來被 Intel、Microsoft 及整個 PC 產業廣泛採用,因此許多廠商傾向使用較中性的「x64」稱呼,而非帶有特定公司名稱的「AMD64」。


Comments

# by Tuan

因為amd64 是AMD發明的,Linux各發行版只是選用了最正統的名稱 只有wintel陣營搞個x64這種名稱想貶低AMD

# by dapon

沒遊戲少軟體,不是每個人買筆電都是為了寫程式,沒那麼愛開發,真正重點在於影音跟遊戲,沒有這些東西這產品賣不出去。

Post a comment