CPU有多种架构,例如x86,ARM,RISC-V,不同的架构定义了不同的指令集架构(ISA,Instruction Set Architecture)。ISA通常包括数据处理指令(数学运算、逻辑运算、比较、移位等)、数据搬运、控制流指令(程序执行地址的跳转);从宏观角度ISA可以分为CISC(复杂指令集计算)和RISC(精简指令集计算)两种不同的处理器设计理念。
1 CISC的设计理念
CISC是在硬件中实现复杂的指令,以减少编程的复杂性和代码长度,可以执行多种复杂的操作,通过少量指令实现多步骤的任务。
CISC的特点
- 丰富的指令集:CISC处理器通常具有大量复杂指令,每条指令可以执行多个低级操作(如内存访问、算术运算等)。
- 多种寻址模式:CISC支持多种复杂的寻址模式,以便灵活访问内存。
- 较少的指令数量:通过复杂指令,减少程序中指令的数量,从而减少程序大小。
- 微代码控制:CISC处理器使用微代码(microcode)来实现复杂指令的执行,硬件内部通过微指令解释高级指令。
- 复杂性和功耗:由于硬件设计复杂,CISC处理器往往具有较高的功耗和复杂性。
CISC的优劣势
- 编程简便,高级指令减少了编程的复杂性,开发者可以使用更少的代码实现复杂的操作;代码紧凑,复杂指令减少了指令的数量,使得程序占用更少的存储空间。
- 实现复杂指令需要更多的硬件资源,增加了硬件设计和制造的复杂性;而复杂的硬件设计通常导致较高的功耗。
CISC的典型代表
x86架构:由Intel和AMD主导,广泛应用于桌面计算机和服务器。
2 RISC设计理念
RISC处理器使用简单而高效的指令,每条指令执行的操作尽可能少,并在一个时钟周期内完成,通过简化指令集,优化指令执行的效率。
RISC的特点
- 简化的指令集:RISC处理器的指令集简洁,每条指令通常只执行一个简单操作。
- 固定长度指令:指令长度通常是固定的,便于指令解码和流水线处理。
- 多通用寄存器:RISC处理器通常具有大量通用寄存器,用于减少对内存的访问。
- 加载/存储架构:RISC使用加载(Load)和存储(Store)指令进行内存访问,其他指令只在寄存器之间操作。
- 流水线技术:RISC架构特别适合指令流水线技术,提高指令执行的吞吐量。
RISC的优劣势
- 简单指令易于解码和执行,提高了处理器的执行效率;简化的硬件设计通常带来较低的功耗,适合移动和嵌入式设备;此外由于指令集简洁,RISC处理器易于扩展和优化。
- 编程复杂:由于每条指令执行的操作简单,可能需要更多的指令来完成复杂任务,增加了编程复杂性和程序长度。
RISC的典型代表
- ARM架构:广泛应用于移动设备、嵌入式系统和物联网设备。
- MIPS架构:曾广泛用于嵌入式系统、网络设备和游戏机。
- RISC-V架构:开源架构,迅速发展并应用于多种领域。
3 主要CPU架构
3.1) x86 架构
ISA:x86 和 x86-64
X86始于1978年的Intel 8086处理器,广泛应用于个人计算机和服务器;目前主要有Intel、AMD、上海兆芯等公司专注于x86架构的CPU开发设计。x86是CISC架构,具有丰富的指令集,可以直接支持许多复杂操作,早期大多数CISC处理器都需要使用微代码单元来简化复杂指令的实现,例如Intel 8086和80286使用微代码来管理复杂指令。现代x86处理器如Intel的Core系列和AMD的Ryzen系列,已经大大优化了微架构,直接通过硬件电路来实现部分复杂指令以提高性能。
x86 典型结构
1)前端(Frontend)
- 指令缓存(Instruction Cache):存储从主存读取的指令,减少对主存的访问延迟。
- 指令预取单元(Instruction Fetch Unit):从指令缓存或主存中读取指令,并将其送到解码器。
- 指令解码器(Instruction Decoder):将CISC指令解码成内部使用的微操作(micro-operations或uops)。
- 分支预测单元(Branch Predictor):预测程序的分支路径,减少分支指令造成的延迟。
2)后端(Backend)
- 微操作队列(uop Queue):存储解码后的微操作,准备发送给执行单元。
- 执行单元(Execution Units):包含多个功能单元,如整数单元(Integer Units)、浮点单元(Floating Point Units)、加载/存储单元(Load/Store Units)等,负责实际的计算任务。
- 寄存器重命名(Register Renaming):解决指令级并行中的寄存器冲突问题,通过重命名寄存器实现并行执行。
3)内存子系统(Memory Subsystem)
- 数据缓存(Data Cache):存储频繁访问的数据,减少内存访问延迟,包括L1数据缓存、L2缓存和L3缓存。
- 内存控制器(Memory Controller):管理主存的访问,将数据在处理器和主存之间传输。
4)控制单元(Control Unit)
- 微程序存储器(Microcode ROM):存储复杂指令的微代码程序(如果使用微代码)。
- 控制信号生成器(Control Signal Generator):生成控制信号,协调各个模块的工作。
x86 工作原理
1)指令预取和缓存
指令预取单元从指令缓存中读取指令,若指令缓存未命中,则从主存中读取指令,更新指令缓存。
2)指令解码
指令解码器将CISC指令解码为一个或多个微操作(对于复杂指令,可能需要多个微操作来实现),某些现代处理器可能直接通过硬件执行部分复杂指令,而不依赖微代码。
3)分支预测
分支预测单元预测程序的执行路径,若预测正确,可以减少管道停顿,提高执行效率;若预测错误,需要清除流水线并重新执行正确路径。
4)微操作调度和执行
解码后的微操作被放入微操作队列等待调度,调度器根据资源可用性将微操作分派到相应的执行单元。
5)执行单元
执行单元完成具体的计算任务,包括整数运算、浮点运算、加载和存储操作,寄存器重命名单元确保多个指令可以并行执行,而不会互相干扰。
6)内存访问
如果指令涉及内存访问,数据缓存会首先检查是否命中,若缓存命中,直接从缓存读取或写入数据;若未命中,则访问主存。
7)写回
执行单元将计算结果数据可能被写回到寄存器文件中或通过数据缓存写回到主存。
3.2)ARM 架构
ISA:ARMv7、ARMv8、ARMv9等
ARM(Advanced RISC Machine)是一种基于RISC架构的指令集,最初由Acorn Computers开发,现在由ARM Holdings(已被Nvidia收购)拥有和推广。ARM指令集设计简洁,每条指令长度固定(大多为32位),易于解码和执行,指令集中的每条指令执行时间一致,通常在一个时钟周期内完成。由于RISC架构的简洁性和高效性,ARM处理器能耗低,广泛应用于移动设备、嵌入式系统和越来越多的服务器和超算领域,目前ARM架构在全球拥有庞大的用户群体和丰富的软件生态系统。
ARM 处理器典型结构
1)指令预取单元
指令预取单元由程序计数器(PC)和指令缓存组成,旨在从指令缓存或主存中读取指令。
2)指令解码器
指令解码器单元由解码逻辑和控制信号生成器,将取到的指令解码成控制信号和操作数。
3)执行单元
执行单元由算术逻辑单元、浮点运算单元、加载/存储单元(Load/Store),乘法器和分支单元组成,负责将取到的指令解码成控制信号和操作数。
4)寄存器文件
寄存器文件包括通用寄存器,专用寄存器(如堆栈指针SP,链指针LR,程序计数器PC),负责存储操作数和结果。
5)流水线
典型的五级流水线:取指,解码,执行,访存,写回,旨在将指令执行分为多个阶段,以提高处理器效率。。
6)内存子系统
内存子系统由数据缓存,内存控制器组成,负责管理数据缓存和内存访问。。
ARM 处理器工作原理
1)指令预取
指令预取单元从指令缓存(或主存)中读取指令,程序计数器(PC)包含下一条要执行指令的地址,并将指令加载到指令寄存器中。
2)指令解码
指令解码器将指令解码成操作码(opcode)和操作数,并生成控制信号用于控制执行单元的操作。
3)执行
执行单元根据解码后的指令执行具体的操作,不同的执行单元(如ALU、FPU、Load/Store单元)完成相应的任务。
4)访存
如果指令涉及内存访问(如加载或存储操作),数据缓存首先检查是否命中,如果命中,从缓存中读取数据或将数据写入缓存;如果未命中,访问主存。
5)写回
执行结果写回到寄存器文件或内存中,写回阶段确保所有操作数和结果都正确存储。
3.3) RISC-V架构
ISA:RISC-V,基础指令集(RV32I, RV64I, RV128I)和可选扩展(如M、A、F、D、Q)
RISC-V是一种开源、免费、可定制的指令集架构,由加州大学伯克利分校的RISC-V团队开发2010年发布,它的设计理念是简洁、模块化和多个可选扩展(如整数乘除法、原子操作、浮点运算)的指令集,旨在为各种应用提供一个通用的、可定制的处理器设计。RISC-V ISA的设计从一开始就采用了开源的方式,吸引了全球学术界和工业界的广泛关注,大量社区和企业参与开发和优化,支持多种操作系统和工具链(如GCC, LLVM),目前主要应用于嵌入式系统、物联网、研究和教育,越来越多地用于高性能计算和服务器。
RISC-V 处理器典型结构
RISC-V典型结构和ARM处理器典型结构类似,由指令预取单元(从指令缓存或主存中读取指令)、指令解码器(将取到的指令解码成控制信号和操作数)、执行单元(执行解码后的指令操作)、寄存器文件(存储操作数和结果)、流水线(取指、解码、执行、访存、写回)和内存子系统(管理数据缓存和内存访问)组成。
RISC-V 处理器工作原理
1)指令预取
指令预取单元从指令缓存(或主存)中读取指令,程序计数器包含下一条要执行指令的地址,并将指令加载到指令寄存器中。
2)指令解码
指令解码器将指令解码成操作码和操作数,并生成控制信号控制执行单元的操作。
3)执行
执行单元根据解码后的指令执行具体的操作。
4)访存
如果指令涉及内存访问(如加载或存储操作),数据缓存首先检查是否命中:如果命中,从缓存中读取数据或将数据写入缓存;如果未命中,访问主存。
5)写回
执行结果写回到寄存器文件或内存中。
通过以上流程,RISC-V处理器高效地完成了一条简单指令的执行,利用流水线提高指令执行的并行性和效率,每个流水线阶段处理不同的指令部分,确保处理器在每个时钟周期都能完成指令的一部分,提高整体性能。
3.4)其它架构
MIPS 架构也是一种基于RISC架构的指令集,由MIPS计算机系统公司(MIPS Computer Systems, Inc.)开发。ISA主要有MIPS32(应用于嵌入式系统和低功耗设备)、MIPS64(提高了性能和内存寻址能力)两个版本,指令集设计简洁,每条指令固定长度(32位)易于解码和执行,经典的五级流水线设计,在早期嵌入式和教育市场占有一席之地,但近年来市场份额减少。商业模式类似ARM架构,采用基于授权许可的商业模式。
Power 架构也是RISC架构,主要由IBM(主要开发者)、Freescale(现为NXP)、Apple(参与)共同开发,设计上注重高性能计算。ISA主要有PowerPC、Power ISA两个版本,PowerPC是早期版本,广泛应用于Apple电脑(已转向x86)以及嵌入式和消费电子设备;Power ISA是最新版本,支持高性能计算和企业级服务器。
4 超标量CPU
超标量(Superscalar)CPU 是相对于标量(Scaler)CPU而言的,标量CPU是指同一个时钟周期内只处理单条指令和单一数据,而超标量CPU是一种高性能的处理器架构,它具有多个执行单元和流水线阶段,允许同时执行多条指令,更有效地利用处理器资源,从而提高吞吐率和执行效率。
工作原理
1)多功能执行单元: 超标量CPU 包含多个执行单元,例如整数单元、浮点单元、加载/存储单元等。每个执行单元可以同时执行不同类型的指令,使得多个指令可以同时处理,提高了并行度。
2)指令调度和发射: 超标量CPU 具有指令调度单元,负责将待执行的指令按照其依赖关系和可用资源进行调度。一旦指令的依赖关系得到满足,并且需要的资源可用,这些指令就会被发射到执行单元中。
3)乱序执行: 为了进一步提高指令级并行度,超标量CPU 通常采用乱序执行技术。在乱序执行中,CPU 可以动态地重新排序指令,以最大程度地利用可用的执行单元,使 CPU 在等待某些指令的结果时不必停滞等待,从而提高了整体执行效率。
4)流水线技术: 超标量CPU 使用流水线技术将指令的执行过程分成多个阶段,例如取指、解码、执行、访存和写回,这些阶段允许多条指令同时处于不同的执行阶段,以实现指令级并行执行。
5)分支预测: 由于分支指令可能会改变程序的控制流,超标量CPU 通常配备了分支预测单元,用于预测分支指令的执行路径,正确预测分支可以避免流水线的停顿,从而提高整体性能。
6)缓存和高速通信: 超标量CPU 常常配备了高速缓存和高速通信通道,以减少内存访问的延迟,能够存储频繁使用的数据和指令,提高了数据访问速度和指令的获取速度。
特别说明
超标量CPU与我们常说的众核架构是完全不同的两个概念,超标量CPU 是一种单芯片的处理器架构,具有多个执行单元和流水线阶段,允许同时执行多条指令; 众核架构是一种多处理器系统,由多个处理器核心组成,每个核心可以独立地执行指令,这些核心可以是对称多处理器(SMP)结构或非对称多处理器(AMP)结构。超核CPU的设计目标是提高单个处理器的性能和效率,主要用于通用计算任务,例如桌面计算机、服务器和移动设备;而众核架构则更适用于需要大量并行处理能力的应用,例如图形处理、深度学习、大规模数据处理等,广泛应用于高性能计算、数据中心和科学计算领域,常见的众核架构包括 GPU(图形处理单元)和一些特定用途的处理器,如 NPU(神经网络处理单元)。
标签:缓存,架构,芯片,RISC,指令,处理器,执行,CPU,单元 From: https://blog.csdn.net/wendywm0496/article/details/139196158