0


指令集架构——CISC、RISC

一、什么是处理器架构

CPU架构,通俗来说就是计算机处理器的设计结构和组织方式。它决定了硬件如何执行软件指令,以及如何处理和存储数据。其核心组件为指令集架构和微架构

指令集架构(Instruction Set Architecture, ISA):定义了CPU可以执行的机器指令集合,以及这些指令的编码方式。ISA是软件与硬件之间的接口,它决定了软件如何与处理器交互。

微架构(Microarchitecture):也称为内部架构,是指实现ISA的处理器内部设计,包括数据路径、控制单元、寄存器、缓存、管线和其它执行指令所需的硬件。通俗来讲处理器架构就是处理器电路。

指令集和微架构的关系:

CPU中的微架构负责将指令集中的指令翻译成微操作,这些微操作在处理器内部执行。微架构的设计直接塑造了CPU的性能,更为有效的微架构能够提升指令执行速度并提高能效。

CPU厂商在不断改变指令集的前提下,可以通过升级或迭代微架构,来提升性能、能效或其他特性。

把智能设备完成以此功能操作比作是盖房子。CPU相当于工匠,它负责盖房子,但是房子具体盖成什么样,怎么盖,他不知道,得听项目经理的。系统就是项目经理,他告诉工匠具体怎么盖房子,传达的指令,相当于指令集。为了提高沟通效率,工匠和系统会约定一些只有他们能听懂的“行话”,来组成“指令库”。

二、指令集

计算机指令是计算机硬件直接能识别的命令,指令由一串二进制数码组成。一条指令通常由两个部分组成:操作码和地址码。操作码指明该指令要完成的操作的类型或性质,如取数、做加法或输出数据等;地址码指明操作对象的内容和所在的存储单元地址。计算机程序在硬件上执行是由上千万条指令组成的。一段程序通过编译翻译成汇编语言,而后通过汇编器翻译成一条一条机器码。这些机器码是由0和1组成的机器语言表示,也就是计算机指令。

指令集架构是指一种类型CPU中用来计算和控制计算机系统的一套指令的集合,指令集架构主要规定了指令格式、寻址访存、数据类型、寄存器。因此一种CPU执行的指令集架构不仅决定了CPU所要求的能力,而且也决定了指令的格式和CPU架构

指令集分为复杂指令集(CISC)和精简指令集(RISC),它们的主要区别是:

CISC的设计思路是永一条指令完成一个复杂的基本功能;

RISC的设计思路是一条指令完成一个基本“动作”,多条指令组合完成一个复杂的基本功能。

以最简单的乘法计算指令为例,

复杂指令集会调用内存A和内存B中的两个数据相乘,然后将结果存储在内存A中,当然,这需要多个处理器的时钟周期才可以完成,也就是我们所说的IPC(每周期指令,instructions per cycle)

精简指令集在执行计算的时候需调用四个处理器周期指令完成乘法的计算,即分别将内存A加载到寄存器,内存B数据加载到寄存器之中,然后调用两个寄存器中的数据进行乘法计算。寄存结果最终存入内存A。

复杂指令集性能强大,缺点是能耗高,适用于电脑、服务器

精简指令集性能差,容易组织能耗低,适用于移动设备

三、常见的ISA和微架构

主流的ISA只有几种,主要包括
指令集类型拥有者****主要应用X86CISCIntel和AMD个人电脑、服务器、游戏主机ARMRISCArm移动设备、嵌入式设备RISC-VRISC开放标准个人电脑、服务器、嵌入式系统PowerPCCISCIBM数据中心、游戏主机MIPSRISCImagination Technologies处理器、嵌入式系统AlphaCISCDEC服务器、工作站PA-RISCCISCHP服务器、工作站
微架构方面至少有数百种,甚至更多。常见的有:Zen、Lake、Cortex......

我们所编写的程序,无论是Hello World,还是复杂的王者农药,PS等大型的APP,最终都会被编译器转为一条条简单的机器指令,因此在CPU看来所有程序是没有什么本质区别的,无非就是一个包含的指令多,一个包含的指令少,这些指令就保存在可执行文件中,程序运行时被加载到内存开始被CPU执行。

CISC

程序员方便编写汇编语言以及节省存储空间的需要,直接促成了CISC的设计:

1、一条指令尽可能地完成更多的任务(指令少所使用地存储空间就少)

2、指令长度不固定,也就是变长机器指令(让简单的指令占据更少的空间)

3、机器指令高度编码

由于CISC单条指令比较复杂,设计解码机器指令的硬件(CPU的一部分)非常麻烦,为了解决这个问题,指令集中的每一条机器指令都有一小段对应的程序,这些程序存储在CPU中,这些程序由更简单的指令组成,这些指令就是所谓的微代码Microcode。对含有微代码设计的CPU来说,CPU直接执行的并不是机器指令,而是微代码。

但是微代码出现bug的时候,修复微代码的bug比修复普通程序的bug困难的多,因此提出了其它的设计——RISC。复杂指令集中那些被认为是可以提高性能的指令被内部的微代码拖后腿了,如果把微代码移除掉,程序运行的更快,而且节省CPU消耗的晶体管数量。

由于微代码的设计思想是将复杂机器指令在CPU内部转为相对简单的机器指令,这一过程对编译器不可见,也就是说你没有办法通过编译器去影响CPU内部的微代码的运行行为,如果微代码出现bug,编译器是无能为力的,你没有办法通过编译器生成其它机器指令来修复问题而只能修改代码本身,另外一些复杂的指令执行起来比等价的多个简单指令要慢。

RISC

就像二八定律所说的一样,CPU 80%的时间都在执行那20%的机器指令,一些复杂的机器指令并不怎么被经常用到,而且那些设计编译器的程序员也更倾向于组合一些简单的指令来完成特定的任务。精简指令集诞生,主要体现在:

1、指令本身的复杂度

精简指令集的思想不是说指令集中指令的数量更少,而是说一条指令背后代表的动作更简单了。

2、编译器

编译器对CPU的控制能力更强

3、load/store architecture

在复杂指令集下,一条机器指令可能涉及到从内存中取出数据、执行一些操作比如加和,然后再把执行结果写到内存中,注意这是在一条机器指令下完成的。但是在精简指令集下是万万不可以的。精简指令集下的指令只能操作寄存器中的数据,不可以直接操作内存中的数据。精简指令集下专用的load和store两条机器指令来负责内存的读写,其它指令只能操作CPU内部的寄存器。指令流水线,RISC通常支持指令级并行处理,这意味着多个指令可以在同一时钟周期内并行执行,通过将内存访问操作分离为独立的Load和Store指令,处理器可以在执行其它指令的同时,等待load和store操作完成。简化了指令集,可以更快的执行内存访问操作,提高整个执行效率。

标签: CPU 指令集

本文转载自: https://blog.csdn.net/qq_44807736/article/details/141168616
版权归原作者 修行者xxl 所有, 如有侵权,请联系我们删除。

“指令集架构——CISC、RISC”的评论:

还没有评论