微体系结构层

流水线中的三种冒险

流水线中的三种冒险ISA指令的实现会包含阻碍流水线的因素,使程序不能完全流水式执行。上图给出了在5段流水线的机器中,指令“完全”流水执行和流水线被阻碍时的对比。这种为保证正确执行,而在流水线中插入的停顿称为气泡。可以发现如果在一个指令中插入了1个气泡,那么这个指令之后的步骤都会被推迟1个时钟周期,更糟糕的是这些步骤被推迟1个周期会导致相应硬件的占用被推迟1个周期,导致后面的指令也要相继推迟才能占用这些硬件。也就是1个气泡可能导致该指令后的所有指令晚1个周期结束。 阻碍流水线的因素被称为冒险(Hazard,和电路的冒险不是同个概念)。冒险可分如下几类: 1) 结构冒险:同时抢占同一硬件资源导致的。比如在一个周期里同时fetch内存; 2) 数据冒险:又称为相关,数据的前后依赖关系导致的。比如前面MIC-3讨论过微指令间的写后读相关,因为是在同一条指令内的相关,所以也比较容易直接解决。进入流水线的ISA指令间也有相关,比如在流水线中的2条指令,上条指令的数据在周期i尚未产生,但下条指令在周期i依赖该数据;… 阅读全文

处理控制冒险的分支预测技术

分支预测分支预测技术是用于处理控制冒险的。这里借上图中的一段高级语言的IF-ELSE程序,及其对应的某种汇编语言来讨论分支预测,汇编包含1个条件跳转指令(BR)、1个无条件跳转指令(BNE)。 首先,上面的无条件跳转指令看起来似乎容易处理,因为其目的地址不会改变,似乎能直接让取值单元取目的地址的指令,但在很多计算机里并不能这样,这由流水线本身的特点决定。在这样的计算机里,当译码单元“发现”无条件转移指令时,取指单元已经在取其后面的指令了。换句话说,无条件跳转的下一条指令已经上了流水线。这时解决的办法是干脆让这条指令执行完,然后再去执行跳转到的指令。这种情况是很难让人接受的,因为完全不符合前后次序。不过有2种“通融”方式: 1) 默认把所有无条件转移指令的下一条指令“当作”其上一条指令来执行; 2) 让所有无条件转移指令的下一条指令都是NOP;… 阅读全文

处理数据冒险的乱序执行技术

顺序执行与数据冒险为讨论乱序执行技术,先引入一种超标量计算机,并先讨论其上的顺序执行,所谓顺序执行就是前面讨论的流水线的执行方式,即指令都按流水线的方向完成其各个步骤。 该机器包含R0~R7共8个指令层可见的寄存器,其所有算术指令都由3个寄存器完成(比如R0=R1+R2)。而超标量意味该机器的流水线是有“分支”的,2个分支能“同时”完成计算并写回公共的R0~R7寄存器,这种分支流水线通常是每个分支有自己独立的ALU等硬件。 该机器执行算术指令的时序是这样,如在第n周期译码,则在第n+1周期开始执行,加减在第n+2周期结束时把结果写入寄存器,乘法则要多占1个周期。比如第k周期发射2个加法指令,如寄存器不冲突,第k+2周期结束时,和就分别在2个寄存器里。译码器能在1个周期里译码和发射指令,也可之后发射。… 阅读全文

推测执行技术

基本块程序可划分成数个基本块,基本块包含多条顺序执行的指令,且只有一个入口和一个出口。一个入口意味着整个程序中不能有跳转类指令进入基本块第一条指令后的指令,一个出口意味着基本块最后一条指令才能是跳转指令。上图给出了一段高级语言程序,其包含多个基本块。 前面在讨论乱序执行时,使用到的汇编程序完全由算术指令构成,不包含跳转指令。所以说前面讨论的乱序执行仅适用于基本块内部,这有较大的局限性,因为实际程序中的基本块通常都很短,且基本块间不一定能并行。所以乱序执行只有跨越基本块边界才能有更大效果。而跨越基本块则意味着执行可能不应该执行的指令,这种不知道是否需要执行就提前执行的技术统称为推测执行技术。对于很多硬件来说,其无法支持跨越基本块的乱序执行,所以这部分工作也会交给编译器完成,称为指令重排。  … 阅读全文

INTEL酷睿I7的微体系结构

功能模块上图为酷睿I7的每个核心的组成结构,其包括如下4大部分: 1) 内存子系统:内存系统的一部分,不包括核心外的L3缓存、主板上的内存; 1.1) L2缓存:不区分指令和数据,为256KB的8路组相联结构,缓存块大小为64字节; 1.2) 系统接口:连接到L3缓存,L3缓存也不区分指令和数据,大小为1-20MB(根据产品型号确定,比如i5、i3等),采用12路组相联结构,缓存块大小为64字节。L3缺失时继续访问DDR3内存总线; L1缓存和内存子系统间存在未画出的2个预取单元,第1个是按内存块大小预取的。第2个是按步长预取的,当CPU总以连续的k个地址(步长)取数据时,该预取单元会获取到这个步长,并根据这个步长预取数据,这种预取策略考虑的是便于操作数组等数据结构。 2) 前端:取指令并将指令译码为微操作序列,酷睿的微操作和RISC处理器的微操作风格类似。并且能够把译码前的指令装入L1指令缓存,把译码后的微操作装入微操作缓存(INTEL内部称为L0缓存);… 阅读全文

德州仪器OMAP4430的微体系结构

功能模块OMAP4430上有2个ARM Cortex A9处理器核心,使用ARM v7指令集。该核心是32位的,使用32位的寄存器、数据通路、存储总线。与INTEL酷睿处理器不同,该核心是真正的RISC处理器,其使用的指令本身就是类似于微操作的。上图为其大致的组成。 A9比酷睿的微体系结构简单很多,但两者的关键部件有很多相似的地方。比如A9也使用了两级的高速缓存,但其L2缓存只有1MB。L1指令缓存是32KB的四路组相联结构,块大小为32字节。由于大多数ARM v7指令是4字节的,所以L1指令缓存可容纳8K条指令,比酷睿的微操作缓存的容量要大。L1数据缓存也是32KB的四路组相联结构,块大小为32字节。 指令发射单元每个时钟周期能至多发射4条指令。遇到条件分支时会根据4K个表项的分支预测器判断跳转是否发生,如果预测发生,再去1K个表项的地址缓冲区判断跳转的目标地址。如果前端发现程序正在执行“紧凑的小循环”,会把循环装入快速循环旁路缓存,用于优化速度和能耗。… 阅读全文
滚动至顶部