查看“︁流水线 (计算机)”︁的源代码
←
流水线 (计算机)
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{noteTA |G1=IT |T=zh-cn:流水线;zh-tw:管線; |1=zh-cn:流水线;zh-tw;管線; |2=zh-cn:计算机;zh-tw;電腦; }} {{unreferenced|time=2010-02-09T19:44:22+00:00}} {{Redirect to|管线|一种利用管道运输气体和液体的运输方式|管道運輸}} '''-{zh-cn:流水线;zh-tw:管線;}-'''(pipeline),亦称'''-{zh-cn:管线;zh-tw:流水線;}-''',是现代计算机[[处理器 (计算)|处理器]]中必不可少的部分,是指将计算机[[指令]]处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。其具体执行过程类似工厂中的流水线,并因此得名。 如果作出类比,则计算机指令就是流水线传送带上的产品,各个硬件处理单元就是流水线旁的工人。 在使用流水线的处理器中一个指令不是在处理器的一个[[定時器訊號]]中完成的,而是被分到多个讯号中去完成,但是与此同时多个指令的分任务被同时处理。由于这些分任务比整个指令要简单,因此可以通过使用流水线提高定時器频率。虽然每个指令需要多个讯号后才能完成,但是通过多个指令的并行运算每个讯号内一个指令可以完成,因此通过这个方法整个速度可以提高。 一条流水线的每个分步骤被称为流水线级。它们被流水线寄存器分开。除指令流水线外在现代系统中还有其它流水线,比如用来计算[[浮点数]]的算术流水线。 ==计时器信号== 一个级越简单,处理它的[[頻率 (物理學)|频率]]就可以越高。在现代的[[中央处理器]]中一个指令流水线可以长于30级(参见{{lang|en|[[NetBurst]]}})。核节是一个指令每个流水线级所需要的时间。在一个{{lang|en|k}}级流水线中每个指令由{{lang|en|k}}个级组成,每个级需要{{lang|en|k}}个信号数来完成。由于在每个信号里一个新指令开始执行,因此在理想状态下在每个信号中也应该有一个指令完成,离开流水线。 每个节由流水线的周期决定,它由所有级持续时间<math>\tau_i</math>中的最大级持续时间<math>\tau_m</math>和一个附加时间<math>d</math>的和组成。这个其中附加时间是因为把每个级的结果存到流水线寄存器中去导致的。 <math>\tau = \underset{i}{\max} (\tau_i) + d = \tau_m + d</math> ==效率提高== 通过流水线指令完成的总速度提高。设周期时间为<math>\tau</math>,完成<math>n</math>个<math>k</math>级指令总时间为: 总时间为<math>T_k = (k+n-1) \cdot \tau</math> 一开始流水线是空的,在<math>k \cdot \tau</math>步中被充满。每级后一个新的指令被调入流水线,而另一个指令完成。因此剩下的指令在<math>(n-1) \cdot \tau</math>步后完成。 将使用没有流水线的指令运行时间除以流水线的指令运行时间获得的商代表着流水线带来的加速: <math>S_k = \frac{T_1}{T_k} = \frac{n \cdot k \cdot \tau}{(k+n-1) \tau} = \frac{n \cdot k}{k+n-1}</math> 假如在流水线中总是有足够的指令等待执行的话,则在<math>n</math>趋向无穷大时: <math>\lim_{n \to \infty}S_k = \frac{n \cdot k}{k+n-1} = k</math> 也就是说随着级数<math>k</math>的提高加速可以无限地提高。但是一个指令无法被分成无限多个级。此外级数的提高也会导致数据和指令冲突的严重性提高,硬件的复杂性也随之提高。 ==管線危障== 管線危障(pipeline hazards)是當一个指令在执行时,需要等待流水线上前一个指令先执行完毕的话,那么这两个指令相互之间彼此有[[数据依赖|依赖关系]]。这可能导致[[流水線冲突]]的現象發生。以下三种冲突情况可能出现: *资源冲突:流水线上的一个指令需要使用已经被另一个指令占据的资源 *数据冲突 **指令层的数据冲突:指令需要的数据还没有计算出来 **传输层的数据冲突:指令需要的暫存器(register)内容还没有被存入暫存器 *控制流冲突:流水线必须等待一个有条件{{lang|en|[[Goto]]}}指令是否会被执行。 这些冲突导致相對应的指令,必须在流水线的开始處等候,这会在流水线上导致空缺。这样的话流水线就不能順利运行,處理速度便開始下降。因此要尽量避免这样的冲突: 通过增加功能单位可以解决资源冲突。通过把流水线后面的计算结果立刻向前传可以避免许多数据冲突。 通过[[分支预测器]]可以避免控制冲突。在这里处理器预测性地继续运算,直到正式预测是正确为止。假如预测错误的话那么在其中已经执行的指令要被推翻。尤其流水线非常长的处理器(比如英特尔的[[奔腾4]]或者{{lang|en|IBM}}的{{lang|en|[[PowerPC]]}})在这种情况下要浪费许多时间。因此这些处理器拥有非常高级的分支预测技术,只有百分之一的分支预测会发生错误,其流水线需要清除。 ==优缺点== 长流水线的优点在于它能够大大地提高处理器速度。缺点在于许多指令被同时执行。假如分支预测错误的话整个流水线上所有的指令全部要被取消,流水线要被重新充满。这需要从[[内存|記憶體]]或者[[中央处理器缓存|中央處理器快取]]中调用指令,导致延迟时间,在这段时间里处理器没有工作。[[NetBurst]]架構管線一開始有20級、而後增加至31級,放大其缺點;其後繼者[[Intel Core微處理器架構]]就減少管線級數。 [[Category:微處理器]] [[el:Σωλήνωση (υπολογιστής)]] [[fr:Pipeline (informatique)]] [[gl:Segmentación]] [[sv:Pipeline (datorhårdvara)]]
该页面使用的模板:
Template:Lang
(
查看源代码
)
Template:NoteTA
(
查看源代码
)
Template:Redirect to
(
查看源代码
)
Template:Unreferenced
(
查看源代码
)
返回
流水线 (计算机)
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息