243

x86 架构是专为使用键盘而设计的,而 ARM 则希望是移动设备?两者之间的主要区别是什么?

4

5 回答 5

379

ARM是一种RISC(精简指令集计算)架构,x86而是一种CISC(复杂指令集计算)架构。

在这方面的核心区别在于 ARM 指令仅在寄存器上操作,而 x86 也可以直接在内存上操作。直到 v8 ARM 是一个原生的 32 位架构,比其他的更喜欢四字节操作。

因此 ARM 是一个更简单的架构,导致硅面积小和许多节能功能,而 x86 在功耗和生产方面都成为了一个强大的野兽。

关于“ x86 架构是否专门设计用于使用键盘而 ARM 预计是移动设备? ”的问题。x86不是专门为与键盘一起使用而设计的,也不是ARM为移动设备设计的。然而,由于核心架构选择,实际上 x86 也有直接使用的指令,IO而 ARM 没有。然而,对于 USB 等专用 IO 总线,对此类功能的需求也在消失。

如果您需要引用文档,以下是Cortex-A 系列程序员指南 (4.0)讲述的 RISC 和 CISC 架构之间的差异:

ARM 处理器是精简指令集计算机 (RISC) 处理器。

复杂指令集计算机 (CISC) 处理器,如 x86,具有丰富的指令集,能够用一条指令完成复杂的事情。此类处理器通常具有大量内部逻辑,可将机器指令解码为内部操作序列(微码)。

相比之下,RISC 架构具有较少数量的更通用指令,可以用更少的晶体管执行这些指令,从而使硅更便宜且更节能。与其他 RISC 架构一样,ARM 内核具有大量通用寄存器,并且许多指令在单个周期内执行。它具有简单的寻址模式,所有加载/存储地址都可以从寄存器内容和指令字段中确定。

ARM 公司还提供了一篇题为“架构、处理器和设备开发文章”的论文,描述了这些术语如何应用于他们的业务。

一个比较指令集架构的例子:

例如,如果您需要在应用程序中使用某种字节内存比较块(由编译器生成,跳过详细信息),这可能看起来像x86

repe cmpsb         /* repeat while equal compare string bytewise */

而在ARM最短的形式可能看起来像(没有错误检查等)

top:
ldrb r2, [r0, #1]! /* load a byte from address in r0 into r2, increment r0 after */
ldrb r3, [r1, #1]! /* load a byte from address in r1 into r3, increment r1 after */
subs r2, r3, r2    /* subtract r2 from r3 and put result into r2      */
beq  top           /* branch(/jump) if result is zero                 */

这应该给你一个关于 RISC 和 CISC 指令集在复杂性上有何不同的提示。

于 2013-02-10T07:05:55.863 回答
113

除了多年来 ARM 在功耗方面具有相当大的优势之外,这两者都没有任何特定于键盘或移动设备的东西,这使得它对各种电池供电的设备都具有吸引力。

就实际差异而言:ARM 拥有更多寄存器,早在英特尔添加它之前就支持大多数指令的预测,并且长期以来一直采用各种技术(如果您愿意,可以将它们称为“技巧”)以几乎在任何地方都可以节省电力。

两种编码指令的方式也有很大差异。英特尔使用相当复杂的可变长度编码,其中一条指令可以占用 1 到 15 个字节。这允许程序非常小,但使指令解码相对困难(例如:并行快速解码指令更像是一场彻头彻尾的噩梦)。

ARM 有两种不同的指令编码模式:ARM 和 THUMB。在 ARM 模式下,您可以访问所有指令,并且编码非常简单且解码速度快。不幸的是,ARM 模式代码往往相当大,因此程序占用的内存大约是 Intel 代码的两倍是很常见的。拇指模式试图减轻这种情况。它仍然使用相当常规的指令编码,但将大多数指令从 32 位减少到 16 位,例如通过减少寄存器数量、消除大多数指令的谓词以及减少分支范围。至少根据我的经验,这通常仍然不能给出与 x86 代码一样密集的编码,但它相当接近,并且解码仍然相当简单和直接。较低的代码密度意味着您通常需要至少多一点内存和(通常更严重)更大的缓存才能获得同等的性能。

有一次,英特尔更注重速度而不是功耗。他们开始主要强调笔记本电脑的功耗。对于笔记本电脑,他们的典型功率目标是相当小的笔记本电脑的 6 瓦左右。最近(最近)他们开始瞄准移动设备(手机、平板电脑等)。对于这个市场,他们最多只考虑几瓦左右。他们似乎在这方面做得很好,尽管他们的方法与 ARM 的方法有很大不同,强调制造技术,而 ARM 主要强调微架构(这并不奇怪,考虑到 ARM 销售设计,并将制造留给其他人)。

根据具体情况,CPU 的能耗通常比其功耗更重要。至少在我使用这些术语时,功耗是指(或多或少)瞬时的功耗。但是,能耗会随着速度而正常化,因此如果(例如)CPU A 在 2 秒内消耗 1 瓦来完成工作,而 CPU B 在 1 秒内消耗 2 瓦来完成相同的工作,则两个 CPU 消耗的总量相同完成这项工作所需的能量(2 瓦秒)——但使用 CPU B,您获得结果的速度是原来的两倍。

ARM 处理器在功耗方面往往做得很好。因此,如果您需要的东西几乎总是需要处理器的“存在”,但实际上并没有做太多工作,那么它们可以很好地工作。例如,如果您在进行视频会议,您会收集几毫秒的数据,对其进行压缩、发送、从其他人那里接收数据、解压缩、回放并重复。即使是一个非常快的处理器也不能花太多时间睡觉,所以对于这样的任务,ARM 做得非常好。

英特尔的处理器(尤其是他们的 Atom 处理器,实际上是为低功耗应用设计的)在能耗方面极具竞争力。当它们接近全速运行时,它们将比大多数 ARM 处理器消耗更多的功率——但它们也可以快速完成工作,因此它们可以更快地重新进入睡眠状态。因此,它们可以将良好的电池寿命与良好的性能结合起来。

因此,在比较两者时,您必须小心衡量的内容,以确保它反映了您真正关心的内容。ARM 在功耗方面做得很好,但根据情况,您可能更关心能耗而不是瞬时功耗。

于 2013-02-10T03:50:22.487 回答
44

杰里·科芬第一段的补充。即,ARM 设计提供了更低的功耗。

该公司ARM仅授权 CPU 技术。他们不制造物理芯片。这允许其他公司添加各种外围技术,通常称为SOC或片上系统。设备是平板电脑、手机还是车载娱乐系统。这允许芯片供应商根据特定应用定制芯片的其余部分。这有额外的好处,

  1. 降低电路板成本
  2. 低功率(注1)
  3. 更容易制造
  4. 更小的外形尺寸

ARM支持具有AMBA的 SOC 供应商,允许 SOC 实施者购买现成的第 3 方模块;像以太网、内存和中断控制器。其他一些 CPU 平台支持这一点,例如MIPS,但 MIPS 不那么注重功耗。

所有这些都有益于手持式/电池供电的设计。有些只是很好。同样,ARM拥有电池供电设备的历史;苹果牛顿Psion 组织者。一些公司利用 PDA 软件基础结构来创建智能手机类型的设备。虽然,那些重新发明了用于智能手机的 GUI 的人取得了更大的成功。

Open source工具组的兴起operating systems也促进了各种SOC芯片的出现。一个封闭的组织在尝试支持 ARM 可用的所有各种设备时会遇到问题。两个最流行的蜂窝平台,Andriod 和 OSx/IOS,是基于LinuxFreeBSD、Mach 和 NetBSD操作系统的。 Open Source帮助SOC供应商为其芯片组提供软件支持。

希望,为什么x86用于键盘是不言而喻的。它拥有软件,更重要的是,人们接受过使用该软件的培训。 Netwinder是一个ARM最初为键盘设计的系统。此外,制造商目前正在将 ARM64 用于服务器市场。电力/热量是 24/7 数据中心关注的问题。

所以我想说,围绕这些芯片发展的生态系统与低功耗等特性一样重要。 ARM一段时间以来(1980 年代中后期),他们一直在努力实现低功耗、高性能计算,而且他们有很多人参与其中。

注1:多个芯片需要总线驱动器在已知电压下相互通信并驱动。此外,通常单独的芯片需要支持电容器和其他可以在SOC系统中共享的电源组件。

于 2013-02-11T14:54:00.797 回答
31

ARM 就像一辆意大利跑车:

  • 平衡良好,调校良好,发动机。提供良好的加速度和最高速度。
  • 出色的追逐、刹车和悬挂。可以快速停车,可以转弯而不减速。

x86 就像一辆美式肌肉车:

  • 大发动机,大燃油泵。提供出色的最高速度和加速度,但消耗大量燃料。
  • 可怕的刹车,如果你想减速,你需要在你的日记中预约。
  • 可怕的转向,你必须减速到角落。

总而言之:x86 基于 1974 年的设计,在直线上表现不错(但消耗大量燃料)。手臂使用很少的燃料,不会在角落(分支)减速。


比喻结束,这里有一些真正的区别。

  • Arm有更多的寄存器。
  • Arm 很少有特殊用途的寄存器,x86 都是特殊用途的寄存器(所以移动的东西更少)。
  • Arm 的内存访问命令很少,只有加载/存储寄存器。
  • Arm 是我设计的内部哈佛架构。
  • Arm 简单快速。
  • Arm 指令在架构上是单周期的(加载/存储多个除外)。
  • Arm 指令通常做不止一件事(在一个周期中)。
  • 在需要更多一条 Arm 指令的情况下,例如 x86 的循环存储和自动增量,Arm 仍然可以在更少的时钟周期内完成。
  • Arm 有更多的条件指令。
  • Arm 的分支预测器非常简单(如果无条件或向后假设分支,否则假设非分支),并且比 x86 中非常非常非常复杂的分支预测器表现更好(这里没有足够的空间来解释它,不是我可以)。
  • Arm 有一个简单一致的指令集(你可以手动编译,快速学习指令集)。
于 2015-08-19T19:12:51.483 回答
17

ARM 架构最初是为 Acorn 个人计算机(参见Acorn Archimedes,大约 1987 年和RiscPC)设计的,这些计算机与基于 x86 的 IBM PC 模型一样多是基于键盘的个人计算机。只有后来的 ARM 实施主要针对移动和嵌入式市场领域。

最初,性能大致相当的简单 RISC CPU 可以由比英特尔 x86 开发人员小得多的工程团队(参见伯克利 RISC )设计。

但是,现在最快的 ARM 芯片具有由大型工程团队设计的非常复杂的多问题无序指令调度单元,x86 内核可能具有类似于指令翻译单元的 RISC 内核。

因此,两种架构之间的任何当前差异都与开发团队所针对的产品利基市场的特定市场需求有关。(随机意见:ARM 可能会从更受功耗和成本限制的嵌入式应用程序中赚取更多的许可费。英特尔需要在 PC 和服务器中保持性能优势以获取利润率。因此,您会看到不同的实施优化。)

于 2013-09-23T05:37:42.777 回答