1989年推出的i486处理器引入了五级流水线。这时,在CPU中不再仅运行一条指令,每一级流水线在同一时刻都运行着不同的指令。这个设计使得i486比同频率的386处理器性能提升了不止一倍。五级流水线中的取指阶段将指令从指令缓存中取出(i486中的指令缓存为8KB);第二级为译码阶段,将取出的指令翻译为具体的功能操作;第三级为转址阶段,用来将内存地址和偏移进行转换;第四级为执行阶段,指令在该阶段真正执行运算;第五级为退出阶段,运算的结果被写回寄存器或者内存。由于处理器同时运行了多条指令,大大提升了程序运行的性能。
处理器一般由如下功能单元组成:
取指单元 译码单元 执行单元 Load/store单元(load用于从内存中取数据,而STORE用于存数据到内存) 例外/中断单元 电源管理单元 流水线通常由取指、译码、执行及Load/Store等单元组成。各单元按图所示的几个步骤循环重复自身工作。 流水线的含义: 与工厂生产线类似,将一件工作分成若干个固定的工序进行。 cpu流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令。(原理和生产流水线一样)
CPU指令流水线根据之前描述的基础,指令进入流水线,通过流水线处理,从流水线出来的过程,对于我们程序员来说,是比较直观的。 I486拥有五级流水线。分别是:取指(Fetch),译码(D1, main decode),转址(D2, translate),执行(EX, execute),写回(WB)。某个指令可以在流水线的任何一级。 但是这样的流水线有一个明显的缺陷。对于下面的指令代码,它们的功能是将两个变量的内容进行交换。 从8086直到386处理器都没有流水线。处理器一次只能执行一条指令。再这样的架构下,上面的代码执行并不会存在问题。 但是i486处理器是首个拥有流水线的x86处理器,它执行上面的代码会发生什么呢?当你一下去观察很多指令在流水线中运行,你会觉得混乱,所以你需要回头参考上面的图。 1、第一步是第一条指令进入取指阶段; 2、然后在第二步第一条指令进入译码阶段,同时第二条指令进入取指阶段; 3、第三步第一条指令进入转址阶段,第二条指令进入译码阶段,第三条指令进入取指阶段。 4、但是在第四步会出现问题,第一条指令会进入执行阶段,而其他指令却不能继续向前移动。 5、第二条xor指令需要第一条xor指令计算的结果a,但是直到第一条指令执行完成才会写回。 所以流水线的其他指令就会在当前流水级等待直到第一条指令的执行和写回阶段完成。第二条指令会等待第一条指令完成才能进入流水线下一级,同样第三条指令也要等待第二条指令完成。 这个现象被称为流水线阻塞或者流水线气泡。
常用概念: 1、流水线级数:流水线的节拍数。 2、吞吐率:单位时间内流水线能处理的任务数量。 3、最大吞吐率:流水线达到不间断流水的稳定状态后可获得的吞吐率。 4、加速比:流水方式的工作速度与等效的顺序工作方式时间的比值。 流水线指标: 1、流水技术无助于减少单个任务的处理延迟(latency),但有助于提高整体工作负载的吞吐率 2、多个不同任务同时操作, 使用不同资源 3、潜在加速比= 流水线级数 4、流水线的速率受限于最慢的流水段 5、流水段的执行时间如果不均衡,那么加速比就会降低 6、开始填充流水线的时间和最后排放流水线的时间降低加速比
低功耗嵌入式领域的ARM7就是采用3级流水线结构。 超流水 超流水线技术是通过细化的流水,提高主频。使得机器在一个周期内完成一个甚至多个操作,其实质是用空间换取时间。 超流水处理器是相对于基准处理器而言的,一般cpu的流水线是基本的指令预取,译码,执行和写回结果四级。超流水线(superpiplined)是指某型CPU内部的流水线超过通常的5~6步以上,例如Pentium pro的流水线就长达14步。将流水线设计的步(级)数越多,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。这一点我们可以用日常事例来说明,比如有5个人接力传送木头(对应一个5级的流水线),超流水是说细化该流水过程,即由10个人接力(此时为10级流水),显然完成全部任务的速度会快。相当于毛主席的一句话:人多力量大(效率高)。
超标量 超标量是指在CPU中有一条以上的流水线,并且每时钟周期内可以完成一条以上的指令,这种设计就叫超标量技术。 其实质是以空间换取时间。 CPU架构是指在一颗处理器内核中实行了指令级并行的一类并行运算。这种技术能够在相同的CPU主频下实现更高的CPU吞吐率(throughput)。
|