绘制5阶段管道图时如何绘制数据依赖性等待?我的回答是否正确?
说明
1. ADD X, Y, Y
2. ADD Z, Y, X
3. SUB V, X, W
4. ADD Z, Z, V
这是管道图
我的管道图是否正确?
答案 0 :(得分:0)
我假设指令格式为op <dest>, <src1>, <src2>
我们可以明确跟踪依赖
1. ADD X, Y, Y Depends on: Y Produces: X
2. ADD Z, Y, X Depends on: Y, X Produces: Z
3. SUB V, X, W Depends on: X, W Produces: V
4. ADD Z, Z, V Depends on: Z, V Produces: Z
知道没有操作数转发,并且指令 i 只能在 j <之后读取指令 j 的结果/ em>完成 WR 阶段。
ADD X, Y, Y
取决于 Y ,但没有指令产生它,它已经准备好了。因此,它可以在获取和解码后立即开始执行
所以它从第1周期开始,到第5周结束
ADD Z, Y, X
,这发生在第2周期。然后在解码单元释放后立即解码,在第3周期。
它不能在第4周期之后立即执行,因为它取决于 Y 和 X ,后者由指令1产生,因此仅在第6周时可用。 />
注意这里停止的阶段不是 IF 而是 ID 。正是这个阶段无法在下一个阶段移动数据。想象一下,每个舞台之间都有一个锁扣
IF 可以在下一个周期开始获取新指令,但它无法完成(即必须停止),直到 ID 被允许写入其输出(否则输入< em> ID 会改变,输出也会改变。
SUB V, X, W
可以在周期3获取,因为指令2的获取在周期3结束,因此获取单元是空闲的。
但是,获取单元无法将结果写入其自身与解码单元之间的锁存器中,因为解码单元已停止并且必须保持其当前输入值(或解码将改变)。
因此,取出也必须停止,直到解码单元在周期6写入其输出锁存器
因此,解码可以在周期6开始
该指令取决于 X 和 W ,前者在第6周期可用,后者在第1周期可用;因此 EX 可以在 ID 之后开始,即在第7周。
ADD Z, Z, V
可以在周期6开始取出。
执行只能在第10周期开始,因为该指令取决于指令3在周期10产生的 V 。
对 Z 的依赖性不是问题,因为此数据在第9周可用。