提升程序执行效率的策略与方法
1. 静态与动态流水线
在程序执行过程中,CPU 的流水线架构对执行效率有着重要影响。传统的 CPU 架构将定点和浮点指令放入单一流水线中,未考虑并行性以减少整体程序执行时间。实际上,程序指令可以分离并引导到多个流水线中,每个流水线专门处理特定类型的指令,从而实现程序不同部分的同时执行。
以一个包含定点指令的程序为例:
LOAD R0, R1, 100
LOAD R0, R2, 110
ADD R1, R2, R3
ADDI R1, R4, 100
STORE R3, R0, 120
STORE R4, R0, 130
LOAD R0, R5, 140
LOAD R0, R6, 150
SUBI R5, R8, 200
STORE R7, R0, 160
STORE R8, R0, 170
SUB R5, R6, R7
在程序执行期间,指令之间可能存在数据依赖关系,从而产生数据冒险。为消除数据冒险,CPU 有两种选择:
- 插入 NOP 指令 :在 ADD
指令和 SUB
指令前分别插入一个 NOP
指令,使这两条指令有时间从相应的 LOAD
指令中正确获取操作数。但这种方法会使 CPU 整体执行时间增加两个时钟周期,并非最优选择。
- 使用转发路径 :如图 6.133 所示,使用两条转发路径。第一条将 R2