流水线数据相关与冒险(冲突)
在组成原理中,流水线相关包含数据相关,结构相关,控制相关,这里的相关在体系结构中应该称作为冲突(或冒险),实际上相关和冲突在含义上有一些不同
在体系结构中有 3 种不同类型的相关:数据相关(也叫真数据相关)、名相关和控制相关
数据相关
若:
- 指令 i 生成的结果可能会被指令 j 用到
- 指令 j 数据相关于指令 k,指令 k 相关于指令 i
那么指令 j 数据相关于指令 i
要说明的是,数据相关可能会导致数据冒险
名相关(名称相关)
当两条指令使用相同的寄存器或存储器位置(称为名称),但与该名称相关的指令之间没有数据流动时,就会发生名相关
- 当指令 j 对指令 i 读取的寄存器或存储器位置执行写操作时,会发生反相关
- 当指令 i 和指令 j 对同一个寄存器或存储器位置执行写操作时,会发生输出相关
由于没有在指令之间传递值,所以反相关和输出相关都是名称相关,与真数据相关相对。因为名称相关不是真正的相关,因此如果改变这些指令中使用的名称,使这些指令不再冲突,这些指令便可以同时执行,或者重新排序。
控制相关
控制相关决定了指令 i 相对于分支指令的顺序,使指令 i 按正确程序顺序执行,而且只会在应当执行时执行。
一般是分支跳转指令会产生控制相关
数据冒险(数据冲突)
- 写后读(RAW),与真数据相关对应
- 写后写(WAW),与输出相关对应
- 读后写(WAR),源于反相关,或名称相关
- 读后读(RAR),不是冒险
参考文献:《计算机体系结构:量化研究方法》第五版