ARM架构与x86有何不同?

x86架构是专门为键盘设计的,而ARM则是为移动设备设计的吗?两者之间的关键区别是什么?

275058 次浏览

除了多年来ARM在功耗方面拥有相当大的优势,这使得它对各种电池驱动的设备都具有吸引力之外,这两种技术都没有针对键盘或移动设备的特定特性。

至于实际的差异:ARM有更多的寄存器,在英特尔添加之前就支持大多数指令的预测,并且长期以来一直结合各种各样的技术(如果你喜欢,可以称之为“诡计”)来尽可能地节省电力。

两者在编码指令的方式上也有相当大的不同。英特尔使用相当复杂的变长编码,其中一条指令可以占用1到15个字节。这使得程序非常小,但是使得指令解码相对困难(比如:并行快速解码指令更像是一个完全的噩梦)。

ARM有两种不同的指令编码模式:ARM和THUMB。在ARM模式下,您可以访问所有指令,编码非常简单,解码速度也非常快。不幸的是,ARM模式代码往往相当大,所以一个程序占用大约两倍于英特尔代码的内存是相当常见的。拇指模式试图缓解这种情况。它仍然使用相当常规的指令编码,但将大多数指令从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在功耗方面做得很好,但根据具体情况,您可能更关心功耗而不是瞬时功耗。

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

两者在这方面的核心区别是,ARM指令只在寄存器上操作,使用一些指令从内存中加载和存储数据,而x86可以使用内存或寄存器操作数与ALU指令,有时用更少的指令完成相同的工作。有时会更多,因为ARM有自己有用的技巧,比如在一条指令中加载一对寄存器,或者使用移位的寄存器作为另一个操作的一部分。在ARMv8 / AArch64之前,ARM是原生的32位架构,偏爱4字节操作。

所以ARM是一个更简单的架构,导致了小的硅面积和大量的节能功能,而x86在功耗和生产方面都成为了一个功耗猛兽。

来回答你的问题“x86架构是专门为键盘设计的,而ARM则是为移动设备设计的吗?"x86并不是专门为键盘设计的,就像ARM不是专门为移动设备设计的一样。然而,同样因为核心架构的选择,x86也有直接使用单独IO地址空间的指令,而ARM没有。相反,ARM对所有事情都使用内存映射IO,包括读取/写入PCI IO空间。(现代设备很少需要它,因为它在x86上很慢。例如,现代USB控制器,所以访问USB连接的设备是一样有效的USB控制器使它。)

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

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

复杂指令集计算机(CISC)处理器,如 x86,有一个丰富的指令集,能够做复杂的事情 只需一条指令。这样的处理器通常具有重要的 解码机器指令的内部逻辑的数量 内部操作序列(微码)。

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

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

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

例如,如果你的应用程序中需要某种字节内存比较块(由编译器生成,跳过细节),这就是在x86上的情况,如果优化代码大小而不是速度。(rep movsb / rep stosb在现代cpu上非常快,而条件代表比较指令则不然。)

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指令集在复杂性上有什么不同。有趣的是,x86没有回写寻址模式(加载和增加指针)除了通过它的"string"像lodsd这样的指令。

附加到杰瑞棺材第一段。即,ARM设计提供了更低的功耗。

该公司ARM,只授权CPU技术。他们不生产实体芯片。这允许其他公司添加各种外围技术,通常称为< >强SOC < / >强或片上系统。无论是平板电脑、手机还是车载娱乐系统。这使得芯片供应商可以根据特定的应用程序定制芯片的其余部分。这有额外的好处,

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

ARM支持使用安巴的SOC供应商,允许SOC实现者购买现成的第三方模块;比如以太网、内存和中断控制器。其他一些CPU平台也支持这一点,比如MIPS,但MIPS对功耗并不敏感。

所有这些都有利于手持/电池操作的设计。有些人就是全方位都很好。同样,ARM也有电池操作设备的历史;牛顿的苹果 心灵术士组织者。一些公司利用PDA软件基础设施来创建智能手机类型的设备。尽管如此,那些重新发明GUI以使用智能手机的人取得了更大的成功。

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

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

所以我想说,围绕这些芯片生长的生态系统与低功耗等特性一样重要。ARM一直致力于低功耗,高性能的计算一段时间(1980年代中后期),他们有很多人在船上。

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

ARM架构最初是为Acorn个人计算机设计的(参见橡子阿基米德,大约在1987年和RiscPC),这是基于键盘的个人计算机,就像基于x86的IBM PC模型一样。只有后来的ARM实现才主要针对移动和嵌入式市场。

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

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

因此,两种架构之间的任何当前差异都更多地与开发团队所瞄准的产品利基的特定市场需求有关。(随机观点:ARM可能从嵌入式应用程序中赚取更多的许可费,这些应用程序往往更强大,成本更有限。英特尔需要在个人电脑和服务器上保持性能优势,以获得利润。因此,您可以看到不同的实现优化。)

ARM就像一辆意大利跑车:

  • 平衡很好,调得很好,引擎。具有良好的加速度和最高速度。
  • 出色的追逐,刹车和悬挂。能快速停车,能不减速过弯。

x86就像一辆美国肌肉车:

  • 大引擎,大燃油泵。最高速度和加速都很出色,但耗油很多。
  • 糟糕的刹车,如果你想减速,你需要在你的日记里预约。
  • 转向很糟糕,你必须在拐弯处减速。

总而言之:x86基于1974年的设计,在直线行驶方面表现良好(但耗油很多)。手臂耗油少,转弯(支路)时不减速。


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

  • Arm有更多的寄存器。
  • Arm很少有特殊用途的寄存器,x86都是特殊用途的寄存器(所以移动的东西较少)。
  • Arm有很少的内存访问命令,只有加载/存储寄存器。
  • Arm是我设计的哈佛内部架构。
  • Arm简单快捷。
  • Arm指令在架构上是单周期的(除了加载/存储多个)。
  • Arm指令通常不止做一件事(在一个周期内)。
  • 在需要多个Arm指令的地方,比如x86的循环存储&自动递增,Arm仍然在更少的时钟周期内完成。
  • Arm有更多的条件指令。
  • Arm的分支预测器非常简单(如果是无条件的或反向的,则假设分支,否则假设非分支),并且比x86中非常非常复杂的预测器性能更好(这里没有足够的空间来解释它,不是我能解释的)。
  • Arm有一个简单一致的指令集(您可以手工编译,并快速学习该指令集)。