文章目录
理想情况下,每个时钟周期都有一条指令流入流水线,并且指令装入完成后,每个时钟周期都有一条执行完成的指令从流水线中流出。实际情况下,指令之间可能存在依赖关系,导致指令流中的指令不能在期望的时钟周期进入流水线执行。
1. 指令相关
相关(Dependence)指的是指令之间存在的依赖关系。当两条指令之间存在相关关系时,它们就不能在流水线中重叠执行,或只能部分重叠执行。
指令之间的相关关系包括:名相关(可理解成:结构相关)、数据相关、和控制相关三种。
1.1 名相关(可理解成:结构相关)
名相关指的是存在多条指令同时使用了同一个寄存器或存储单元,但这些指令之间不存在数据相关。
名相关包括反相关和输出相关两种。
- 反相关指的是指令Ik+1的目标寄存器与指令流中的上一条指令Ik的源寄存器相同;
- 输出相关则指的是指令Ik+1和指令Ik的目标寄存器相同。
名相关可通过寄存器重命名(Register Renaming)解决。寄存器重命名既可以使用编译器或汇编器静态实现,也可以使用硬件动态实现。