简述 典型处理器(如Cortex A9)中一条存储器读写指令的执行全过程

感谢原作者:点击打开链接


经典的处理器架构的流水线是五级流水线:取指,译码,发射,执行和写回。

    现代的处理器设计上都采用了超标量体系结构(superscalar architecture)和乱序执行(out-of-order)技术,极大的提高了处理器的能力。超标量技术能够在一个时钟周期执行多个指令,实现指令级的并行,有效提高了ILP(Instruction Level Parallelism)指令级并行的效率,加大了整个cache和memory层次结构的实现难度。

    一条存储读写指令的执行全过程很难用一句话来回答。在一个支持超标量和乱序执行技术的处理器当中,一条指令的执行被分解为若干步骤,指令首先进入流水线(pipeline)的前端(Front-End),包括预取(fetch)和译码(decode),之后经过分发(dispatch)和调度(scheduler)后进入执行单元,最好提交执行结果。所有的指令使用顺序(In-Order)方式通过前端,并采用乱序的方式(Out-of-Order,简称OOO)进行发射,然后使用乱序执行,最后用顺序方式提交结果,并将最终结果更新到LSQ(Load-Store Queue)部件LSQ部件是指令流水线的一个执行部件,可以理解为存储子系统的最高层,其上接收来自CPU的存储器指令,其下连接着存储器子系统。其主要功能是将来自CPU的存储器请求发送到存储器子系统,并处理其下存储器子系统的应答数据和消息。

    很多程序员对乱序执行的理解有误差。对于一串给定的指令序列,为了提高效率,处理器会找出非真正数据依赖的指令,让它们并行执行。但是在提交执行结果的时候是按照指令次序的。总的来说,顺序提交指令,乱序执行,最后顺序提交结果。比如有两条没有数据依赖的数据指令,后面那条指令的读数据先被返回,它的结果也不能先写回到最终寄存器,而是必须等到前一条指令完成之后才可以。

    对于读指令,当处理器在等待数据从缓存或者内存返回的时候,它处于一个什么状态呢?是等在那不动还是继续执行别的指令?对于乱序执行的处理器,那么可以执行后面的指令,顺序执行的处理器,那么会使流水线停顿,知道读取的数据返回。 

    在AMD的Opteron微架构中,存储指令从L1指令cache中读取指令,L1指令cache会做指令加载,指令预取,指令预解码以及分之预测。然后进入到Fetch-Decode单元,会把指令解码成macro-ops微操作指令,然后由Dispatch部件分发到Integer Unit,Integer Unit由Integer Scheduler和Execution Unit组成,Execution Unit包含ALU(arithmetic-logicunit, 算术逻辑单元)和AGU(addressgeneration unit,地址生成单元),在ALU计算完成之后进入AGU计算有效地址完毕之后,将结果发送到LSQ部件。LSQ部件首先根据处理器系统要求的内存一致性(memory consistency)模型确定访问时序,另外LSQ还需要处理存储器指令间的依赖关系,最后LSQ需要准备L1 cache使用的地址,包括有效地址的计算和虚实地址转换,最终将地址按照L1Cache的要求分别送到Tag和状态阵列中。

简述 典型处理器(如Cortex A9)中一条存储器读写指令的执行全过程

图1    AMD  Opteron 微架构框图


    在ARM Cortex A9处理器中,存储指令首先通过主存储器或者L2 cache加载到L1指令cache中,在instructionprefetch stage阶段,主要是做指令预取以及分支预测。然后指令通过Instruction Queue队列被送到解码器进行指令的解码工作。解码器支持两路解码,可以同时解码两条指令。在Register rename stage阶段会做寄存器重命名,避免机器指令不必要的顺序化操作,提高处理器的指令级并行能力。在Dispatch stage阶段,这里支持4路猜测发射和乱序执行(Out-of-Order Multi-Issue with Speculation),然后在ALU/MUL/FPU中乱序执行。存储指令会计算有效地址并发射到内存系统中的LSU部件,最终LSU部件最终会去访问L1数据cache。

    在多处理器环境下,还需要考虑cache的一致性问题。L1和L2cache控制器需要保证cache的一致性,在CortexA9中cache的一致性实现MOSEI协议,在最糟糕情况下访问主存储器DDR,并将数据重新传递给LSQ,完成一次存储器读写的全过程。

简述 典型处理器(如Cortex A9)中一条存储器读写指令的执行全过程

图2  Cortex-A9结构框图