Ch13 精简指令集计算机 RISC¶
RISC 的主要特性¶
-
大量通用寄存器,使用编译器优化寄存器用法。
-
有限、简单的指令集。
-
强调优化指令流水线。
现代精简指令集的特点¶
-
每个机器周期一条指令。
-
寄存器-寄存器操作。
-
简单的寻址模式和指令格式。
CISC¶
-
朝向 CISC 的原因:
-
出现了功能强大的复杂高级程序设计语言(HLL)
-
导致程序设计语言与汇编语言之间的语义间隙增大
-
出现了更复杂的机器指令、寻址方式,硬件实现的 HLL 语句
-
-
CISC 的目标:
-
提高执行效率
-
简化编译
-
用复杂的机器指令执行复杂的 HLL 语句
-
对 HLL 操作的研究¶

-
HLL 操作动态频度:过程调用在机器指令加权和存储器加权下占比很高,尤其存储器加权场景。
-
操作数:局部标量变量占多数,数组/结构次之。
-
过程调用:
-
非常耗时的原因:
-
过程传递的参量和变量数、过程嵌套深度
-
大部分过程调用的传送的参变量、使用的局部标量变量不多
-
很少出现长的一系列调用跟着一系列返回
-
-
-
结论:
-
过程调用是 HLL 中最耗时的操作,应该优化
-
优化方法:优化寄存器的使用(从而减少访存);优化流水线(减少分支影响);
-
优化方法¶
大寄存器组(硬件方案)¶
-
依据/适用情况:参数、局部变量少,调用深度有限
-
寄存器(几百个)分为很多个组,每个过程对应一组寄存器
-
发生过程调用时,直接切换到另一个寄存器组(将过程调用优化为寄存器访问)
-
对程序,任何时刻只有一组寄存器可见
-
解决参数和返回值传递:

-
解决全局变量:用一组全局寄存器,所有过程可见
-
解决深度过深:将一部分寄存器存储在内存中
-
进一步优化:环形寄存器组织

寄存器优化(软件方案)¶
-
编译器的优化
-
编译器为每个变量指派一个虚拟寄存器
-
并通过某种方法将虚拟寄存器映射到真实寄存器
-
生命周期不重叠的虚拟寄存器可以共享同一个真实寄存器
-
实在安排不下,就考虑内存
-
-
实现方法:图着色法
-
画点,每个点代表一个虚拟寄存器
-
连线,在两个生命周期有重叠的虚拟寄存器之间连线
-
着色,若有 n 个真实寄存器,则尽量用 n 种颜色给图上色,要求相邻(有连线)的节点颜色不能相同;无法上色的节点就存在内存里。

-
RISC 流水线¶
流水线的效果¶

流水线优化¶
-
空指令(NOOP):在流水线阶段插入空操作,解决数据相关性,保证指令顺序执行。
-
延迟转移:交换分支指令与前序指令位置,使分支延迟期间执行有效指令,适用于无条件分支。
-
循环展开

