x86 与 ARM:指令集、性能、功耗和软件兼容性

x86 和 ARM 是具有不同指令集的处理器架构系列。 这种差异直接影响软件兼容性,但性能和能耗取决于实际的 CPU 设计和工作负载。了解架构规定的内容也有助于你在 x64 和 ARM64 下载之间进行选择。

什么是 CPU 架构?x86 和 ARM 的基础知识

CPU(Central Processing Unit,中央处理器),是执行程序指令的组件。打开文件、相加数字以及计算显示内容,都涉及根据定义规则解释的指令。CPU 架构描述了这一设计框架,但区分对软件可见的规则与实现这些规则的硬件是有用的。

指令集架构与微架构

指令集架构(Instruction Set Architecture,ISA) 是软件与处理器之间的约定。它定义了支持的计算和数据移动、指令如何以位编码以及寄存器的使用方式。寄存器是 CPU 内部的小型存储位置,用于保存处理器可以直接操作的值。

微架构指的是特定处理器在硬件中如何实现该契约。它包括处理器可以同时处理多少指令、如何安排操作以及如何布置缓存,以便将经常使用的数据保持在处理器附近。ARM 对 ISA 的解释区分了支持的操作与其硬件实现。

可以把 ISA 想象成厨房中用来下达指令的共同语言,而微架构则是厨房的员工、工作台和组织方式。两个厨房可以理解相同的指令,但完成速度不同。同样地,两颗 x86-64 CPU 的性能可能不同,ARM CPU 也并非都共享相同的内部设计。

x86、x86-64、ARM 和 ARM64 的关系

x86 和 ARM 各自描述了包含多代和扩展的系列。在 PC 下载页面上常见的 x64 和 ARM64 标签表示这些系列中的 64 位环境。然而,当下载页面将 x86 与 x64 一起列出时,x86 通常意味着其 32 位版本。

标签 含义及注意事项
x86 源自 Intel 8086 的指令集系列。作为安装程序标签,它通常表示 32 位 x86。
x86-64, x64, AMD64 用于 x86 的 64 位扩展的名称。AMD64 下载也可以在支持所需环境的 Intel CPU 上运行。
ARM 由Arm定义的架构系列。它包括32位和64位配置,因此仅凭名称不能确定位数。
AArch64,ARM64 AArch64是Arm的64位执行状态;ARM64是该环境广泛使用的软件分发标签。其指令集称为A64。

FreeBSD amd64 平台描述同样将 AMD64 和 Intel 64 分组在 x86-64 或 x64 名称下。在这里,64 位是指通用整数寄存器和执行环境,而不是每条指令必须为 64 位。A64 指令使用 32 位编码,如 Arm 的 A64 ISA 指南 所述。是 64 位并不意味着所有处理器运行速度相同或支持相同的内存容量。

x86 和 ARM 指令结构有何不同?

这种区别不仅仅是制造商的名字。即使在请求相同的加法或数据移动时,指令编码和寄存器规则也不同。CISC 和 RISC 是用于描述这些处理器家族背后设计方法的常用术语。

CISC 和 RISC 的含义

CISC(Complex Instruction Set Computer,复杂指令集计算机), 描述了一种提供能够执行复杂操作的指令的方法。x86 被分类为 CISC:它的指令长度可变,有些计算指令可以使用内存中的值作为操作数。操作数是一个操作所作用的值。

RISC(Reduced Instruction Set Computer,精简指令集计算机), 强调使用寄存器进行相对规则的指令和计算。ARM 属于这一类别。对于普通的 A64 整数运算,一个有用的模型是从内存加载一个值到寄存器,使用寄存器值进行计算,然后将结果存回内存。这种基本的组织结构称为载入/存储架构。

例如,将存储在内存中的一个数字加1可以用一个接受内存操作数的x86指令来表示。相应的A64操作可以理解为加载、加法和存储指令的组合。这是一个概念性的示例:编译器实际生成的指令以及这些指令的运行时间取决于源代码和优化设置。可见指令较少并不自动意味着执行更快。

名称中的“Reduced”也不意味着现代 ARM 处理器的指令总数必然较少。ARM还具有用于向量计算和加密等操作的扩展。有关分类和详细的x86指令格式,请参见ARM的ISA分类以及Intel的软件开发手册。

为什么“复杂与简单指令”无法解释现代CPU

程序可见的一条指令不一定对应一个单独的内部操作。现代高性能x86 CPU 将指令解码为称为微操作(micro-ops)的更小内部操作。英特尔优化参考手册 描述了指令解码和这种内部执行组织。

高性能的 ARM CPU 也可以使用复杂的硬件来同时处理多条指令,并在保持正确结果的同时调整执行顺序。Arm 的 Armv8-A 指令集架构 (ISA) 指南 包含一个乱序执行流水线的示例。因此,将 x86 描述为“复杂且慢”,而将 ARM 描述为“简单且快”,会忽略决定现代产品行为的许多因素。

哪一个在性能和功耗方面更好?

仅凭架构名称无法确定性能或能效的优劣。 指令集会影响设计,但最终产品还取决于其实现、制造工艺、散热以及软件优化。

内部设计和工作负载决定性能

拥有更多的 CPU 核心提供了划分工作的机会,但程序并不都是以相同的方式使用核心。需要单线程快速响应的任务可能适合不同的处理器,而分配工作到多个核心的任务则适合另一种处理器。时钟频率也不能单独作为比较不同 CPU 设计的性能指标。

比较相同的应用程序、输入文件和质量设置。区分专为该 CPU 编译的原生版本与通过指令转换运行的版本。在视频导出等任务中,图形处理器或专用视频硬件可能承担大量工作,因此最终结果不能完全归因于 CPU 指令集。

还要区分短时间突发负载和持续负载。处理器可能会快速启动,然后由于温度或功率限制而降低速度。《如何阅读单线程、多线程和游戏 CPU 基准测试》(英文)解释了如何评估这些不同的结果。

功耗和能源效率是不同的衡量标准

功率是能量使用的速率,通常以瓦特(W)表示。能量是在一个任务中使用的总量。为了确定完成一项工作的能量需求,需要同时考虑平均功率和执行时间。

作为一个假设的例子,一个设备在 60 秒内平均使用 10 W 的功率,会消耗 600 焦耳 (J)。另一个设备在 20 秒内使用 20 W 的功率完成同样的工作,则消耗 400 J。第二个设备在工作时使用更多功率,但每完成一项任务的能量更少。这些数字说明了原理;它们不是实际产品的测量值。

续航时间不仅反映 CPU 的情况。电池容量、屏幕亮度、显示技术、内存、无线通信和后台工作都会影响续航时间。一台 ARM 笔记本电脑的长续航时间不能为每台 ARM 和 x86 CPU 建立普遍规律。制造商的热设计功耗 (TDP) 规格不应被视为整个设备的实际功耗。

ARM计算机能运行x86软件吗?

一些程序可以通过操作系统的指令转换功能运行。然而,这些条件与执行CPU原生指令不同。请检查操作系统版本以及受支持的应用程序、驱动程序和组件。 设备驱动程序是帮助操作系统与硬件通信并控制硬件的软件。内核模式驱动程序在操作系统的核心部分运行。

相同的源代码可以生成不同的可执行文件

源代码是开发人员编写的程序文本。编译将其转换为目标环境可以执行的形式。为x86-64和ARM64构建相同功能会生成不同的机器码。Arm 对 ISA 的说明描述了从高级语言编译到特定ISA的机器码的过程。

计算器的“3 + 5”功能在两种系统上目的相同,但指令位和寄存器使用可能不同。重命名 x86 可执行文件或更改其扩展名并不会将其转换为 ARM64 软件。即使重建程序,也需要兼容的库和操作系统功能。

匹配的 CPU 架构也不会在操作系统之间创建兼容性。Windows ARM64 应用程序并不会自动在基于 ARM 的 Mac 或 Android 设备上运行。可执行文件格式和操作系统接口也必须匹配。

转换执行能做什么,有哪些兼容性限制?

仿真和二进制翻译有助于执行为不同指令集构建的程序。它们可以解释或翻译指令并重用已翻译的代码。根据微软的 Windows on Arm 仿真文档,Arm 版的 Windows 11 支持 x86 和 x64 应用程序的仿真,而 Arm 版的 Windows 10 仅支持 x86 应用程序。

应用程序仿真不能替代对兼容内核模式驱动程序的需求。在 Windows on Arm 上,这些驱动程序必须提供 ARM64 版本;微软的 Arm PC FAQ 解释了设备驱动程序的要求。因此,打印机、音频设备、VPN、安全工具以及带有反作弊组件的游戏需要对主可执行文件之外的部分进行检查。打开应用程序窗口并不能证明每一个必需功能都能正常工作。

在 Mac 上,Rosetta 会将基于 Intel 的 Mac 应用程序转换为适用于 Apple Silicon 的版本。Apple 的 Rosetta 支持指南 区分了截至 macOS 27(含)提供支持的情况与 macOS 28 起的限制,此时 Rosetta 功能仅限于依赖 Intel 框架的某些旧的、未维护的游戏。Rosetta 不应被视为对每个 Intel 应用程序的永久兼容性保证。

原生 ARM64 版本可以避免指令转换,但实际性能和可靠性仍取决于应用程序的实现。没有适用于每个程序的单一转换代价,而原生版本也不能保证某个特定版本总是更快。

你应该下载 x64 还是 ARM64 软件?

首先识别你的操作系统和CPU环境,然后选择支持该组合的下载。仅有制造商名称或“64位”字样是不够的。

检查你的CPU和操作系统环境

  1. Windows: 打开 设置 → 系统 → 关于,并查看 设备规格 下的 系统类型。对于具有64位操作系统的x64处理器,请查找 Windows x64。对于基于Arm的处理器,首先检查是否有支持的 Windows ARM64 版本。即使CPU支持64位操作,32位操作系统也无法运行x64应用程序。 微软关于识别ARM PC的指南 使用此设置路径。
  2. Mac: 打开苹果菜单 → 关于本机。Apple Silicon Mac 显示芯片;Intel Mac 显示处理器。对于 Apple Silicon 设备,选择支持您的 Mac 的 Apple Silicon 或通用版本。Universal(通用)应用程序包含适用于 Intel 和 Apple Silicon 的代码。请参阅 苹果的 Mac 芯片识别指南 进行硬件检查。
  3. Linux: 在终端中运行以下命令以查询当前环境的机器类型。这是一个只读的 GNU Coreutils 查询:它不会更改任何设置,也不需要撤销操作。
uname -m

在典型的 Linux 环境中,x86_64 表示 x86-64,而 aarch64 表示 64 位 Arm。这些是常见的输出,不是所有系统上唯一可能的值。包管理器可能使用不同的标签,例如 amd64 或 arm64。在虚拟机或仿真环境中,应将结果解释为描述该执行环境。GNU uname 手册 定义 -m 为打印机器硬件名称。

你的环境 下载时要注意什么
Windows,x64 CPU,64 位操作系统 Windows x64 或 x86-64。AMD64 指的是相同的架构系列。
Windows,Arm CPU Windows ARM64。如果不可用,请检查您的 Windows 版本和应用程序是否支持 x86 或 x64 仿真。
搭载 Apple Silicon 的 Mac 适用于 macOS 的Apple Silicon 或通用版本,而不是 Windows ARM64 安装程序。
Intel Mac 支持您的 macOS 版本的 Intel 或通用应用程序。
Linux,x86_64 或 aarch64 相应的发行版 amd64/x86_64 或 arm64/aarch64 包。发行版、版本和依赖项也必须匹配。

检查应用程序、插件和驱动程序

一旦找到安装程序,请检查您实际需要的功能。例如,ARM64 音乐应用程序可能可以运行,而所需的音源插件或音频设备驱动程序仍不受支持。这会导致难以在不更改的情况下继续现有项目。这是一个需要验证的组合示例,而不是关于某个具体产品失败的声明。

  1. 在官方下载页面上,请同时检查操作系统、最低支持版本和架构。如果开发者提供自动安装程序,请按照其官方指南操作。
  2. 检查必需的插件、扩展和编解码器所支持的架构和宿主应用程序版本。加载到同一进程的组件通常需要匹配的架构;如果存在单独的桥接功能,请使用开发者支持的组合。
  3. 验证外设和系统功能的驱动程序。在 Windows on Arm 上,分别检查应用程序仿真支持和 ARM64 驱动程序的可用性。
  4. 安装后,测试所需的工作:打开和保存文件、导出、使用插件以及连接设备。如果组合不受支持,请使用官方支持的版本或在按照官方卸载步骤操作前备份重要数据。

x64 和 ARM64 是目标环境标签,不是性能排名。首先匹配操作系统和架构,然后检查您依赖的应用程序和组件,有助于防止错误下载和错误的兼容性假设。