架构与指令集

半日闲 2020年12月23日 61次浏览

前言

最近在补充一些硬件方面的知识,经常对x86,amd64,RISC等概念混淆,因此专门去查了下这方面的常识。
本文会对以下概念之间的关系做出解释,以确保阅读过本文的同学们都可以清楚的明白其中的关系。
RISC和CISC
x86和arm
amd和intel

RISC和CISC的关系

CPU的体系大致分为2类,RISC和CISC,其中RISC是精简指令集,CISC是复杂指令集,以下为2者的对比,
CISC指令集

  • 指令系统庞大,指令功能复杂,指令格式、寻址方式多;
  • 绝大多数指令需多个机器周期完成;
  • 各种指令都可访问存储器;
  • 采用微程序控制;
  • 有专用寄存器,少量;
  • 难以用优化编译技术生成高效的目标代码程序;

RISC指令集

  • 统一指令编码(例如,所有指令中的op-code永远位于同样的位元位置、等长指令),可快速解译;
  • 泛用的暂存器,所有暂存器可用于所有内容,以及编译器设计的单纯化(不过暂存器中区分了整数和浮点数);
  • 单纯的寻址模式(复杂寻址模式以简单计算指令序列取代);
  • 硬件中支援少数资料型别(例如,一些CISC电脑中存有处理字节字串的指令。这在RISC电脑中不太可能出现)。

这2者 区别在于不同CPU的设计理念和方法 ,首先需要确认1点的是, CISC比RISC要出现的早 ,在CISC出现后,IBM发现在CISC的各种指令集中,其中20%的指令集被反复使用,而80%的指令集却不经常使用,因此重新设计出了RISC。这2者均是为了在体系结构,操作运行,编译时间等诸多因素中,做出某种平衡,以求得达到高效的目的。其差异还是很大的,如下

  • 指令系统:RISC设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。因此,在RISC机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而CISC计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。
  • 存储器操作:RISC对存储器操作有限制,使控制简单化;而CISC机器的存储器操作指令多,操作直接。
  • 程序:RISC汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计;而CISC汇编语言程序编程相对简单,科学计算及复杂操作的程序社设计相对容易,效率较高。
  • 中断:RISC机器在一条指令执行的适当地方可以响应中断;而CISC机器是在一条指令执行结束后响应中断。
  • CPU:RISC的CPU包含有较少的单元电路,因而面积小、功耗低;而CISCCPU包含有丰富的电路单元,因而功能强、面积大、功耗大。
  • 设计周期:RISC微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术;CISC微处理器结构复杂,设计周期长。
  • 用户使用:RISC微处理器结构简单,指令规整,性能容易把握,易学易用;CISC微处理器结构复杂,功能强大,实现特殊功能容易。
  • 应用范围:由于RISC指令系统的确定与特定的应用领域有关,故RISC机器更适合于专用机;而CISC机器则更适合于通用机。

基于RISC和CISC发展而来的架构

关于指令集的资料都是公开的,任何人都可以拿来使用,但是由于知识产权的原因,需要取得授权才行。基于RISC和CISC,在这么多年的发展中,已经发展出来了很多其他的架构,以下只说常规的,
以RISC为例,如下

  • ARM
  • MIPS
  • Power PC
  • LongArch

而CISC如下

  • x86
    • x86-32
    • x86-64
  • IA
    • IA-32
    • IA-64

注意,x86架构是由Intel公司发明,但是最初是32位,随着计算机的发展,Intel开始转向64位的指令集研发,但是却被AMD公司所领先,并且兼容x86,结果先抢占了市场,且命名为AMD64,后续Intel公司虽然联合惠普公司开发了IA-64指令集,但是由于不兼容x86,且比AMD要晚点出现,因此很惨淡,当然了Intel最后还是自行开发了属于自己的64位指令集Intel64,由于AMD和Intel公司开发的64位的指令集均可以兼容x86指令集,因此厂商为了不区别对待,现在通常都叫做x86_64,用以表示支持x86的64位架构。

ARM指令集

ARM是基于RISC设计的1个32位的精简指令集,由于其功耗低的特点,广泛应用与嵌入式的设备中,特别是移动通信领域(简单点说,就是手机)中,ARM架构包含了以下RISC的特点,如下

  • 读取/储存 架构
  • 正交指令集(任意存取指令可以任意的寻址方式存取数据Orthogonal instruction set)
  • .大量的16 × 32-bit 寄存器阵列(register file)
  • 固定的32 bits 操作码(opcode)长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。
  • 大多均为一个CPU周期执行。
  • 大部分指令可以条件式地执行,降低在分支时产生的负重,弥补分支预测器(branch predictor)的不足。
  • 算数指令只会在要求时更改条件编码(conditioncode)
  • 32-bit筒型位移器(barrelshifter)可用来执行大部分的算数指令和寻址计算而不会损失效能
  • 强大的索引寻址模式(addressing mode)
  • 精简但快速的双优先级中断子系统,具有可切换的暂存器组

基于ARM架构设计的处理器,被应用到很多的消费性电子产品中,比如,树莓派,手机,工控机,路由器甚至导弹的控制计算机中。

MIPS指令集

MIPS是由MIPS公司基于RISC开发的1种架构,同样被应用于许多电子产品,网络产品,以及各种商业设备上。MIPS架构是最早出现的商业RISC架构之一,MIPS架构的系统结构和设计理念比较先进,强调软硬件协同从而提高性能,同时简化硬件设备,因此性能往往都非常强悍。 **2002年,中国科学院计算所研发的龙芯处理器,采用的MIPS架构,但是未经该MIPS公司授权,遭到侵权的控告,2007年,中国科学院和MIPS公司达成和解协议,取得正式授权,龙芯2和前代产品均采用的64位的MIPS架构。 **过去MIPS架构的产品多见于工作站领域,如索尼PS2游戏机所用的“Emotion Engine”

Power PC指令集

Power PC是由IBM,摩拉公司和苹果公司共同开发的高性能的32位和64位的RISC微处理器系列。随着Power PC的发展,现在Power PC已经形成了庞大的家族,在通信,工控,航天国防等高性能和高可靠性的领域得到了广泛的应用。目前主流的Power PC处理器的制造商有IBM,Freescale等,IBM和Freescale的处理器是其中最流行的2家。
以下先讲解IBM公司的情况,如下

IBM公司

该公司的Power PC架构的处理器,主要分为Power,Power PC和CELL这3个系列。其Power和Power PC中间还有个Star系列。
POWER系列
从1990开始生产、装备到RS/6000(即RISC System/6000)UNIX工作站和服务器上,现在被称为eServer™ pSeries®服务器(最新的名称是POWER System p系列),主要的型号有POWER 1,POWER 2™,POWER 3™,POWER 4™,POWER 4+,以及目前的POWER 5,POWER 5+和刚刚推出的POWER 6处理器。最早的801是POWER系列处理器的前身,它的设计非常简单,为了实现所有的指令都能在一个时钟周期内完成,因此缺乏浮点运算和并行处理能力,POWER架构为了解决这个问题,或者说超越801的限制,增加到了100多条指令,成为一种很“复杂”的精简指令集CPU。
Star系列
该系列是Power PC架构的另一种技术实现,与POWER系列非常类似。由于此系列的各种CPU代号都有Star或者用某一颗星的名字来命名,因此被称为Star系列。主要型号有RS64,RS64-II,RS64-III,RS64-IV。
Power PC系列
该系列是从POWER架构发展出来的一个分支,最早在1993年发布,用于从单板机、电池电源管理到超级计算机和Mainframe主机。Power PC最早登上主角的地位是从作为Power Macintosh 6100的CPU开始的。主要型号有Power PC 400,Power PC 600,Power PC 700,Power PC 900 。

Freescale公司

该公司提供了数量众多的含集成化外设的PowerPC处理器,目前在网络设备市场取得了非常可观的成功。目前该公司已经调整其PowerPC产品策略,将其划分成3个主要市场:网络设备、汽车电子(MPC5xx系列)和工业控制。Freescale公司和IBM公司在Power PC上的不同,其很大程度上,归功于Power QUICC。
关于Power QUICC的来历如下**,1993年, 摩托罗拉半导体事业部(飞思卡尔半导体前身)在充分理解通信系统应用的基础上,生产了第一颗包含QUICC(Quad Integrated Communications Controller)的芯片--MC68360。此时, QUICC实际上是一颗独立的处理器。1994年, 摩托罗拉半导体事业部的工程师开始把 MC68360的 QUICC和PowerPC内核结合,将集成了 QUICC的PowerPC处理器称为 Power QUICC,并将 其中的QUICC处理模块称为CPM。**主要型号有603内核系列,603E内核系列,E300内核系列,E500内核系列,E600内核系列,E700内核系列等。

指令集,内核的关系

指令集,即上文中提到的诸多指令集内核 ,即指令集的具体硬件实现方案,内核往往也会被成为核心微架构等词,如Haswell,Cortex-A15都是内核的代号而已。
ARM公司将自己研发的指令集叫做ARM指令集,同时它还研发具体的微架构如Cortex系列并对外授权。但是,一款CPU使用了ARM指令集不等于它就使用了ARM研发的微架构。Intel、高通、苹果、Nvidia等厂商都自行开发了兼容ARM指令集的微架构,同时还有许多厂商使用ARM开发的微架构来制造CPU。通常,业界认为只有具备独立的微架构研发能力的企业才算具备了CPU研发能力,而是否使用自行研发的指令集无关紧要。微架构的研发也是IT产业技术含量最高的领域之一。厂商研发CPU时并不需要获得指令集授权就可以获得指令集的相关资料与规范,指令集本身的技术含量并不是很高。获得授权主要是为了避免法律问题。然而微架构的设计细节是各家厂商绝对保密的,而且由于其技术复杂,即便获得相应文档也难以山寨。不同厂商的微架构设计水平也有较大差异,典型如Intel与AMD的对比,前者在最近几年明显技高一筹。