内容导航
流水线操作
Intel 每发布一款新的处理器,我们似乎都可以看到这样一种现象:在频率提升的同时,管线的长度也伴随增长。过长的管线,使得3GHz Pentium 4 的性能仅堪与2GHz 的Athlon 64 匹敌。Prescott 较之Northwood,管线的长度增加了55%,那么它的性能会例外地会增长吗?还是戏码如常?
虽然关于管线或许你已经听了无数次,但仍要旧事重提,因为我相信没有多少人能够深入地了解它的工作原理究竟是怎么样的,与CPU的最终关系究竟是如何的呢?CPU的流水线操作(pipelining)就像汽车的装配车间那样。CPU 的管线(pipeline) 并非数据经过的通道,而是收集“将要做什么事情”的执行指令。每个指令都必须经过相同的步骤,而我们把这些步骤称为层。
管线层担当的任务有,比如找出下一步将要执行的指令,找出那两个数字将要进行加法运算,找出结果应该被储存在那里,执行加法运算,等等...。
CPU 管线基本上可以被划分为5层(stages):
取得指令
解码指令
取得操作数
执行
储存到Cache
你可能会注意到这5层的描述是非常概要的,不过你可以使用更详细的层来构成更长的管线:
取得指令 1
取得指令 2
解码 1
解码 2
取得操作数
分派
进度表
执行
储存到Cache 1
储存到Cache 2
两个管线都必须完成相同的任务:进来指令,出去结果。两者之间的区别是,第一个管线5个层中的每一个比第二个管线中的每个层要完成更多的工作。
如果在其它所有条件都相同的情况下,你会更希望是第一种情况的5层管线,因为用数据填充5层会比填充10层更加容易。如果你的管线并非经常充满数据,那么你将会损失宝贵的执行能力 - 这意味着你的CPU 没有能够高效地运行。
如果你希望是第二种管线,理由只有一个,那就是每层会更加简单,那么与少层的管线相比,它每层任务的执行速度会更加快。注意,最慢(最复杂)的层,决定了你从每个层获取数据的速度。
现在让我们假设,如果每个层执行一次循环的话,第一个管线在每个层需要花费1ns 的时间,那么我们使用这些管线可以制造主频为1GHz 的处理器(1/1ns = 1GHz ) 。对于第二个管线的情况来看,为了补偿更多层的现实,并与第一层相比,提供同等/更优秀的性能,它必须有更短的时钟周期。幸亏的是,既然我们每个时钟做更少的工作 - 那么也能够显著地限制时钟周期的时间。假设我们的设计和制造工艺非常优秀,那么第二个管线设计的时钟周期可以低到0.5ns 。
那么使用第二种管线设计的处理器时钟频率可以达到2GHz,是第一种设计的两倍,假设我们能够一直保持管线的填充饱和率 -- 我们因此获得了两倍的性能。事实是,由于这样的设计会带来一些负面的效果,比如我们不能够保证管线在所有的时间下都获得填充饱和度 - 就会出现突然2GHz CPU 的性能竟然比不上1GHz CPU。
怎样,复杂吗?能够理解吗?现在让我们谈些相关的话题吧。