流水线编排加速实例
接下来通过几个实例介绍一下流水线编排的应用效果。
消除流水线的数据依赖
ADD x1,x2,x3
SUB x4,x1,x5
上述代码中,SUB指令的计算依赖ADD指令中x1寄存器的结果,因此在SUB指令之前插入气泡(空指令)等待SUB指令将计算的结果写入寄存器文件,在增加-mtune=tsv110之后,编译器会增加两条无关指令以消除数据冒险:
ADD x1,x2,x3
其他指令1
其他指令2
SUB x4,x1,x5
消除流水线的结构依赖
ADD x1,x2,x3 SUB x4,x5,x6 LDR x6, [ x7, #12 ] SDR x6, [ x7, #12 ]
上述代码中,ADD与SUB指令需要同时使用ALU资源,LDR与STR需要同时使用MEM资源。当硬件不足以支持多条指令在同一时刻执行时,会发生结构冒险,在增加-mtune=tsv110之后,编译器会增加两条无关指令以消除结构依赖:
ADD x1,x2,x3 其他指令1 SUB x4,x5,x6 其他指令2 LDR x6, [ x7, #12 ] 其他指令3 SDR x6, [ x7, #12 ]
父主题: 流水线