Can you summarize the following document?
        
  管线化是假设程序执行时有一连串的指令要被执行(垂直座标i是指令集,水平座标表时间t)。绝大多数当代的CPU都是利用时脉驱动。  而CPU是由内部的逻辑闸与正反器组成。当受到时脉触发时,正反器得到新的数值,并且逻辑闸需要一段时间来解析出新的数值,而当受到下一个时脉触发时正反器又得到新的数值,以此类推。而借由逻辑闸分散成很多小区块,再让正反器链接这些小区块组,使逻辑闸输出正确数值的时间延迟得以减少,这样一来就可以减少指令执行所需要的周期。  举例来说,典型的RISC管线被分解成五个阶段,每个阶段之间使用正反器链接。

  并非在所有情况下管线技术都起作用。可能有一些缺点。如果一条指令管线能够在每一个时脉周期接纳一条新的指令,被称为完整管线化(fully pipelined)。因管线中的指令需要延迟处理而要等待数个时脉周期,被称为非完整管线化。  当一名程序员(或者组合者/编译者)编写组合代码(或者汇编码)时,他们会假定每个指令是循序执行的。而这个假设会使管线化无效。当此现象发生后程序会表现的不正常,而此现象就是危害。不过目前有提供几种技术来解决这些危害像是转发与延迟等。

  

  右图是一般有4层管线的示意图:  上方的大灰色格是一连串未执行的指令;下方的大灰色格则是已执行完成的指令;中间的大白色格则是管线。  执行顺序如以下列表所示:

  指令执行中产生一个“打嗝”(hiccup),在管线中生成一个没有实效的气泡。  如右图,在编号为2的时脉周期中,紫色指令的读取被延迟,并且在编号为3的时脉周期中解码层也产生了一个气泡。所有在紫色指令之后的指令都被延迟执行,而在其之前已经执行了的指令则不受影响。  由于气泡使指令执行延迟了一个时脉周期,完成全部4条指令的执行共需要8个时脉周期。  而气泡处对指令的读取、解码、执行与写回都没有实质影响。这可以使用nop代码来完成。

  很多处理器的管线深度到5层、7层、10层,甚至31层(像是Intel Pentium 4 Prescott)。Xelerator X10q甚至有多于1000层的管线深度。  当程序出现分支将不利于过深管线,整条管线将会无效化。为了减轻此状况,分支预测就变的重要。如果分支预测错误,也能够借由自行结束预测来避免加速恶化效率。在某些运用上,像是超级电脑运算,为了能够将超长管线的运算优势凸显出来,会特地将程序写的极少分支化来避免预测失败,而且深度的管线化主要是为了能降低每个时脉执行的指令量而设计。当程序经常出现分支,把分支重新排序(像是将更为需要的指令提早放入管线中)而将明显的降低损失的速度以避免将分支“冲垮”。像是gcov程序能够使用一种覆盖率检查的技术检查特定分支的执行频率,但是这种检查法经常是最佳化的最后手段。处理能力高的管线会因为很多分支的程序而降低效率,这是因为处理器不知道下一个要读取的指令是什么,而需要等待完成分支指令而让管线清空。处理完分支之后,下一个指令就要经过所有管线,直到整个指令集的结果出现,而处理器才会再继续执行。而在极端的状况下,管线化处理器的效能理论上可能会与未管线化处理器一致,甚至是每层管线都在待命状态,而且指令经常在管线之中跑来跑去时的效能比较差一些。  由于指令管线化,处理器读取机器码时并不会立即执行。因为如此,在很接近的地方执行更新机器码的动作就可能无法作用,因为这些机器码已经进入预读输入队列内。指令快取又会让此现象更加恶化。不过这只会在能够自我变更的程序出现此现象。

  

  一个典型的加法指令可能会写成像codice_1,而中央处理器(CPU)会将内存(Memory)内A位置与B位置的数值相加后放到C位置。在管线化处理器内,管线控制器会将这个指令分拆成一连串微指令:  "R1", "R2"和"R3"是CPU内的暂存器(register是CPU里面能够快速存取的暂存内存)。主存储器内标注为A位置和B位置之存储单元中的数值被加载(或称复制)到暂存器R1和R2中,然后送到加法器中相加,结果输出到暂存器R3中,R3中的数值再被存储到主存储器内标注为C位置的存储单元。  而且在非管线化的例子,开始驱动加法动作到完成的时间是不变的。  在这个范例中的管线分为3层:加载,执行,存储。每一步被称为管线层(或称管线阶段,pipeline stages)。  在非管线化处理器中,同一时间只允许一个层运作,所以必须等待指令执行完毕才能开始执行下一条指令。在管线化处理器中,所有的层能在同一时间处理不同的指令。当一条指令在执行层,另外一条指令在解码层,第三条指令在读取层。  管线没有减少执行指令所花费的时间;它增加了在同一时间被处理的指令数量,并且减少了完成指令之间的延迟。随着处理器中管线层的数量增加,能在同一时间被处理的指令数量也相应增加,也减少了指令等待处理所产生的延迟。现在生产的微处理器至少有2层管线。(Atmel AVR与PIC微控制器都有2层管线)Intel Pentium 4处理器有20层管线。

  以下表格具体列出3层管线理论:  以组合语言表示将会被执行的指令列表: 代码的执行循序如下:  从主存储器中读取LOAD指令。  LOAD指令被执行,同时从主存储器中读取MOVE指令。  LOAD指令在存储层(Store stage),LOAD指令的执行结果#40(the number 40)将被存储到暂存器A。同时,MOVE指令被执行。MOVE指令必须等待LOAD指令执行完毕才能将暂存器A中的内容移动到暂存器B中。  STORE指令被加载,同时MOVE指令执行完毕,并且ADD指令被执行。  注意! 有时候,一个指令会依赖于其他指令的执行结构(例如以上的MOVE指令)。当一个指令因为操作数而需引用一个特定的位置,读取(作为输入)或者写入(作为输入),执行那些指令的循序不同于程序原本的执行循序能导致冒险(hazards)。现时有机种技术用于预防危害,或者绕过(working around)它们。
指令管线化(英语:Instruction pipeline)是为了让计算机和其它数码电子装置能够加速指令的通过速度(单位时间内被执行的指令数量)而设计的技术。