为了帮助大家更好地理解,我们介绍一下标量与超标量、顺序指令执行与乱序指令执行的区别。
标量(scalar)处理器每次只执行一条指令,而超标量(superscalar)处理器每个周期可以同步执行多条指令,其原理是通过在微处理器上增加额外的资源,创建多条管道(pipeline),每条管道执行自己的指令集,以此来实现并行化。不过,这样一来也增加了处理器的复杂性,因为一条管道上的操作可能要依赖于另一条管道上的数据,因此在设计时需要仔细考虑,在一个长管道环境中,指令如何排序才能成功操作。在z196中,每个时钟周期最多可以有3条指令被解码,最多有5条指令/运算可以被执行。
上图左边显示的是in-order core execution(顺序执行模式),由于L1缓存数据丢失,导致指令2执行起来存在较大的延迟,下一个指令也得等到指令2结束才能进行。而如果使用out-of-order core execution(乱序执行模式),如图右边显示,如果指令4和指令2之间不存在相互依赖的关系,在指令2等待数据的同时,指令4已经开始了存储访问和执行过程。可见,这种乱序指令执行的方式效率明显更高。