cpu 流水线,(续)关于CPU的流水线

(续)关于CPU的流水线 - 电脑诊所 - 电脑教程网

(续)关于CPU的流水线

日期:2007-10-10   荐:
  首先,我们来看看CPU是怎样处理一个指令的,比如一个“A+B”的指令,CPU要执行这条指令,先得知道A和B在什么地方,要对这些数值进行什么样的操作,然后编译成机器语言,接着执行命令,最后把这些储存起来。 现在,我们简单地模拟处理器完成一条指令要做的工作。要处理一条指令,处理器必须: 1,提取数据; 2,编译成机器语言; 3,执行指令; 4,储存数据; OK,接着我们来看看流水线,为什么要流水线呢?我们先来看看没有流水线的CPU。 无流水线处理器 ┌────────────────────────────────┐ │    提取                   译码                      执行                         存储            │ └────────────────────────────────┘ ├──────────── 1 个时钟周期 -────────────┤ ├──────────── △T = 1秒  -────────────┤ 我们可以看出CPU只有一个阶段,指令被逐步提取,编译,执行,存储。这就是说,我们上面的这个CPU能在一个时钟周期内做所有的事情(提取、编译、执行、存储)。我们设这个CPU的工作频率是1Hz,也就是每秒钟执行1条指令。当然如果有10秒钟,那就是:10 秒 X (1 时钟周期/1 秒) X (1 指令/1 时钟周期) = 10 指令。 现在,我们开始探讨流水线。流水线能够提升时钟频率和整体性能(记住,更快的时钟频率并不能直接转化成更快的性能)。 但是如何提高时钟频率呢?一个是用物理方法提高CPU完成指令的速度。另一个就是… 我们先来看看下面两张图。 两段流水线CPU ┌───────────────┬───────────────┐ │ 提取 译码                                    │ 执行 存储                                 │ └───────────────┴───────────────┘ ├─── 1 个时钟周期 ────┤ ├──────────── △T = 1秒  ────────────┤ 四-段流水线CPU ┌───────┬────────┬────────┬────────┐ │ 提取                 │  译码                   │  执行                   │  存储                │          └───────┴────────┴────────┴────────┘ ├ 1个时钟周期 ┤ ├──────────── △T = 1秒  -──────────────┤ 细心的朋友很快就发现了,既然不能在同一个周期内做很多事情,那就分几个周期来做嘛!而每个周期的时间可以由触发信号来决定的(晶振体),这个我们可以很容易的提高,而在0.25秒内完成一个步骤,也没有达到物理的极限。 这个四-段流水线CPU现在就是工作在4Hz的频率下了,可是速度提高了吗?我们来看看: 10 秒 X (4 时钟周期/1 秒) X (0.25 指令/1 时钟周期) = 10 指令 这个和那个1Hz无流水线的CPU一样10秒钟只能执行10条指令。但我们可以在包装盒上写上“4 Hz”而不是“1 Hz”。很不幸,数字是一个卖点。给一个电脑盲出示一个 4 Hz 的处理器和一个 1 Hz 的处理器,他将认为 4 Hz 的那一个更快,即使事实并非如此。 可是既然不能提高速度,我们又费那么大的劲干什么呢?嘿嘿,重点来了… 我们先来了解下流水线的工作方式,首先接受一条指令,做‘提取’这个步骤,做完后把他交给‘译码’来做,接着下个周期就继续提取下条指令,这时候CPU就是同时在做第一条指令的‘译码’和第二条指令的‘提取’,到了第三个周期,CPU就是同时在做第一条指令的‘执行’,第二条指令的‘译码’以及第三条指令的‘提取’…以此类推… 现在有没有发现上面那个公式有点问题?当经过1秒钟以后,也就是4个周期以后,CPU就会每个周期完成一个指令,就是就0.25秒完成一个。哈哈哈,也就是说,10秒以后CPU完成了37条指令,要比10条指令多得多。
[1] [2]  

可是在另一方面,完成一条指令所需的时间都是1秒。 好了,解释完流水线,我们再来看看在实际的运用中的情况。 先说说游戏,游戏中的指令一般都是即时的,这时候就是需要的就是这个所完成的时间,而对于每秒完成几个指令的要求是不是那么高了。需要的就是SPEED… 而在多媒体运用中,数据是一帧一帧地读取的,这时候就需要有高频率,对于完成这个指令要多少时间就不是那么讲究了,只要够流畅就好了… 而在多任务方面,多任务就是同时有好几个指令等着执行,无流水线的那个CPU就必须要有1秒,一条指令才能到流水线中处理,而4段流水线的那个CPU就只需要0.25秒。 现在又有了另一个问题了,A64的流水线并没有增加,可是一样在多媒体和多任务方面也有很好的表现,这是为什么呢? 我认为有几个方面: 1,               A64把内存控制器集成到CPU中去,使得‘提取’的延迟减少了。CPU要提取一个数据,就要先到内存中找,在送回到CPU,这中间通常都要好几个周期的时间,这时的CPU就是处于闲置状态,而如果减少了这其中的延迟,也就是减少了CPU闲置的时间,提高的速度。 2,               A64提高了分支预测算法…等(其他的一些算法以及指令我并没有具体的资料,在这也不好做说明)的效率。 我们来了解下分支预测,我们在做‘执行’这个步骤时就需要有‘提取’和‘译码’这两个步骤的结果,这时如果预测下下前两步的结果,用这个结果做‘执行’,就能提高效率,但如果算错了,就得重新来了,降低了效率。这时就需要很好的算法。 有了这两方面的支持(应该还会有其他方面的原因),使得A64的CPU的性能才有今日的成就。

(出处:http://www.sheup.com)


 [1] [2] 

标签: