指令级并行
相关:
1. 数据相关:指令i、j。i写寄存器,j用到i产生的值。
2. 名字相关:指令i和j之间没有数据依赖,但是用到相同的寄存器。
反相关:i -> j,指令i读reg,j写reg。
输出相关:i -> j,指令i和j都写reg。
由于没有数据依赖,通过寄存器重命名,可以消除名字相关。
相关性会导致数据冲突。为了指令的正确执行,CPU在调度指令时,要避免数据冲突。
数据冲突:
数据相关 导致read after write冲突
输出相关 导致write after write冲突
反相关 导致write after read冲突
3. 控制相关
编译技术:
循环展开
软件流水
全局指令调度
断言执行(变控制依赖为数据依赖)