ARM体系结构与x86有何不同?[关闭]


189

x86体系结构是否专门设计为与键盘一起使用,而ARM希望可以移动?两者之间的主要区别是什么?


37
除非x86有一个我不知道的ps / 2端口,否则它不是为键盘而设计的,而是一对脏内衣:-)
paxdiablo

6
我认为键盘是指典型的PC角色,而不是物理设备。
无声的噪音,

24
x86并非经过设计;它在一个岛屿上进化,有一只奇怪的鸟吃了所有想要在上面祈祷的东西。现在看起来比鸭嘴鸭嘴兽更奇怪,而且如果出现一堆满满的新动物,效果会不佳。
ctrl-alt-delor 2014年

5
@richard-不幸的是,这恰好是我见过的x86上最准确的描述。它对这个行业说了很多。
Leeor,2015年

6
@Leeor对不起,我在评论中犯了一个小错误,我说那只鸟吃了x86的掠食者,因为它没有吃它们,而是坐在它们上面。还值得注意的是,鸟的柔软羽毛非常整齐。
ctrl-alt-delor

Answers:


302

ARMRISC(精简指令集计算)体系结构,x86而是CISC(复杂指令集计算)体系结构。

这两个方面的核心区别在于,ARM指令仅在寄存器上运行,而一些指令用于将数据从内存中加载和保存到内存中,而x86也可以直接在内存上运行。直到v8为止,ARM都是本机32位体系结构,与其他字节相比,它更喜欢四字节操作。

因此,ARM是一种更简单的体系结构,从而导致了较小的硅片面积和许多省电功能,而x86在功耗和生产方面都成为了野兽。

关于“ x86体系结构是否专门设计用于在ARM期望可移动的同时使用键盘? ”的问题。x86并非专门设计ARM用于手机键盘。但是,再次由于核心体系结构的选择,实际上x86还具有直接使用指令,IO而ARM没有。但是,对于专用的IO总线(如USB),对此类功能的需求也在消失。

如果您需要引用的文档,这是《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指令集在复杂性上有何不同。


9
ARMv8-A具有称为AArch64的64位体系结构。
kyrias

9
尽管x86具有一些非常强大的指令,但是手臂仍然可以在战斗中击败它(如果两者具有相同的时钟速度)。部分原因是该臂具有一组良好的寄存器,其中x86花费其时间的1/2将数据移入和移出其有限的一组寄存器(x86-64则不然,因为它具有更多的寄存器) )。部分原因是Arm的简单性为更大的缓存留出了空间,并且所有指令都是有条件的(使缓存丢失的机会更少)。和手臂移动多条指令(唯一的非RISC指令),使其能够快速移动数据。
ctrl-alt-delor

4
我可以使用更多的寄存器来更快地编写ARM代码,尽管更大。如果我看一下这个实现,x86需要5 + 9×N个时钟,ARM需要4×N个时钟(两个数字都表示没有缓存未命中)。在此示例中,x86的指令字节得分更高:x86 = 2字节,arm = 16字节。在更实际的测试中,ARM会在该指标上获得更高的分数,例如,退出循环r2时,将具有有关字符串是否相等/更大的信息,条件代码也将具有此信息。在检查条件代码之前,手臂可以执行其他指令。检查条件代码时,手臂无需分支。
ctrl-alt-delor

2
@JeremyFelix看起来像这个stackoverflow.com/questions/13106297/…对于不同类型的指令,有不同的管道,即使有重复的管道也是如此。CPU将指令分为微指令,这些指令可以在管道之间并行运行。
auselen 2015年

2
您说“虽然x86也可以直接在内存上运行。” 但是,对于x86(x86-64之前的版本)而言,它的寄存器太少以至于没有“也”,因此您必须将所有内容都存储在内存中。程序中仅用于移动内容的大约½条指令。而在ARM中,几乎不需要任何指令即可移动数据。
ctrl-alt-delor

92

多年来,ARM在功耗方面都具有相当大的优势,这使其对各种电池供电的设备都具有吸引力,这两者都不是键盘或移动电话专用的。

就实际差异而言:ARM拥有更多的寄存器,早在Intel添加它之前就支持大多数指令的谓词,并且长期以来采用了各种技术(如果愿意,可以将它们称为“技巧”)以节省几乎所有可能的功耗。

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

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

一次,英特尔更加注重速度,而不是功耗。他们开始主要在笔记本电脑上强调功耗。对于笔记本电脑,它们的典型功率目标是在相当小的笔记本电脑上达到6瓦左右。最近(最近),他们已经开始瞄准移动设备(手机,平板电脑等)对于这个市场,他们正在寻找一对夫妇瓦左右最多。他们的做法似乎做得很好,尽管他们的方法与ARM的方法大不相同,强调了ARM主要强调微体系结构的制造技术(考虑到ARM销售设计并将制造权留给其他人,这不足为奇)。

但是,根据情况,CPU的能耗通常比其功耗更重要。至少在我使用这些术语时,功耗是指(或多或少)瞬时的功耗。但是,能耗会根据速度进行归一化,因此,例如,如果CPU A消耗1瓦2秒钟执行一项工作,CPU B消耗2瓦1秒钟执行一项工作,则两个CPU的总消耗量相同耗电(两瓦特秒)来完成这项工作,但是使用CPU B,您得到的结果要快两倍。

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

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

因此,在将两者进行比较时,您必须谨慎对待自己的测量,以确保它反映出您真正关心的内容。ARM在功耗方面做得很好,但是根据情况,您可能会比即时功耗更关心能耗。


这就是为什么 ?RISC需要更多的RAM,而CISC则比RISC更加注重较小的代码大小并使用更少的RAM
Waqar Naeem

拇指模式(可变长度,允许短编码)没有区别;这就是x86始终工作的方式(但更重要的是,指令长度从1到15个字节不等,比Thumb2难解码得多)。ARM模式(使用3个操作数的非破坏性指令进行固定宽度编码)与x86有所不同!
Peter Cordes

拥有更快的处理器并不是一个很大的帮助 -视频会议可能是一个更好的例子:低延迟意味着您不仅可以将突发的解码解码成适当大小的缓冲区,然后回到深层或中层睡眠状态。考虑到现代CPU在完全空闲时(时钟停止,甚至关闭内核的某些部分,或者在更深的睡眠时,也可以缓存),“ CPU睡眠”是固定计算量能耗的关键概念。在写回之后)。当然,这就是您在下一段中提到的重点。>。<
Peter Cordes

@PeterCordes:Thumb模式编码与x86编码不太相似。尽管这不是定期为ARM编码,它仍然是非常固定的format.Density增加主要是从消除只是很少在ARM编码使用的位。例如,几乎所有ARM指令都是有条件的,但条件仅在相当短的时间内使用(因此,大多数非分支THUMB指令都是无条件的)。
杰里·科芬

@PeterCordes:您是对的:视频会议是一个更好的例子,我已经对其进行了编辑。谢谢。
杰里·科芬

39

杰里·科芬(Jerry Coffin)第一段的补充。即,ARM设计可降低功耗。

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

  1. 降低董事会成本
  2. 低功率(注1)
  3. 更容易制造
  4. 外形尺寸较小

ARM通过AMBA支持SOC供应商,允许SOC实施者购买现成的第三方模块;如以太网,内存和中断控制器。其他一些CPU平台也支持此功能,例如MIPS,但是MIPS并不那么注重功耗。

所有这些对手持/电池操作设计都是有益的。周围有些很好。还ARM具有电池供电设备的历史;苹果牛顿Psion组织者。该PDA的软件基础结构被一些公司利用创造的智能手机类设备。虽然,重新发明GUI并用于智能手机的人们获得了更大的成功。

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

希望为什么x86被用作键盘是不言而喻的。它具有软件,更重要的是,人们受过培训以使用该软件。 NetwinderARM最初为键盘设计的一种系统。另外,制造商目前正在将ARM64用于服务器市场。在24/7数据中心中,功率/热量是一个问题。

因此,我想说围绕这些芯片生长的生态系统与低功耗等功能同样重要。 ARM在一段时间内(1980年代中后期),人们一直在努力寻求低功耗,高性能的计算,并且他们中有很多人。

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


22

ARM就像意大利跑车:

  • 平衡良好,调整良好的引擎。提供良好的加速度和最高速度。
  • 出色的追逐,刹车和悬架。可以快速停止,可以在不减速的情况下转弯。

x86就像美国的肌肉车:

  • 大引擎,大燃油泵。提供出色的最高速度和加速度,但消耗大量燃料。
  • 可怕的刹车,如果你想放慢脚步,就需要在日记中安排一个约会。
  • 糟糕的转向,您必须减速至弯道。

总结:x86基于1974年的设计,在直线上表现不错(但消耗大量燃料)。手臂消耗很少的燃料,不会降低拐角(分支)的速度。


隐喻过来,这里有一些真正的区别。

  • Arm有更多的寄存器。
  • Arm几乎没有特殊用途的寄存器,x86是所有特殊用途的寄存器(所以移动的东西更少)。
  • Arm几乎没有存储器访问命令,只有加载/存储寄存器。
  • Arm是哈佛内部设计的建筑。
  • 手臂既简单又快速。
  • 手臂指令在架构上是单周期的(加载/存储多个除外)。
  • 手臂指令通常做不止一件事情(在一个周期内)。
  • 在需要一条以上Arm指令的地方,例如x86的循环存储和自动递增,Arm仍以较少的时钟周期执行该指令。
  • Arm有更多条件指示。
  • Arm的分支预测变量非常简单(如果无条件或向后,则假定分支,否则假定为非分支),并且其性能要好于x86中非常非常复杂的变量(此处没有足够的空间来解释它,而不是我可以)。
  • Arm具有简单且一致的指令集(您可以手工编译,并快速学习指令集)。

7
这种类比打破了这样的事实,即意大利跑车在无法获得ARM CPU的情况下会在每时每刻发生故障,并且虽然可以轻松完成,但实际上您无法购买一个能够以台式机CPU速度运行的ARM CPU。 ,更不用说插槽式的和主板式的了。:)
Evi1M4chine

1
在性能方面,它可以与某些最大/更快的至强处理器(例如E5-2690 v3)直接竞争,但功耗和成本较低。quora.com/...
CTRL-ALT-delor

1
当然,对于大型并行工作负载,例如数据库和I / O服务器。为了获得单线程性能,没有人设计出与x86一样大的ARM内核。没有理由,他们没有,只有没人能做到。与用于大功率CPU内核的乱序机器所使用的硅数量相比,对功率和芯片面积的“ x86税”没有那么大。x86中肯定有疣,但是RISC具有代码密度方面的缺点(通常并不重要,但仍然很重要)。在realworldtech.com论坛上反复争论了这一点。
彼得·科德斯

1
@richard:有很多您不需要的东西,但这会增加代码密度。技巧是在解码复杂度与代码大小/指令数量之间取得平衡。增加乱序内核的宽度在功耗上非常昂贵,因此将更多工作打包到每条指令中非常有价值。解码复杂度的小幅增加要便宜得多。现代x86 CPU已经设法快速解码x86。(速度不够快,无法从解码器提供4宽OOO核,而不是uop高速缓存或循环缓冲区,并且当然要付出高昂的功耗。)
Peter Cordes

3
@ Evi1M4chine,这也打破了意大利跑车非常昂贵而美国肌肉车相对便宜的事实。肌肉车之所以如此,是因为它很简单,而法拉利之类的东西却非常非常复杂。CISC与RISC截然相反
LorenzoDematté16年

15

ARM体系结构最初是为Acorn个人计算机(请参阅Acorn Archimedes,大约1987年,和RiscPC)设计的,它们与基于x86的IBM PC模型一样,都是基于键盘的个人计算机。仅后来的ARM实施主要针对移动和嵌入式市场领域。

最初,与英特尔x86开发人员相比,可以由规模较小的工程团队(请参阅Berkeley RISC)来设计性能大致相当的简单RISC CPU 。

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

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


仍然存在巨大的体系结构差异。但是intel做得很出色,并投入了大量资金,以使架构不良的CPU能够很好地运行(如果将所有这些精力都投入到架构良好的CPU中,人们会想知道该怎么办)。
ctrl-alt-delor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.