arm vs AArch64 vs amd64 vs x86_64 vs x86:有什么區(qū)別?
當(dāng)你查看數(shù)據(jù)表或軟件下載頁(yè)面時(shí)是否被 ARM
、AArch64
、x86_64
、i386
等術(shù)語(yǔ)混淆?這些被稱為 CPU 架構(gòu),我會(huì)幫你深入了解這個(gè)計(jì)算話題。
以下的表將為你總結(jié)每個(gè)字符串所代表的意義:
CPU 架構(gòu) | 描述 |
| 64 位 AMD/英特爾 CPU 的別稱 |
| 64 位 ARM CPU 的別稱 |
| 32 位 AMD/英特爾 CPU |
| 32 位 ARM CPU 的別稱 |
| 64 位 RISC-V CPU 的別稱 |
| 64 位 PowerPC CPU,小端字節(jié)序存儲(chǔ) |
從左到右是使用該術(shù)語(yǔ)來(lái)描述 CPU 架構(gòu)超過(guò)其右側(cè)其他可選用術(shù)語(yǔ)的偏好。
從左到右是使用該術(shù)語(yǔ)描述 CPU 架構(gòu)的優(yōu)先級(jí),使用左側(cè)的而不是其右側(cè)的其他可供選擇的術(shù)語(yǔ)。
如果你像我一樣是個(gè)極客,并想要更深入地解釋,請(qǐng)繼續(xù)閱讀!
概述:CPU 架構(gòu)
通常來(lái)說(shuō),我之前列出的術(shù)語(yǔ)是描述 CPU 架構(gòu)的。但嚴(yán)格講,它們被計(jì)算機(jī)工程師視為 CPU 的 指令集架構(gòu)Instruction Set Architecture(ISA)。
CPU 的指令集架構(gòu)定義了 CPU 如何解析二進(jìn)制代碼中的 1 和 0。
這些 CPU 的 ISA 有幾個(gè)主要的類別:
- x86(AMD/英特爾)
- ARM
- RISC-V
- PowerPC(IBM 仍在使用)
當(dāng)然,還有更多種類的 CPU ISA,比如 MIPS、SPARC、DEC Alpha 等等。但我列出的這些至今仍然被廣泛使用(以某種形式)。
上述列出的 ISA 主要根據(jù) 內(nèi)存總線的寬度
?? 32 位的 CPU ISA 要么是已經(jīng)過(guò)時(shí)的歷史產(chǎn)物,被留下來(lái)要么只是為了支持舊的系統(tǒng),要么只運(yùn)用在微控制器中。可以說(shuō),所有新的硬件都已經(jīng)是 64 位的了,特別是那些面向消費(fèi)者的硬件。
x86(AMD/英特爾)
x86 CPU 的指令集架構(gòu)主要源于英特爾,因?yàn)橛⑻貭柺亲畛醮钆?8085 微處理器創(chuàng)建了它。8085 微處理器的內(nèi)存總線寬度為 16 位。而后來(lái),AMD 加入了這個(gè)領(lǐng)域,并且一直緊隨英特爾的步伐,直到 AMD 創(chuàng)建出了自己的超集 64 位架構(gòu),超過(guò)了英特爾。
x86 架構(gòu)的子集如下:
i386
:如果你擁有的是 2007 年之前的 CPU,那么這可能就是你的 CPU 架構(gòu)。它是現(xiàn)在使用的 AMD/英特爾的 x86 架構(gòu)的 32 位“版本”。x86_64
/x86
/amd64
:這三個(gè)術(shù)語(yǔ)在不同的項(xiàng)目中可能會(huì)被交替使用。 但它們都是指 x86 AMD/英特爾架構(gòu)的 64 位“版本”。無(wú)論如何,x86_64
這個(gè)字符串比x86
和amd64
使用得更廣泛(也更受歡迎)。例如,F(xiàn)reeBSD 項(xiàng)目稱 64 位的 x86 架構(gòu)為amd64
,而 Linux 和 macOS 則稱之為x86_64
。
?? 由于 AMD 在創(chuàng)造 64 位 ISA 上超越了英特爾,所以一些項(xiàng)目(比如 FreeBSD)把 x86 的 64 位版本稱為
amd64
。但更被廣泛接受的術(shù)語(yǔ)還是 x86_64。
對(duì)于 CPU ISA,“x86” 這個(gè)字符串是一種特殊的情況。你要知道,在從 32 位的 x86(i386
)到 64 位的 x86(x86_64
)的過(guò)渡過(guò)程中,CPU 制造商確保了 CPU 能夠運(yùn)行 32 位 和 64 位指令。所以,有時(shí)你可能會(huì)看到 x86
也被用來(lái)意指“這款產(chǎn)品只能運(yùn)行在 64 位的計(jì)算機(jī)上,但如果該計(jì)算機(jī)能運(yùn)行 32 位指令,那么你也可以在它上面運(yùn)行 32 位的用戶軟件”。
這種 x86 的模糊性——也就是諸如能同時(shí)運(yùn)行 32 位代碼的 64 位處理器——其主要用于和存在于運(yùn)行在 64 位處理器上的,但是允許用戶運(yùn)行 32 位軟件的操作系統(tǒng),Windows 就通過(guò)這種被稱作“兼容模式”的特性運(yùn)用了這種方式。
匯總一下,由 AMD 和 英特爾 設(shè)計(jì)的 CPU 有兩種架構(gòu):32 位的(i386
)和 64 位的(x86_84
)。
其它的英特爾
x86_64
ISA 實(shí)際上有幾個(gè)子集。這些子集都是 64 位,但它們新添加了諸如 SIMD(單指令多數(shù)據(jù)Single Instruction Multiple Data)指令等功能。
x86_64-v1
:這是大多數(shù)人都熟知的基礎(chǔ)x86_64
ISA。當(dāng)人們談?wù)?nbsp;x86_64
時(shí),他們通常指的就是x86_64-v1
ISA。x86_64-v2
:此版本新增了更多如 SSE3(流式 SIMD 擴(kuò)展版本 3Streaming SIMD Extensions 3)之類的指令擴(kuò)展。x86_64-v3
:除了基礎(chǔ)指令外,還新增了像 AVX(高級(jí)矢量擴(kuò)展Advance Vector eXtensions)和 AVX2 等指令。這些指令可以使用高達(dá) 256 位寬的 CPU 寄存器!如果你能夠有效利用它們,就能大規(guī)模并行處理計(jì)算任務(wù)。x86_64-v4
:這個(gè)版本在x86_64-v3
ISA 的基礎(chǔ)上,迭代了更多的 SIMD 指令擴(kuò)展,比如 AVX256 和 AVX512。其中,AVX512 可以使用高達(dá) 512 位寬的 CPU 寄存器!
ARM
ARM 不僅是一家為 CPU ISA 制定規(guī)范的公司,它也設(shè)計(jì)并授權(quán)給其他廠商使用其 CPU 內(nèi)核,甚至允許其他公司使用 ARM CPU ISA 設(shè)計(jì)自己的 CPU 內(nèi)核。(最后那句話聽(tīng)起來(lái)就像是個(gè) SQL 查詢似的!)
你可能因?yàn)槿鐦?shù)莓派這類的 單板計(jì)算機(jī)Single Board Computer)(SBC)聽(tīng)說(shuō)過(guò) ARM。但其實(shí) ARM 的 CPU 還廣泛應(yīng)用于手機(jī)中。最近,蘋果從使用 x86_64
處理器轉(zhuǎn)向了在其筆記本和臺(tái)式機(jī)產(chǎn)品中使用自家設(shè)計(jì)的 ARM 處理器。
就像任一種 CPU 架構(gòu)一樣,ARM 基于內(nèi)存總線寬度也有兩個(gè)子集。
官方認(rèn)定的 32 位和 64 位 ARM 架構(gòu)的名稱分別是 AArch32
和 AArch64
。這里的 AArch
字符串代表 “Arm 架構(gòu)Arm Architecture”。這些是 CPU 執(zhí)行指令時(shí)可切換的模式。
實(shí)際符合 ARM 的 CPU ISA 的指令規(guī)范被命名為 ARMvX
,其中 X
是規(guī)范版本的代表數(shù)字。目前為止,已經(jīng)有九個(gè)主要的規(guī)范版本。規(guī)范 ARMv1
到 ARMv7
定義了適用于 32 位 CPU 的架構(gòu),而 ARMv8
和 ARMv9
是適用于 64 位 ARM CPU 的規(guī)范。(更多信息在此)
?? 每個(gè) ARM CPU 規(guī)范又有進(jìn)一步的子規(guī)范。例如 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 表示“應(yīng)用核心”,-R 表示“實(shí)時(shí)核心”。
你可能會(huì)覺(jué)得困惑,為什么在 AArch64
正式被 ARM 認(rèn)定為 64 位 ARM 架構(gòu)后,有些人仍然稱其為 arm64
。原因主要有兩點(diǎn):
arm64
這個(gè)名稱在 ARM 決定采用AArch64
之前就已經(jīng)廣為人知了。(ARM 的一些官方文檔也將 64 位的 ARM 架構(gòu)稱為arm64
…… ??)- Linus Torvalds 對(duì) AArch64 因此,Linux 的代碼庫(kù)主要將
AArch64
稱為arm64
。然而,當(dāng)你在系統(tǒng)中運(yùn)行uname -m
時(shí),輸出仍然是aarch64
。
因此,對(duì)于 32 位 ARM CPU,你應(yīng)該尋找 AArch32
這個(gè)字符串,但有時(shí)也可能是 arm
或 armv7
。相似的,對(duì)于 64 位 ARM CPU,你應(yīng)該找 AArch64
這個(gè)字符串,但有時(shí)也可能會(huì)是 arm64
、ARMv8
或 ARMv9
。
RISC-V
RISC-V 是 CPU 指令集架構(gòu)(ISA)的一個(gè)開(kāi)源規(guī)范。**但這并不意味著 CPU 自身是開(kāi)源的!**這有點(diǎn)像以太網(wǎng)的情況。以太網(wǎng)規(guī)范是開(kāi)源的,但你需付費(fèi)購(gòu)買網(wǎng)線、路由器和交換器。同樣,RISC-V CPU 也要花錢購(gòu)買。 ??
盡管如此,這并沒(méi)有阻止人們創(chuàng)建并在開(kāi)源許可下提供免費(fèi)獲取(設(shè)計(jì)上的獲取,并非物理核心/SoC)的 RISC-V 核心。這是其中的一項(xiàng)嘗試。
?? 總結(jié)一下:如果你在尋找運(yùn)行于 RISC-V 消費(fèi)級(jí) CPU 上的軟件,你應(yīng)該尋找 “rv64gc” 這一字符串。這是許多 Linux 發(fā)行版所公認(rèn)的。
像所有 CPU 架構(gòu)一樣,RISC-V 擁有 32 位和 64 位 CPU 架構(gòu)。但由于 RISC-V 是非常新的描述 CPU ISA 的方式,大部分主流消費(fèi)端或客戶端的 CPU 核心一般都是 64 位的。大部分 32 位的設(shè)計(jì)都是微控制器,用于非常具體的用例。
它們的區(qū)別在于 CPU 的擴(kuò)展。被稱為 RISC-V CPU 的最低要求即實(shí)現(xiàn)“基本整數(shù)指令集Base Integer Instruction Set”(rv64i
)。
下表列出了一些擴(kuò)展及其描述:
擴(kuò)展名稱 | 描述 |
| 64 位基本整數(shù)指令集(必須的) |
| 乘法和除法指令 |
| 原子指令 |
| 單精度浮點(diǎn)指令 |
| 雙精度浮點(diǎn)指令 |
| 別名;一組運(yùn)行通用操作系統(tǒng)所需的擴(kuò)展集(包括 |
| 壓縮指令 |
在 rv64i
這一字符串中,rv
表示 RISC-V,64
指的是 64 位 CPU 架構(gòu),而 i
指的是強(qiáng)制性的基本整數(shù)指令集擴(kuò)展。 rv64i
之所以是一體的,因?yàn)榧词?nbsp;i
被認(rèn)為是一種“擴(kuò)展”,但它是必須的。
約定俗成的,擴(kuò)展名稱按上述特定順序排列。因此,rv64g
展開(kāi)為 rv64imafd
,而不是 rv64adfim
。
?? 還有其他一些像 Zicsr 和 Zifencei 這樣的擴(kuò)展,它們位于
d
和g
擴(kuò)展之間,但我故意不列出,以避免令你感到害怕。因此,嚴(yán)格說(shuō)來(lái),(在寫(xiě)這篇文章的時(shí)候)
rv64g
實(shí)際上是rv64imafdZicsrZifencei
。惡魔般的笑聲
PowerPC
PowerPC 曾是蘋果、IBM 以及,摩托羅拉早期合作時(shí)代的一種流行 CPU 架構(gòu)。在蘋果轉(zhuǎn)向英特爾的 x86 架構(gòu)之前,它一直被應(yīng)用于蘋果的全部消費(fèi)品產(chǎn)品線。
最初,PowerPC 采取的是大端字節(jié)序的內(nèi)存排序。后來(lái)隨著 64 位架構(gòu)的引入,增加了使用小端字節(jié)排序的選項(xiàng)。這么做的目的是為了與英特爾的內(nèi)存排序保持兼容(以防止軟件錯(cuò)誤),因?yàn)橛⑻貭栕允贾两K都一直采用的是小端字節(jié)序。有關(guān)字節(jié)序的更多內(nèi)容,我可以嘮叨很久,不過(guò)你可以通過(guò)閱讀 這篇 Mozilla 的文檔 來(lái)了解更多。
由于字節(jié)序在此也起到了一定的作用,PowerPC 共有三種架構(gòu):
powerpc
:表示 32 位的 PowerPC 架構(gòu)。ppc64
:表示擁有大端字節(jié)序內(nèi)存排序的 64 位 PowerPC 架構(gòu)。ppc64le
:表示擁有小端字節(jié)序內(nèi)存排序的 64 位 PowerPC 架構(gòu)。
目前,ppc64le
是被廣泛使用的架構(gòu)。
結(jié)論
市面上有各種各樣的 CPU 架構(gòu)。對(duì)于每一種架構(gòu),都有 32 位和 64 位的子集。在現(xiàn)有的 CPU 中,我們可以找到 x86、ARM、RISC-V 和 PowerPC 等架構(gòu)。
其中,x86 是最廣泛和易于獲取的 CPU 架構(gòu),因?yàn)橛⑻貭柡?AMD 都采取了這種架構(gòu)。此外,ARM 提供的產(chǎn)品幾乎在手機(jī)和易于獲取的單板計(jì)算機(jī)中被獨(dú)占使用。
RISC-V 正在努力使硬件更廣泛地被使用。我就有一款帶有 RISC-V CPU 的單板計(jì)算機(jī)。 ??
而 PowerPC 主要用于服務(wù)器,至少當(dāng)前如此。