加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

RISC与CISC是比较x86、ARM CPU的错误视角

2021/08/05
604
阅读需 25 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

近半年来不断有基于ARM的MacBook Pro笔记本电脑的消息。传言指出,苹果将推出一系列升级的系统,比如基于“M2”的CPU,即去年首次亮相的M1的放大版。据报道,M2可能有八个高性能内核和两个高效内核,高于现有M1的4+4配置。

随着基于ARM的M1的推出,出现了大量的x86与ARM的比较,以及对新架构进行比较和对比的讨论。在这些讨论中,你会经常看到CISC和RISC。ARM与x86的比较和CISC与RISC的比较之间的联系非常强烈。

这种联系会导致错误的联想,认为x86与ARM可以被整齐地对应为CISC与RISC,x86是CISC,ARM是RISC。三十年前,确实是这样的,今天的情况却不是这样了。关于如何将x86 CPU与其他公司制造的处理器进行比较是个老生常谈的话题,因为x86在近20年里没有一个有意义的对手。ARM可能会突出地将自己定位为一家RISC CPU公司,但今天这些术语对x86和ARM CPU状态的掩盖和澄清一样多。

行业共识

RISC是David Patterson和David Ditzel在他们1981年的论文“The Case for a Reduced Instruction Set Computer”中创造的一个术语。二人根据1970年代末观察到的趋势和当时的CPU遇到的扩展问题,提出了一种新的半导体设计方法。他们提出了“CISC”一词(复杂指令集计算机)来描述许多已经存在的、不遵循RISC原则的各种CPU架构。

由于限制CPU性能的瓶颈发生了变化,这种对CPU设计的新方法的需求也随之而来。所谓的CISC设计,包括最初的8086,是通过将复杂性转移到硬件中来处理内存的高成本问题。他们强调代码密度,一些指令在一个变量上依次执行多个操作。作为一种设计理念,CISC试图通过最大限度地减少CPU在执行特定任务时必须执行的指令数量来提高性能。CISC指令集架构通常提供广泛的特定指令。

到20世纪70年代末,CISC CPU有一些缺点。由于当时的VLSI(超大规模集成)技术无法将所有必要的组件装入一个单一的封装中,它们通常必须在多个芯片上实现。实施复杂的指令集架构,支持大量很少使用的指令,消耗了芯片空间,降低了可实现的最大时钟速度。同时,内存的成本在稳步下降,使得对代码大小的强调变得不再重要。

Patterson和Ditzel认为,CISC CPU仍然在试图解决从未完全实现的代码膨胀问题。他们提出了一个根本不同的处理器设计方法。意识到绝大多数CISC指令没有被使用(可以认为这是帕累托原则或80/20规则的应用),作者提出了一套更小的固定长度的指令,所有这些指令将在一个时钟周期内完成。虽然这将导致RISC CPU每条指令的执行量比CISC对应的指令少,但芯片设计者将通过简化他们的处理器来弥补这一缺陷。

这种简化将允许晶体管预算用于其他功能,如额外的寄存器。1981年考虑的未来功能包括“片上缓存、更大更快的晶体管,甚至是pipelining”。RISC CPU的目标是尽可能快地执行接近一个IPC(每时钟周期的指令,衡量CPU效率的一个标准)。以这种方式重新分配资源,其最终结果将超过任何可比的CISC设计。

没过多久,这些设计原则就证明了它的价值。MIPS公司在1985年推出的R2000,在某些情况下能够维持接近1的IPC。早期的RISC CPU系列如SPARC和惠普的PA-RISC系列也创造了性能记录。在20世纪80年代末和90年代初,经常听到有人说,像x86这样基于CISC的架构已经成为过去,也许对家庭计算来说已经足够好了,但如果你想用真正的CPU工作,你要买一个RISC芯片。数据中心、工作站和HPC是RISC CPU最成功的地方,如下图所示。

这张英特尔的图片很有用,但需要一点背景。“英特尔架构”似乎只指x86 CPU,而不是像8080这样的芯片,后者在早期计算机市场上很受欢迎。同样,英特尔在2000年有一些“RISC”类别的超级计算机。具体来说,是x86机器获得了市场份额。

考虑一下这张图片对1990年CPU市场状况的描述。到1990年,x86将非x86的CPU限制在个人电脑市场的20%,但在数据中心几乎没有x86的份额,在HPC也没有。当苹果想在下一代CPU设计上下注时,它在1991年选择了PowerPC,因为它相信按照RISC原则构建的高性能CPU是计算的未来。

关于CISC与RISC的共同历史的协议在20世纪90年代初就停止了。英特尔的x86架构后来主导了个人电脑、数据中心和HPC领域,这一点是无可争议的。有争议的是,英特尔和AMD是否通过采用RISC设计的某些原则实现了这一目标,还是他们声称那样做是谎言。

不同的声音像RISC和CISC这样的术语之所以不好理解,其中一个原因是对某些CPU发展的意义和性质存在着长期的分歧。

首先,这是来自RealWorldTech的Paul DeMone在“RISC vs. CISC Still Matters”中所说的:

随着现代x86处理器的实现,采用固定长度的控制字来操作无序执行数据路径,混淆RISC和CISC之间的明确区别的运动进入了高潮……“RISC和CISC正在融合”的观点是一个根本上有缺陷的概念,可以追溯到1992年i486的发布,其根源是对指令集架构和物理处理器实现细节之间的区别的普遍无知。

相比之下,Jon“Hannibal”Stokes在“RISC vs. CISC: the Post-RISC Era”中写道:

现在,应该很明显,RISC和CISC这两个缩写词掩盖了这样一个事实,即这两种设计理念所处理的不仅仅是指令集的简单性或复杂性……根据对RISC和CISC的历史发展的了解,以及他们各自试图解决的问题,现在应该很明显,这两个术语会变成无稽之谈……无论如何RISC和CISC的争论早已结束,现在必须进行更细微、更有趣的讨论,将每个平台,硬件和软件、ISA和实现放在其自身的优点上。

这些文章都不是新的。Stokes的文章写于1999年,DeMone的文章写于2000年。我引用了他们的话来证明RISC和CISC的区别是否与现代计算有关,这个问题实际上已经有20多年的历史了。Jon Stokes非常专业,很显然不会掉进DeMone所说的“无知”陷阱。

实施与ISA

谈论CISC与RISC有两种不同观点。一种观点与ARM或苹果今天的观点大致相似。这被称为以ISA为中心的立场。

另一种观点是过去几十年来在PC媒体中普遍占主导地位的观点。我们称其为以实施为中心的立场。我使用“实施(Implementation)”这个词是因为它在上下文中既可以指CPU的微架构,也可以指用于制造物理芯片的工艺节点。这两个因素都与我们的讨论有关。

根据以ISA为中心的立场,RISC指令集有一些先天的特点,使这些架构比它们的x86表亲更有效率,包括使用固定长度的指令和加载/存储设计。虽然CISC和RISC之间的一些原始差异不再有意义,但以ISA为中心的观点认为,就x86和ARM之间的性能和功率效率而言,剩余的差异仍然是决定性的,提供了一个苹果对苹果的比较。

这种以ISA为中心的观点认为,英特尔、AMD和x86胜过MIPS、SPARC和POWER/PowerPC有三个原因。英特尔卓越的工艺制造,随着时间的推移,英特尔卓越的制造使所谓的“CISC税”逐渐减少,以及二进制兼容性使x86随着其安装基础的增长而更有价值,无论它是否是最好的ISA。

以实施为中心的观点认为,自从RISC和CISC这样的术语被发明以来,现代CPU已经发生了变化,并认为我们正在使用一对完全过时的类别。

这里有一个例子。今天,x86和高端ARM CPU都使用失序执行来提高CPU性能。使用硅片在中重新排序指令以提高执行效率,这与RISC最初的设计理念完全相悖。有人主张采用能够以更高的时钟速度运行的不太复杂的CPU。现代ARM CPU的其他共同特征,如SIMD执行单元和分支预测,在1981年也不存在。RISC的最初目标是让所有指令在一个周期内执行,大多数ARM指令符合这一规则,但ARMv8和ARMv9 ISA包含需要一个以上时钟周期才能执行的指令。现代x86 CPU也是如此。

以实施为中心的观点认为,工艺节点的改进和微架构的增强相结合,使x86很早就缩小了与RISC CPU的差距,在非常低的功率范围内,ISA级别的差异是不相关的。这是2014年一项关于ISA效率的研究所支持的观点,这也是英特尔和AMD普遍支持的观点。

但这是对的吗?

RISC和CISC的发展是否趋同?

以实施为中心的观点是,几十年来,CISC和RISC CPU一直在向对方演进,从1990年代中期x86 CPU采用新的“类RISC”解码方法开始。

常见的解释是这样的。在20世纪90年代初,英特尔和其他x86 CPU制造商意识到,在未来提高CPU性能需要的不仅仅是更大的缓存或更快的时钟。多家公司决定投资于x86 CPU微架构,这些微架构将在飞行中重新排列自己的指令流以提高性能。作为该过程的一部分,本地x86指令被送入x86解码器,并在执行前被翻译成“类RISC”的微操作。

这已经是二十多年来的传统智慧,但最近它又受到了挑战。早在2020年,Erik Engheim在Medium上发表的一篇文章中写道:“x86芯片中没有RISC内部结构。这只是一种营销策略。”他同时指出了DeMone的故事和P6微架构背后的首席架构师Bob Colwell的一段话。

P6微架构是英特尔第一个实现失序执行和原生x86-micro-op解码引擎的微架构。P6是作为奔腾Pro出货的,它演变成了奔腾II、奔腾3,以及更多。它是现代x86 CPU的祖先。

英特尔的x86处理器在“引擎”下没有一个RISC引擎。他们通过解码/执行方案实现x86指令集架构,该方案依赖于将x86指令映射为机器操作,或复杂指令的机器操作序列,然后这些操作在微架构中找到自己的方式,遵守关于数据依赖性的各种规则,并最终确定时间顺序。
完成这一壮举的“微操作”有100多比特,携带各种奇怪的信息,不能由编译器直接生成,不一定是单周期。但最重要的是,它们是一种微架构的假象……微操作的想法不是“受RISC启发”,“类RISC”,或与RISC完全有关。这是设计团队找到了一种方法来打破一个非常复杂的指令集的复杂性,使其脱离了竞争性微处理器中的微架构机会和限制。

 

到此应该可以结案了吧,对吗?

并非如此。

英特尔并不是第一个将x86前端解码器与声称是“RISC风格”的后端相结合的x86 CPU制造商。后来被AMD收购的NexGen公司就是这样。NexGen 5×86 CPU于1994年3月首次亮相,而Pentium Pro直到1995年11月才推出。以下是NexGen对其CPU的描述。“Nx586处理器是NexGen的创新和专利RISC86微架构的第一个实现。”后来,该公司又给出了一些细节。“创新的RISC86方法动态地将x86指令转换为RISC86指令。如下图所示,Nx586利用了RISC的性能原理。由于RISC86的环境,每个执行单元更小,更紧凑。”

仍然可以说这是营销言论,仅此而已,所以让我们提前到1996年和AMD的K5。K5通常被描述为与AMD从其32位RISC微控制器Am29000借来的执行后端结和的x86前端。在我们查看它的框图之前,我想把它与最初的英特尔奔腾进行比较。奔腾可以说是CISC x86进化的顶峰,因为它在x86 CPU中同时实现了流水线和超大规模,但没有将x86指令转化为微操作,也缺乏失序执行引擎。

如果花时间看微处理器框图,K5应该看起来很熟悉,而奔腾则不一样。AMD在Nx586推出后收购了NexGen。K5是AMD的自主设计,但K6最初是NexGen的产品。从这一点来看,CPU开始看起来更像我们今天熟悉的芯片。而根据设计这些芯片的工程师们的说法,这些相似之处不只停留在表面。

AMD公司的David Christie早在1996年就在IEEE Micro上发表了一篇关于K5的文章,谈到了它如何将RISC和CISC混合在一起。

我们开发了一个松散地基于29000指令集的微型ISA。一些额外的控制字段将微指令的大小扩大到59位。其中一些简化了超标量控制逻辑并提高了其速度。其他的则提供了x86特有的功能,这些功能对于用微指令序列合成来说性能太关键了。但是,这些微指令仍然坚持基本的RISC原则:简单的寄存器到寄存器的操作,对寄存器指定符和其他字段进行固定位置编码,每次操作不超过一个内存引用。由于这个原因,我们称它们为RISC操作,或简称为ROP(发音为R-ops)。它们简单、通用的性质给了我们很大的灵活性来实现更复杂的x86操作,有助于保持执行逻辑相对简单。

然而,RISC微架构最重要的方面是,x86指令集的复杂性在解码器处停止,对失序执行核心基本透明。这种方法除了投机性失序RISC执行所需的控制复杂性外,几乎不需要额外的控制复杂性来实现投机性失序x86执行。一个任务切换的ROP序列看起来并不比一串简单指令的复杂。执行核心的复杂性实际上是与架构的复杂性隔离开来的,而不是被它所复合。

Christie并没有混淆ISA和CPU物理实现的细节之间的区别。他认为,物理实现本身在重要的方面是“类似于RISC”。

K5重新使用了AMD为其Am29000系列RISC CPU开发的部分执行后端,它实现的内部指令集比本地x86 ISA更像RISC。NexGen和AMD在此期间提到的RISC风格的技术参考了数据缓存、流水线和超标量架构等概念。这些概念没有一个是严格意义上的RISC,但它们都首先在RISC CPU中亮相,而且在K5还是新的时候,它们是与RISC CPU相关的优势。将这些功能作为“类RISC”来推销是有意义的,这与那个时代的OEM厂商将他们的PC描述为“IBM兼容”是有意义的。

这些功能在多大程度上是RISC,以及x86 CPU是否能解码RISC风格的指令,取决于你选择的问题框架标准。这个争论比奔腾Pro更大,即使P6是与失序执行引擎等技术的发展最相关的微架构。不同公司的不同工程师有他们自己的观点。

x86 CPU在现代有多大的局限性?

现在是时候把这个讨论拉到现代,并考虑这种RISC与CISC的比较对今天实际出货的ARM和x86 CPU有什么影响。当我们将AMD和英特尔的CPU与苹果的M1和未来的M2进行比较时,我们真正要问的问题是,是否存在历史上的x86瓶颈,使x86无法与苹果和高通等公司的未来ARM芯片进行有效竞争?

根据AMD和英特尔的说法。根据ARM的说法:不。是的。由于所有相关公司都有明显的利益冲突,可以参考Agner Fog的回答。

Agner Fog是一位丹麦进化人类学家和计算机科学家,因其在x86架构方面的大量资源而闻名。如果你想了解各种英特尔和AMD CPU的底层行为,他的微架构手册几乎是必读的。

ISA并不是无关紧要的。x86 ISA是非常复杂的,因为长期以来,小的增量变化和补丁给ISA增加了更多的功能,而这个ISA确实没有空间容纳这些新功能…… 

复杂的x86 ISA使解码成为瓶颈。一条x86指令可以有从1到15个字节的任何长度,而计算长度是相当复杂的。而且你需要知道一条指令的长度,然后才能开始解码下一条指令。如果你想在每个时钟周期解码4条或6条指令,这当然是个问题!英特尔和AMD现在都在不断增加更大的微操作缓存来克服这个瓶颈。ARM有固定大小的指令,所以这个瓶颈不存在,也不需要微操作缓存。

x86的另一个问题是,它需要一个长的流水线来处理复杂问题。分支错误预测的惩罚等于管道的长度。因此,他们正在增加越来越复杂的分支预测机制,包括大型分支历史表和分支目标缓冲器。当然,所有这些都需要更多的硅空间和更多的功率消耗。

尽管有这些负担,X86 ISA还是相当成功。这是因为它可以为每条指令做更多的工作。例如,具有32位指令的RISC ISA不能在一条指令中加载一个内存操作数,如果它需要32位的内存地址。

Agner在他的微架构手册中还写道,最近AMD和英特尔CPU设计的趋势又回到了CISC原则,以更好地利用有限的代码缓存,增加流水线带宽,并通过在流水线上保留更少的微操作来降低功耗。这些改进代表了微架构的偏移,改善了x86的整体性能和功率效率。

在这里,我们终于来到了问题的核心。现代AMD和英特尔CPU为x86兼容性付出了多大的代价?

Agner在上面提到的解码瓶颈、分支预测和流水线的复杂性是ARM认为x86所承担的“CISC税”的一部分。过去,英特尔和AMD曾告诉我们解码功率在芯片总功耗中只占一位数。但是,如果CPU为了弥补解码带宽的不足而烧掉微操作缓存或复杂的分支预测器的功率,这就没有什么意义了。微操作缓存的功耗和分支预测的功耗都是由CPU的微架构和其制造工艺节点决定的。RISC与CISC并不能充分体现这三个变量之间关系的复杂性。

我们还需要几年时间才能知道苹果的M1和高通公司未来的CPU是否代表了市场的巨大变化,或者AMD和英特尔将迎接的下一个挑战。维持x86兼容性是否是现代CPU的负担,既是一个新问题,也是一个非常古老的问题。新,是因为在M1推出之前,没有任何有意义的比较。旧,因为这个话题曾经有相当多的讨论,那时还有非x86的CPU在个人电脑中使用。

AMD继续以每年1.15-1.2倍的速度改进Zen。我们知道英特尔的Alder Lake也将使用低功耗的x86 CPU内核来改善空闲功耗。这两家x86制造商都在继续发展他们的性能方法。我们需要时间来观察这些内核以及它们的后继者是如何与未来的苹果产品相抗衡的,x86并没有退出这场战斗。

为什么RISC与CISC是比较x86、ARM CPU的错误方式?

当Patterson和Ditzel创造了RISC和CISC时,他们打算澄清CPU设计的两种不同策略。40年过去了,这两个术语在澄清的同时也模糊了许多。RISC和CISC并非毫无意义,但这两个术语的含义和适用性已经变得高度相关。

[参考文章]

RISC vs. CISC Is the Wrong Lens for Comparing Modern x86, ARM CPUs — Joel Hruska

AMD

AMD

AMD公司成立于1969年,总部位于美国加利福尼亚州桑尼维尔。AMD(NYSE: AMD)是一家创新的科技公司,致力于与客户及合作伙伴紧密合作,开发下一代面向商用、家用和游戏领域的计算和图形处理解决方案。

AMD公司成立于1969年,总部位于美国加利福尼亚州桑尼维尔。AMD(NYSE: AMD)是一家创新的科技公司,致力于与客户及合作伙伴紧密合作,开发下一代面向商用、家用和游戏领域的计算和图形处理解决方案。收起

查看更多

相关推荐

电子产业图谱

C.A.S.E.及大出行领域学习及知识分享。欢迎业内朋友交流~!