无序的紫外线管道

时间:2014-09-02 16:51:11

标签: assembly x86 intel pipeline microprocessors

以下是来自"英特尔微处理器系列"的故障管道示例。詹姆斯安东纳科斯。

考虑这一系列指令。为此示例制作了分配给每条指令的时钟周期数。

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

有人可以向我解释无序管道是如何完成的吗?谢谢!

1 个答案:

答案 0 :(得分:1)

乱序引擎将简单地接受任何准备好的(不等待任何依赖的那些)操作码(已经分解成多个部分的指令)并安排它们执行。它向前看多远取决于前端获取和解码了多少指令。

在您的乱序示例中,在“MOV DL,[SI]”已准备好SI并经过AGEN(地址生成)加载之后,您将无法执行“INC SI”。然而,“SUB BX,4”没有依赖关系,并且只要HW看到它就准备好执行。