方法一:顺序发射顺序完成 图5.51是采用顺序发射顺序完成的指令调度方法时,上面这个典型程序的指令执行时空图。6条指令按照程序中的指令排列顺序从、、……、分别在流水线1和流水线2中分三个时钟周期发射。
图5.51 顺序发射顺序完成的指令流水线时空图
由于指令与指令之间有写读数据相关,指令在流水线2中要等待一个时钟周期才能从流水线1中通过专用数据通路得到数据。因此,指令在流水线2中译码后要等待一个时钟周期才能进入浮点加法部件中执行,在图中用阴影部分表示。同样,因为指令与指令之间也有写读数据相关,因此,指令也要等待一个时钟周期才能进入乘除法部件中执行。指令在译码完成后也要等待一个时钟周期才能进入浮点加法部件中执行,这是因为在指令和指令都要使用浮点加法器,他们之间有功能部件冲突。 为了维持顺序完成的要求,后发射的指令必须后进入写结果流水段,因此,指令在乘除法部件中执行完成之后要延迟一个时钟周期进入写结果流水段。指令在定点算术逻辑部件中执行完成之后要延迟三个时钟周期进入写结果流水段。由于指令和指令之间有写写数据相关,因此,指令的写结果流水段也要延迟一个时钟周期。 另外,指令与指令之间虽然有读写数据相关,由于两条指令在同一个时钟周期中发射,这种数据相关自然得到满足。 从图5.51中可以看到,采用顺序发射顺序完成的调度方法,6条指令共用了10个时钟周期才完成。其中,除了流水线的装入和排空部分之外,还有8个空闲的时钟周期,在图中用阴影部分表示。在这8个空闲的时钟周期中,有5个时钟周期实际上是为了维持顺序完成才插入的。