arm vs AArch64 vs amd64 vs x86_64 vs x86 区别
当查看数据表或软件下载页面时是否被 ARM
、AArch64
、x86_64
、i386
等术语混淆?
这些被称为 CPU 架构,下表总结了 CPU 架构术语字符串所代表的意义:
CPU 架构 | 描述 |
---|---|
x86_64 / x86 / amd64 |
64 位 AMD / 英特尔 CPU 的别称 |
i386 |
32 位 AMD/英特尔 CPU |
AArch64 / arm64 / ARMv8 / ARMv9 |
64 位 ARM CPU 的别称 |
AArch32 / arm / ARMv1 到 ARMv7 |
32 位 ARM CPU 的别称 |
rv64gc / rv64g |
64 位 RISC-V CPU 的别称 |
ppc64le |
64 位 PowerPC CPU,小端字节序存储 |
从左到右的阅读,优先使用该左侧术语描述 CPU 体系结构,而不是使用其右侧术语的别称。
概述:CPU 架构
通常来说,之前列出的术语是描述 CPU 架构的。但严格讲,它们被计算机工程师视为 CPU 的 ISA( Instruction Set Architecture,指令集架构 )。
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
这个字符串比x86
和amd64
使用得更广泛(也更受欢迎)。例如,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(Streaming SIMD Extensions 3,流式 SIMD 扩展版本 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 查询似的!)
你可能因为如树莓派这类的 SBCs(Single Board Computer,单板计算机)听说过 ARM。但其实 ARM 的 CPU 还广泛应用于手机中。最近,苹果从使用 x86_64
处理器转向了在其笔记本和台式机产品中使用自家设计的 ARM 处理器。
就像任一种 CPU 架构一样,ARM 基于内存总线宽度也有两个子集。
官方认定的 32 位和 64 位 ARM 架构的名称分别是 AArch32
和 AArch64
。这里的 AArch
字符串代