以下是来自"英特尔微处理器系列"的故障管道示例。詹姆斯安东纳科斯。
考虑这一系列指令。为此示例制作了分配给每条指令的时钟周期数。
1: MOV AL, 2 ; 1 cycle
2: MOV DL, [SI] ; 3 cycles
3: MUL DL ; 2 cycles
4: INC SI ; 1 cycle
5: SUB BX, 4 ; 1 cycle
6: ADD AX, BX ; 1 cycle
7: MOV CX, 2000 ; 1 cycle
在两个管道之间按顺序安排指令 :(我知道这个的基本概念。)
Clock Cycle Pipeline # 1 Pipeline # 2
1 MOV AL, 5 MOV DL, [SI]
2 idle busy
3 idle busy
4 MUL DL INC SI
5 busy SUB BX, 4
6 ADD AX, BX MOV CX, 2000
在两个管道之间安排无序指令:
Clock Cycle Pipeline # 1 Pipeline # 2
1 MOV AL, 5 MOV DL, [SI]
2 INC SI SUB BX, 4
3 MOV CX, 2000 busy
4 MUL DL idle
5 ADD AX, BX idle
有人可以向我解释无序管道是如何完成的吗?谢谢!
答案 0 :(得分:1)
乱序引擎将简单地接受任何准备好的(不等待任何依赖的那些)操作码(已经分解成多个部分的指令)并安排它们执行。它向前看多远取决于前端获取和解码了多少指令。
在您的乱序示例中,在“MOV DL,[SI]”已准备好SI并经过AGEN(地址生成)加载之后,您将无法执行“INC SI”。然而,“SUB BX,4”没有依赖关系,并且只要HW看到它就准备好执行。