Linux中國

arm vs AArch64 vs amd64 vs x86_64 vs x86:有什麼區別?

當涉及到 CPU 的時候,有許多術語:AArch64、x86_64、amd64、arm 等等。了解它們是什麼以及它們之間的區別。

當你查看數據表或軟體下載頁面時是否被 ARMAArch64x86_64i386 等術語混淆?這些被稱為 CPU 架構,我會幫你深入了解這個計算話題。

以下的表將為你總結每個字元串所代表的意義:

CPU 架構 描述
x86_64 /x86/amd64 64 位 AMD/英特爾 CPU 的別稱
AArch64 /arm64/ARMv8/ARMv9 64 位 ARM CPU 的別稱
i386 32 位 AMD/英特爾 CPU
AArch32 /arm/ARMv1ARMv7 32 位 ARM CPU 的別稱
rv64gc /rv64g 64 位 RISC-V CPU 的別稱
ppc64le 64 位 PowerPC CPU,小端位元組序存儲

從左到右是使用該術語來描述 CPU 架構超過其右側其他可選用術語的偏好。

從左到右是使用該術語描述 CPU 架構的優先順序,使用左側的而不是其右側的其他可供選擇的術語。

如果你像我一樣是個極客,並想要更深入地解釋,請繼續閱讀!

概述:CPU 架構

通常來說,我之前列出的術語是描述 CPU 架構的。但嚴格講,它們被計算機工程師視為 CPU 的 指令集架構 Instruction Set Architecture ISA)。

CPU 的指令集架構定義了 CPU 如何解析二進位代碼中的 1 和 0。

這些 CPU 的 ISA 有幾個主要的類別:

  • x86(AMD/英特爾)
  • ARM
  • RISC-V
  • PowerPC(IBM 仍在使用)

當然,還有更多種類的 CPU ISA,比如 MIPS、SPARC、DEC Alpha 等等。但我列出的這些至今仍然被廣泛使用(以某種形式)。

上述列出的 ISA 主要根據 內存匯流排的寬度 分為至少兩個子集。內存匯流排的寬度指的是 CPU 和 RAM 一次能傳輸的位數。內存匯流排有很多種寬度,但最常見的是 32 位和 64 位。

? 32 位的 CPU ISA 要麼是已經過時的歷史產物,被留下來要麼只是為了支持舊的系統,要麼只運用在微控制器中。可以說,所有新的硬體都已經是 64 位的了,特別是那些面向消費者的硬體。

x86(AMD/英特爾)

x86 CPU 的指令集架構主要源於英特爾,因為英特爾是最初搭配 8085 微處理器創建了它。8085 微處理器的內存匯流排寬度為 16 位。而後來,AMD 加入了這個領域,並且一直緊隨英特爾的步伐,直到 AMD 創建出了自己的超集 64 位架構,超過了英特爾。

x86 架構的子集如下:

  • i386:如果你擁有的是 2007 年之前的 CPU,那麼這可能就是你的 CPU 架構。它是現在使用的 AMD/英特爾的 x86 架構的 32 位「版本」。
  • x86_64/x86/amd64:這三個術語在不同的項目中可能會被交替使用。 但它們都是指 x86 AMD/英特爾架構的 64 位「版本」。無論如何,x86_64 這個字元串比 x86amd64 使用得更廣泛(也更受歡迎)。例如,FreeBSD 項目稱 64 位的 x86 架構為 amd64,而 Linux 和 macOS 則稱之為 x86_64

? 由於 AMD 在創造 64 位 ISA 上超越了英特爾,所以一些項目(比如 FreeBSD)把 x86 的 64 位版本稱為 amd64但更被廣泛接受的術語還是 x86_64

對於 CPU ISA,「x86」 這個字元串是一種特殊的情況。你要知道,在從 32 位的 x86(i386)到 64 位的 x86(x86_64)的過渡過程中,CPU 製造商確保了 CPU 能夠運行 32 位 64 位指令。所以,有時你可能會看到 x86 也被用來意指「這款產品只能運行在 64 位的計算機上,但如果該計算機能運行 32 位指令,那麼你也可以在它上面運行 32 位的用戶軟體」。

這種 x86 的模糊性——也就是諸如能同時運行 32 位代碼的 64 位處理器——其主要用於和存在於運行在 64 位處理器上的,但是允許用戶運行 32 位軟體的操作系統,Windows 就通過這種被稱作「兼容模式」的特性運用了這種方式。

匯總一下,由 AMD 和 英特爾 設計的 CPU 有兩種架構:32 位的(i386)和 64 位的(x86_84)。

其它的英特爾

x86_64 ISA 實際上有幾個子集。這些子集都是 64 位,但它們新添加了諸如 SIMD( 單指令多數據 Single Instruction Multiple Data )指令等功能。

  • x86_64-v1:這是大多數人都熟知的基礎 x86_64 ISA。當人們談論 x86_64 時,他們通常指的就是 x86_64-v1 ISA。
  • x86_64-v2:此版本新增了更多如 SSE3( 流式 SIMD 擴展版本 3 Streaming SIMD Extensions 3 )之類的指令擴展。
  • x86_64-v3:除了基礎指令外,還新增了像 AVX( 高級矢量擴展 Advance Vector eXtensions )和 AVX2 等指令。這些指令可以使用高達 256 位寬的 CPU 寄存器!如果你能夠有效利用它們,就能大規模並行處理計算任務。
  • x86_64-v4:這個版本在 x86_64-v3 ISA 的基礎上,迭代了更多的 SIMD 指令擴展,比如 AVX256 和 AVX512。其中,AVX512 可以使用高達 512 位寬的 CPU 寄存器

ARM

ARM 不僅是一家為 CPU ISA 制定規範的公司,它也設計並授權給其他廠商使用其 CPU 內核,甚至允許其他公司使用 ARM CPU ISA 設計自己的 CPU 內核。(最後那句話聽起來就像是個 SQL 查詢似的!)

你可能因為如樹莓派這類的 單板計算機 Single Board Computer )(SBC)聽說過 ARM。但其實 ARM 的 CPU 還廣泛應用於手機中。最近,蘋果從使用 x86_64 處理器轉向了在其筆記本和台式機產品中使用自家設計的 ARM 處理器。

就像任一種 CPU 架構一樣,ARM 基於內存匯流排寬度也有兩個子集。

官方認定的 32 位和 64 位 ARM 架構的名稱分別是 AArch32AArch64。這裡的 AArch 字元串代表 「 Arm 架構 Arm Architecture 」。這些是 CPU 執行指令時可切換的模式

實際符合 ARM 的 CPU ISA 的指令規範被命名為 ARMvX,其中 X 是規範版本的代表數字。目前為止,已經有九個主要的規範版本。規範 ARMv1ARMv7 定義了適用於 32 位 CPU 的架構,而 ARMv8ARMv9 是適用於 64 位 ARM CPU 的規範。(更多信息在此

? 每個 ARM CPU 規範又有進一步的子規範。例如 ARMv8,我們有 ARMv8-R、ARMv8-A、ARMv8.1-A、ARMv8.2-A、ARMv8.3-A、ARMv8.4-A、ARMv8.5-A、ARMv8.6-A、ARMv8.7-A、ARMv8.8-A 和 ARMv8.9-A。 其中 -A 表示「應用核心」,-R 表示「實時核心」。

你可能會覺得困惑,為什麼在 AArch64 正式被 ARM 認定為 64 位 ARM 架構後,有些人仍然稱其為 arm64。原因主要有兩點:

  1. arm64 這個名稱在 ARM 決定採用 AArch64 之前就已經廣為人知了。(ARM 的一些官方文檔也將 64 位的 ARM 架構稱為 arm64…… ?)
  2. Linus Torvalds 對 AArch64 這個名稱表示不滿。 因此,Linux 的代碼庫主要將 AArch64 稱為 arm64。然而,當你在系統中運行 uname -m 時,輸出仍然是 aarch64

因此,對於 32 位 ARM CPU,你應該尋找 AArch32 這個字元串,但有時也可能是 armarmv7。相似的,對於 64 位 ARM CPU,你應該找 AArch64 這個字元串,但有時也可能會是 arm64ARMv8ARMv9

RISC-V

RISC-V 是 CPU 指令集架構(ISA)的一個開源規範。但這並不意味著 CPU 自身是開源的!這有點像乙太網的情況。乙太網規範是開源的,但你需付費購買網線、路由器和交換器。同樣,RISC-V CPU 也要花錢購買。 ?

儘管如此,這並沒有阻止人們創建並在開源許可下提供免費獲取(設計上的獲取,並非物理核心/SoC)的 RISC-V 核心。這是其中的一項嘗試

? 總結一下:如果你在尋找運行於 RISC-V 消費級 CPU 上的軟體,你應該尋找 「rv64gc」 這一字元串。這是許多 Linux 發行版所公認的。

像所有 CPU 架構一樣,RISC-V 擁有 32 位和 64 位 CPU 架構。但由於 RISC-V 是非常新的描述 CPU ISA 的方式,大部分主流消費端或客戶端的 CPU 核心一般都是 64 位的。大部分 32 位的設計都是微控制器,用於非常具體的用例。

它們的區別在於 CPU 的擴展。被稱為 RISC-V CPU 的最低要求即實現「 基本整數指令集 Base Integer Instruction Set 」(rv64i)。

下表列出了一些擴展及其描述:

擴展名稱 描述
rv64i 64 位基本整數指令集(必須的
m 乘法和除法指令
a 原子指令
f 單精度浮點指令
d 雙精度浮點指令
g 別名;一組運行通用操作系統所需的擴展集(包括 imafd
c 壓縮指令

rv64i 這一字元串中,rv 表示 RISC-V,64 指的是 64 位 CPU 架構,而 i 指的是強制性的基本整數指令集擴展。 rv64i 之所以是一體的,因為即使 i 被認為是一種「擴展」,但它是必須的

約定俗成的,擴展名稱按上述特定順序排列。因此,rv64g 展開為 rv64imafd,而不是 rv64adfim

? 還有其他一些像 Zicsr 和 Zifencei 這樣的擴展,它們位於 dg 擴展之間,但我故意不列出,以避免令你感到害怕。

因此,嚴格說來,(在寫這篇文章的時候)rv64g 實際上是 rv64imafdZicsrZifencei惡魔般的笑聲

PowerPC

PowerPC 曾是蘋果、IBM 以及,摩托羅拉早期合作時代的一種流行 CPU 架構。在蘋果轉向英特爾的 x86 架構之前,它一直被應用於蘋果的全部消費品產品線。

最初,PowerPC 採取的是大端位元組序的內存排序。後來隨著 64 位架構的引入,增加了使用小端位元組排序的選項。這麼做的目的是為了與英特爾的內存排序保持兼容(以防止軟體錯誤),因為英特爾自始至終都一直採用的是小端位元組序。有關位元組序的更多內容,我可以嘮叨很久,不過你可以通過閱讀 這篇 Mozilla 的文檔 來了解更多。

由於位元組序在此也起到了一定的作用,PowerPC 共有三種架構:

  • powerpc:表示 32 位的 PowerPC 架構。
  • ppc64:表示擁有大端位元組序內存排序的 64 位 PowerPC 架構。
  • ppc64le:表示擁有小端位元組序內存排序的 64 位 PowerPC 架構。

目前,ppc64le 是被廣泛使用的架構

結論

市面上有各種各樣的 CPU 架構。對於每一種架構,都有 32 位和 64 位的子集。在現有的 CPU 中,我們可以找到 x86、ARM、RISC-V 和 PowerPC 等架構。

其中,x86 是最廣泛和易於獲取的 CPU 架構,因為英特爾和 AMD 都採取了這種架構。此外,ARM 提供的產品幾乎在手機和易於獲取的單板計算機中被獨佔使用。

RISC-V 正在努力使硬體更廣泛地被使用。我就有一款帶有 RISC-V CPU 的單板計算機。 ?

而 PowerPC 主要用於伺服器,至少當前如此。

(題圖:MJ/634ac7ea-b344-443a-b041-3bb3b31a956f)

via: https://itsfoss.com/arm-aarch64-x86_64/

作者:Pratham Patel 選題:lujun9972 譯者:ChatGPT 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國