超标量处理机每个时钟周期可以平均执行完成多条指令,因此,它的指令级并行度ILP一般都大于1。如果一台超标量处理机每个时钟周期发射m条指令,则它的指令级并行度ILP的期望值就为m。但是,由于数据相关、条件转移和资源冲突等原因,实际的ILP不可能达到m,只会小于m。通常有:1<ILP<m。
在超标量处理机中,不仅需要设置多套取指令部件和指令译码部件,而且要判断指令之间有无功能部件冲突,有无数据相关和由于条件转移引起的控制相关等。另外,还要通过一套交叉开关把几个指令译码器的输出送到多个操作部件中去执行,因此,超标量处理机的控制逻辑比较复杂。
当出现数据相关、控制相关或功能部件冲突时,本次没有能够发射出去的指令,必须保存下来,以便在下一个时钟周期再发射。为了提高功能部件的利用率,通常要设置一个先行指令窗口,在这个先行指令窗口中保存由于功能部件冲突、数据相关或控制相关等原因暂时还不能送到操作部件中去执行的指令。一个有先行指令窗口的超标量处理机的典型结构如图8.35所示。
有了先行指令窗口,就可以从指令Cache中读入更多的指令,可以通过硬件判断哪些指令可以先发射到操作部件中去执行。通过先行指令窗口可以把没有功能部件冲突、没有数据相关和控制相关的指令超越它前面的指令先发射到操作部件中去,从而提高功能部件的利用率。如果再加上编译器的支持,根据先行指令窗口的大小,把没有数据相关、控制相关和功能部件冲突,或者相关和冲突比较少的指令调度到同一个先行指令窗口中,这样,就能够进一步提高超标量处理机的性能。
注释:
先行指令窗口的大小对超标量处理机的性能影响很大。窗口太小,调度的效果不好,窗口太大,调度所需要的硬件太复杂。目前,多数超标量处理机的指令窗口大小为2至8条指令。
在超标量处理机中,有多条指令流水线在同时工作,设置有多个能够独立工作的操作部件,因此,必须解决多流水线的调度问题和操作部件的资源冲突问题。
图8.35 有先行指令窗口的多发射流水线处理机结构