计算机系统结构(第二版)流水线和MIPS流水线关于分支指令的研读

       今天在复习计算机系统结构,碰到了很多以往没太注意的知识点,书中只是把这些知识点给串讲了一遍,没有指出多者之间的联系,区别,读起来颇有些理不清头绪,今天我来记录一下自己学习流水线的关于分支指令的知识点解读。

     《计算机系统结构》在将流水线时用了两个例子,一个是经典的5段流水线,一个是在讲流水线实现时提到的MIPS的一种简单实现。

       前者分为五段:IF,ID,EX,MEM,WB

       后者也分为五段:IF,ID,EX,MEM,WB

       关于PC的问题,前者的意思是每次IF时按PC的值来取指令,然后PC自动+4,这时每一次IF用的其实都是上一条指令写入PC的值 。对于分支指令,在MEM段完成对PC的写操作。因此在某一条分支指令执行完MEM段后的紧接着的一条指令在根据PC来取指令时其实该PC已经两次写操作(分支指令在MEM段写了一次,上一条指令IF时写了一次,最后以分支指令写入的为准),这时候分支延迟的控制可以看出当分支指令的MEM段完成后,才重新取出下一条指令。

       而MIPS的例子关于IF段有以下操作:

               IF/ID.IR ← Mem[PC];

               IF/ID.NPC,PC ← ( if(EX/Mem.IR[op] == branch) & EX/MEM.cond ){ EX/MEM.ALUo}else {PC+4};

              

       我们可以看见在IF段,MIPS的例子中,计算机做了两件事,第一件事就是取指令,第二件事就是判断PC的值该怎么加在对PC的操作上我们可以看到和经典的五段流水线的PC值无论怎样都+4是有区别的。在MIPS的例子中,分支指令的是否分支,以及分之目标计算结果要在EX段完成后才会得到。这时候我们可能会条件反射有点误读,认为在分支指令EXE段结束后就可以正确的取指令了,和经典的五段流水线不一样?

       的确,在这种情况下,分支指令的EX段得出了PC的正确值,但是还并没有写入PC,结果保留在EX/MEM寄存器里。在分支指令EX段之后的指令(称为A)的IF仍然按照A之前的那条指令在IF段对PC进行修改的值来取指令,然后才是A指令对PC的修改,这个修改就按照分支指令的EX段结果来定。于是乎,在A指令之后的那条指令才真正取出了分支指令的目标指令,这时候从宏观上看,在分支指令MEM段结束后的那条指令取出的是正确的目标指令,在宏观上和第一个例子一模一样。

       所以,MIPS的例子,拐了两个弯,结果和那个经典的没指名道姓的流水线例子(就是MIPS)一致。

       至于对分支指令所造成的延迟的优化问题,我们可以看到,当我们不优化时,在分支指令的MEM段后我们才能取到正确的目标指令,在此之前的ID,IF,MEM段,我们都没有任何流水,延迟了三个时钟周期,假设分支指令占比30%,理想的CPI为1的话,流水线的CPI实际上为1+30%*3 = 1.9。

      如果要优化的话,在经典的流水线的介绍中,书中写的是若把分支指令的执行提到ID段则只需要两个周期,意思就是如果优化了,那么在分支指令的ID段之后便可取出正确的目标指令,这时候只需要延迟一个时钟周期就行了。

      然而我们看MIPS流水线对分支指令的优化是IF段

                 IF/ID.IR ← Mem[PC];

             

       可见,在IF段就已经完成了对目标指令地址的计算,那是不是在分支指令的IF段之后就可以流水出目标指令呢,当然不是,这个情况和上面的那个情况是一个道理,

       当分支指令IF段后,我们要照例再流水入一条指令,在这条指令的IF段,首先取出这条指令,然后我们检测存储上条指令的IF/ID寄存器的op段指示为分支指令,于是

PC值进行相应变化(分支指令的IF段对PC的修改是pc+4!!)在这条指令之IF段之后我们才能得到才能取到分支指令的目标地址所指向的指令,正好在分支指令执行完ID段,从宏观上看,在分支指令执行完ID段之后的下一条指令就是目标指令,这和那个经典的流水线是完全一致的。

       总结,《计算机系统结构》举的第一个流水线例子(经典的流水线)虽没指名道姓,但实际上就是MIPS流水线,只不过MIPS流水线在某些段的具体实施上有些稍微复杂了,所以在第一个例子中就取了MIPS的宏观结果,对分支指令的操作进行了修改。至于到了MIPS这个具体例子的章节,没有一些额外的说明,如果不加思考就会产生一种前后矛盾的感觉,其实这两个例子并不矛盾。

        以上就是我的一点小小的看法,希望能对大家有所帮助,也是我学习生活的一种记录,初次写博客,有些手生,希望大家多多包涵谢谢

        (原创,未经本人允许,禁止转载)

                





  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值