来自 重庆 2018-1-16 的文章

指令流水线(Instruction pipeline)

指令流水线(Instruction pipeline)

指令流水线(Instruction pipeline)是为了让CPU能够加速指令的通过速度(单位时间内被运行的指令数量)而设计的技术。一条流水线的每个分步骤被称为流水线级,一条指令的执行通常被分为取指、译码、执行、回写等多个步骤(级)。流水线效率核节\(\mathcal T\)是一个指令每个流水线级所需要的时间,它由所有级持续时间\(\mathcal T_i\)中的最大级持续时间\(\mathcal T_m\)和一个附加时间d的和组成:\[\mathcal T=\max_i(\mathcal T_i)+d=\mathcal T_m+d\]其中附加时间是因为把每个级的结果存到流水线寄存器中去导致的。完成 n个 k级指令总时间为:\[T_k=(k+n-1)\cdot \mathcal T\]一开始流水线是空的,在\(k\cdot \mathcal T\)步中被充满。每级后一个新的指令被调入流水线,而另一个指令完成。因此剩下的指令在\((n-1)\cdot \mathcal T\)步后完成。这里用不使用流水线的指令运行时间除以使用流水线的指令运行时间获得的商代表流水线带来的加速:\[S_k=\frac{T_1}{T_k}=\frac{n\cdot k\cdot \mathcal T}{(k+n-1)\cdot \mathcal T}=\frac{n\cdot k}{(k+n-1)}\]假如在流水线中总是有足够的指令等待执行的话,即在 n 趋向无穷大时:\[\lim_{n\to_\infty}S_k=\lim_{n\to_\infty}\frac{n\cdot k}{(k+n-1)}=k\]也就是说随着级数 k 的提高,加速可以无限地提高。但是一个指令无法被分成无限多个级。此外级数的提高也会导致数据和指令冲突的严重性提高,硬件的复杂性也随之提高。管线危障(pipeline hazards)假如,一个指令在执行的时候,需要等待流水线上前一个指令先执行完毕的话,那么这两个指令相互之间彼此有依赖关系。这可能导致流水线冲突的现象发生。以下三种冲突情况可能出现:资源冲突:流水线上的一个指令需要使用已经被另一个指令占据的资源 标签 指令 流水线 指令流水线 速度 级数