相较于允许运算指令直接访问内存的指令系统,Load/Store型指令系统的核心优点在于:指令格式更规整、控制器设计更简单,从而极大地有利于实现指令流水线,提升处理器吞吐率。
一、Load/Store架构的优点详解
为了完成一个“内存变量A + 内存变量B -> 内存变量C”的操作,两种架构的指令序列对比如下:
寄存器-存储器型 (R-M, CISC) | Load/Store型 (R-R, RISC) |
---|---|
MOV R1, A ; 将内存A加载到R1 |
LOAD R1, A ; 将内存A加载到R1 |
ADD R1, B ; R1 <- R1 + [B] |
LOAD R2, B ; 将内存B加载到R2 |
MOV C, R1 ; 将R1结果存回内存C |
ADD R3, R1, R2 ; R3 <- R1 + R2 |
STORE C, R3 ; 将R3结果存回内存C |
表面上看,Load/Store型指令数量更多,似乎更繁琐,但其优势体现在以下几个方面:
1. 指令格式规整,多为定长指令
-
R-M架构:
ADD R1, B
这类指令,既要指定寄存器R1
,又要指定内存地址B
。内存地址的寻址方式多种多样(直接寻址、间接寻址等),导致指令长度可变,格式复杂。 -
L/S架构:算术指令如
ADD R3, R1, R2
,操作数都在寄存器中,只需用固定的位数(如5位)指明寄存器号即可。这使得大部分指令可以设计成长度固定的格式。
2. 简化指令解码与控制器设计
-
定长指令意味着CPU的指令解码器(ID)无需判断当前指令到底有多长,可以直接按固定长度取指、解码,大大简化了控制逻辑。
-
指令类型单一(运算类、访存类、转移类分明),功能正交,使得控制器可以用更简单、更高速的硬布线逻辑来实现,而非CISC中常用的、速度较慢的微程序控制器。
3. 极大地有利于指令流水线执行
这是Load/Store架构最核心、最重要的优势。一个典型的五段流水线(IF取指, ID解码, EX执行, MEM访存, WB写回)可以清晰地展示这一点。
-
R-M架构的流水线困境:
ADD R1, B这条指令,在EX(执行)阶段需要计算地址和执行加法,紧接着又需要在MEM(访存)阶段从内存读取操作数B。这导致单个指令需要跨越多个流水段的核心功能区,或者说访存操作被嵌入到了运算指令中。这会造成严重的结构冒险(EX和MEM阶段争用内存地址总线)或数据冒险,并使得流水线各段执行时间极不均衡,大大增加了流水线设计的复杂性,充满了“气泡”(stall)。
-
L/S架构的流水线优势:
其设计将运算和访存彻底分离,完美契合流水线的分段思想:
-
ADD R3, R1, R2
:这类指令只在EX阶段对寄存器内容进行运算,速度极快。它根本不涉及MEM阶段,可以直接“飘过”。 -
LOAD R1, A
/STORE C, R3
:这类指令的核心工作在MEM阶段完成,而EX阶段可能只做简单的地址计算。 -
结果:每条指令各司其职,在自己对应的流水段完成核心工作。流水线可以顺畅地流动,极少发生停顿,大大提高了指令的吞吐率(单位时间完成的指令数),实现了CPI≈1的目标。
-