流水线指令重排序,指令级并行

假设有如下两条语句:

a = b + c;
d = e * f;

会被转换成多条汇编指令,例如以下汇编指令实现了计算两个数相加、两个数相乘的功能:

ld r5,B(r0)
ld r4,A(r0)
dadd r3,r4,r5
sd r3,C(r0)
ld r6,D(r0)
ld r7,E(r0)
dmul r2,r6,r7
sd r2,F(r0)
halt

这些指令依次取出对应寄存器的数据,然后进行相应的运算,再将结果写入存放结果的寄存器,指令此时是有顺序的,其顺序也符合我们在写高级程序语言时的语句顺序。

现在使用 WINMIPS64 模拟CPU执行,流水图如下:

在这里插入图片描述

分析结果:

在这里插入图片描述

可以看到总共需要17个时钟周期,但仔细观察流水图,会发现其效率并不高,有的指令因为资源相关或数据相关而停顿,导致CPU空闲,利用率降低。

  • 资源相关:当有多条指令进入流水线后在同一时钟周期内争用同一功能部件所发生的冲突
  • 数据相关:当一条指令需要用到前面指令的执行结果,而前面的指令均在流水线中重叠执行,还未产生相应的结果。

通过对指令顺序的调整,可以解决部分冲突,提高利用率

下面对这些指令进行重排序:
在这里插入图片描述
在这里插入图片描述

通过指令重排序减少了3个时钟周期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值