资源描述
1Advanced Computer ArchitectureThe School of Information Science and Engineering高级流水线与指令级并高级流水线与指令级并1 1 流水线技术基础流水线技术基础2 2 指令级并行概念与技术指令级并行概念与技术3 3 流水线动态调度与预测流水线动态调度与预测4 4 高级流水线技术高级流水线技术2Advanced Computer ArchitectureThe School of Information Science and Engineering3.13.1流水线技术基础流水线技术基础3.1.1 3.1.1 什么是流水线(什么是流水线(pipeline)pipeline)流水线流水线是实现多条指令重叠执行的技术,是加快CPU执行速度的关键技术。流水线技术流水线技术是将一个重复的时序过程分解成为若干个子过程,而每个子过程都可有效地在其专用功能段上与其他子过程同时执行l术语:流水级流水级(pipe stage):流水线由多个流水级组成,通常一条指令由n级流水级完成。每个流水级完成指令的部分任务。吞吐量吞吐量(throughput):单位时间内流出流水线的指令数。3Advanced Computer ArchitectureThe School of Information Science and Engineering什么是流水线什么是流水线(2)(2)机器周期机器周期(machine cycle):完成一个基本操作所需要的时间,CPU周期。不同流水线完成指令功能不等,所需时间有长有短,因此设计流水线的关键是合理划分指令功能,使每一流水级完成指令功能的时间大致相等。机器周期由最长流水级的时间决定,通常等于时钟周期。4Advanced Computer ArchitectureThe School of Information Science and Engineering什么是流水线什么是流水线(3)(3)理想流水线的加速因子理想流水线的加速因子(Speedup)非流水线机器指令的平均执行时间=-流水线机器指令的平均执行时间 非流水线机器指令的平均执行时间 =-非流水线机器指令的平均执行时间/流水级数=流水级数5Advanced Computer ArchitectureThe School of Information Science and Engineering3.1.2 DLX3.1.2 DLX指令的非流水线实现指令的非流水线实现(1)(1)DLX,是一RISC体系结构计算机。DLX指令的非流水线实现分五步(即5个时钟周期)完成:DLX简单流水线的实现示意图简单流水线的实现示意图6Advanced Computer ArchitectureThe School of Information Science and Engineering1、取指令周期(取指令周期(IF)IR MemPC NPC PC+42、译码译码/读寄存器周期读寄存器周期(ID)A RegIR 6.10 B RegIR11.15 Imm (IR16)16#IR16.31)7Advanced Computer ArchitectureThe School of Information Science and EngineeringDLXDLX指令的非流水线实现指令的非流水线实现(2)(2)3、执行执行/有效地址计算有效地址计算(EX)Load/Store ALUoutput A+Imm R-R ALU ALUoutput A func B R-I ALU ALUoutput A op Imm Branch ALUoutput NPC+Imm;Cond A op 08Advanced Computer ArchitectureThe School of Information Science and EngineeringDLXDLX指令的非流水线实现指令的非流水线实现(3)(3)4、存储器访问存储器访问/转移完成转移完成(MEM)Load/Store:LMD MemALUoutput MemALUoutput B Branch if (Cond)then PCALUoutput else PC NPC9Advanced Computer ArchitectureThe School of Information Science and EngineeringDLXDLX指令的非流水线实现指令的非流水线实现(4)(4)5、写回周期(写回周期(WB)R-R ALU RegsIR16.20 ALUoutput R-I ALU RegsIR11.15 ALUoutput Load RegsIR11.15 LMD10Advanced Computer ArchitectureThe School of Information Science and Engineering11Advanced Computer ArchitectureThe School of Information Science and Engineering3.1.3 DLX3.1.3 DLX的基本流水线的基本流水线(1)(1)DLX简单流水线的流水过程简单流水线的流水过程12Advanced Computer ArchitectureThe School of Information Science and EngineeringDLXDLX流水线节拍与流水线节拍与CPUCPU相关硬件的时间关系图相关硬件的时间关系图13Advanced Computer ArchitectureThe School of Information Science and Engineering实现流水线后,对硬件的要求更高了,并需作相应的改变,主要有以下2点:IM,DM必须分开,或由一双端口存储器代替IM和DM;IM,DM的带宽要提高5倍,(对DLX的5级流水线而言)另外,可以发现Branch指令将要推迟三个节拍.14Advanced Computer ArchitectureThe School of Information Science and EngineeringDLXDLX流水化流水化CPUCPU中数据通路的实现图中数据通路的实现图15Advanced Computer ArchitectureThe School of Information Science and Engineering图中注意:在两个相邻节拍间增加一暂存器,用来保留指令的状态(及数据),共有IF/ID,ID/EX,EX/MEM,MEM/WB四个.16Advanced Computer ArchitectureThe School of Information Science and EngineeringDlXDlX流水线的形式化描述流水线的形式化描述17Advanced Computer ArchitectureThe School of Information Science and Engineering3.1.43.1.4流水线的主要障碍流水线的主要障碍-流水线竞争流水线竞争(pipeline(pipeline hazards)hazards)l定义:流水线竞争是流水线中造成下一条指令不能在指令时钟周期被执行的情况.18Advanced Computer ArchitectureThe School of Information Science and Engineering流水线竞争流水线竞争(2)(2)l流水线竞争分三类:v结构竞争(structure hazards)-试图同时以两种不同的方式使用同一资源;原因:硬件无法支持同时重叠执行的所有可能的指令组合v数据竞争(data hazard)-在产生数据之前,就试图使用它们原因:流水线中的重叠执行的指令依赖于前面指令的结果v控制竞争(control hazard)-在判定转移条件之前,就试图决策转移方向原因:可能改变PC的指令的流水19Advanced Computer ArchitectureThe School of Information Science and Engineering3.1.5 3.1.5 流水线竞争举例及其解决方法流水线竞争举例及其解决方法1.结构竞争结构竞争 单口存储器造成存储器访问冲突,造成流水线停顿实例.20Advanced Computer ArchitectureThe School of Information Science and Engineering结构竞争21Advanced Computer ArchitectureThe School of Information Science and Engineering22Advanced Computer ArchitectureThe School of Information Science and Engineering结构竞争造成停顿结构竞争造成停顿l改进方法改进方法:增加硬件的拷贝数使硬件流水化23Advanced Computer ArchitectureThe School of Information Science and Engineering2.数据竞争例 ADD R1,R2,R3 SUB R4,R5,R1 AND R6,R1,R7 OR R8,R1,R9 XOR R10,R1,R11后四条指令都用ADD的结果R1作为源操作数.24Advanced Computer ArchitectureThe School of Information Science and Engineering数据相关性引起数据竞争25Advanced Computer ArchitectureThe School of Information Science and Engineering数据竞争解决说明数据竞争解决说明:SUB和ADD必须分别停顿2个和1个Cycle才能得到所需的R1的值,Or由于Reg.是在Cycle前沿写入,在Cycle中间读出,正好解决.26Advanced Computer ArchitectureThe School of Information Science and Engineering数据竞争的分类数据竞争的分类:lRAW(Read after write)lWAW(Write after write)LW R1,0(R2)ADD R1,R2,R3若先写,则造成WAW.lWAR(Write after read)SW 0(R1),R2 ADD R2,R3,R4 若先写,则造成WAR.lDLX不会发生此不会发生此WAW,WARWb在最后一拍Read(ID)总是早于WB27Advanced Computer ArchitectureThe School of Information Science and Engineering解决数据竞争的方法解决数据竞争的方法2 Forwarding技术,可由硬件实现 在发生上述数据相关时,后面的指令并不是马上就要用到前一条指令的计算结果。如果能够将计算结果从其产生的地方直接送到需要它的地方,就可以避免暂停;进入流水线的指令一旦检测到与前面的指令有RAW相关,就stall流水线,等待竞争消除,然后再继续执行。-极大地降低流水线的效率1.RAW竞争最简单的解决方法:插入stall28Advanced Computer ArchitectureThe School of Information Science and Engineering解决数据竞争的方法解决数据竞争的方法l把结果提前(Forwarding),可由硬件实现 29Advanced Computer ArchitectureThe School of Information Science and Engineering把结果提前的可能性30Advanced Computer ArchitectureThe School of Information Science and Engineering提前硬件示意图(彩线为提前线路)31Advanced Computer ArchitectureThe School of Information Science and Engineering不能用不能用“提前提前”方法解决数据竞争的例子方法解决数据竞争的例子 LW R1,0(R2)SUB R4,R1,R5 AND R6,R1,R7 OR R8,R1,R9R1最早等到第四拍MEM结束,才能得到.(即才能从Data Memory读入,存入暂存器)SUB所用的R1最迟在第三拍EX开始是要准备好,与LW相差一拍。同SUB,可用“提前”方法解决同SUB,可用“提前”方法解决32Advanced Computer ArchitectureThe School of Information Science and Engineering33Advanced Computer ArchitectureThe School of Information Science and EngineeringLoad Delay:不能用“提前”方法解决l解决方法:解决方法:需要一种称为“Pipeline interlock”的硬件,来检测储存在此类竞争,使Pipeline 停顿下来,一直到竞争消失(或可用“提前”硬件解决这一竞争。Compiler Scheduling,或称Pipeline Scheduling,instruction Scheduling34Advanced Computer ArchitectureThe School of Information Science and Engineering编译器调度编译器调度:由编译器重新按排指令执行顺序,来避免停顿周期例:LW R1,B LW R2,C ADD R3,R1,R2 SW A,R3 由于存在Load Delay,ADD必须推迟一拍35Advanced Computer ArchitectureThe School of Information Science and EngineeringA=B+C的流水过程36Advanced Computer ArchitectureThe School of Information Science and Engineering编译器调度指令顺序,避免停顿编译器调度指令顺序,避免停顿例 a=b+c;d=e-fLW Rb,bLW Rc,cADD Ra,Rb,RcSW a,RaLW Re,eLW Rf,fSUB Rd,Re,RfSW d,RdLW Rb,bLW Rc,cLW Re,eADD Ra,Rb,RcLW Rf,fSW a,RaSUB Rd,Re,RfSW d,Rd37Advanced Computer ArchitectureThe School of Information Science and Engineering要采用interlock或forwarding来避免数据竞争的前提是要能检测出在流水线中存在数据竞争。这里要解决两个问题:1.如何监测数据竞争(分别对应需interlock或forwarding的数据竞争)2.检测到需interlock或forwarding后,做什么?38Advanced Computer ArchitectureThe School of Information Science and Engineering*分析需分析需Interlock的情况的情况(相对简单:只在Load Delay时发生)l如何检测如何检测Load Delay?LD IF ID EX MEM WB ID/EXADD IF ID Stall EX MEM WB IF/IDSUB IF Stall ID EX MEM WB 只要对LD指令(在ID后,才知道指令的opcode及其操作数operands)比较其紧跟其后的指令的opcode及其operands,是否直接相关。39Advanced Computer ArchitectureThe School of Information Science and EngineeringLoad引起数据竞争的检测40Advanced Computer ArchitectureThe School of Information Science and Engineering如何实现内锁如何实现内锁 一旦检测到Load Delay情况,只需把下一条指令的ID/EX暂存器的操作码寄存器内容置0,使ADD R0,R0,R0,成为条空操作.使IF/ID中被停顿指令的操作码寄存器的内容延长保留一拍.41Advanced Computer ArchitectureThe School of Information Science and Engineering对应forwarding path参见(图4-19,p156)42Advanced Computer ArchitectureThe School of Information Science and Engineering3.控制竞争造成停顿实例控制竞争造成停顿实例转移指令造成的三个停顿周期转移指令造成的三个停顿周期43Advanced Computer ArchitectureThe School of Information Science and Engineering控制竞争造成停顿的原因控制竞争造成停顿的原因:转移地址在第三拍EX中计算;转移条件比较在第四拍MEM中进行。所以要等到第四拍结束才能知道转移成功与否。44Advanced Computer ArchitectureThe School of Information Science and Engineering 解决控制竞争造成停顿的方法(解决控制竞争造成停顿的方法(1)l 通过提前计算转移的目的地址和提前比较转移条件,可使转移指令造成的停顿周期由3个减少到1个。45Advanced Computer ArchitectureThe School of Information Science and Engineering转移计算提前后的流水线46Advanced Computer ArchitectureThe School of Information Science and Engineering解决控制竞争造成停顿的方法(解决控制竞争造成停顿的方法(2)l预测每一个转移都不成功预测每一个转移都不成功,即在下一拍立即取转移指令的下一条指令。47Advanced Computer ArchitectureThe School of Information Science and Engineering预测成功,即预测成功,即实际实际为不转移,则无停顿为不转移,则无停顿48Advanced Computer ArchitectureThe School of Information Science and Engineering预测失败,即实际为转移,则停顿一个周期预测失败,即实际为转移,则停顿一个周期49Advanced Computer ArchitectureThe School of Information Science and Engineering解决控制竞争造成停顿的方法(解决控制竞争造成停顿的方法(3)l预测每一个转移都成功预测每一个转移都成功,但必须等算出转移目标地址,才能取转移目的指令。这一方法对对DLX机器无效机器无效,因为在DLX机器中,转移地址计算和转移条件比较(即知道转移能否成功)是同时获得的,因而无利可图。但对其他机器可能有利。50Advanced Computer ArchitectureThe School of Information Science and Engineering解决控制竞争造成停顿的方法解决控制竞争造成停顿的方法(4)l延时转移(延时转移(delayed branch)方法方法从开始处理转移指令到明确转移是否发生之间存在一段转移延时时间,称为转移延时槽转移延时槽(branch-delay-slot)。在DLX机器中这一由转移指令造成的延时时间为一个时钟周期,即允许利用branch-delay-slot执行一条指令。Delayed branch方法方法就是由编译器挑选合适的,有用的指令填入延时槽中执行,即合理利用这一延时时间,而不浪费。51Advanced Computer ArchitectureThe School of Information Science and Engineering三种转移延时槽调度方法(由编译三种转移延时槽调度方法(由编译完成)完成)52Advanced Computer ArchitectureThe School of Information Science and Engineering3.1.6 带有停顿周期的流水线性能计算带有停顿周期的流水线性能计算speedup from pipelining Average instruction time unpipelined=-Average instruction time pipelined CPIunpipelinedClock Cycle unpipelined=-CPIpipelinedClock Cycle pipelined CPIunpipelinedClock Cycle unpipelined=-CPIpipelinedClock Cycle pipelined53Advanced Computer ArchitectureThe School of Information Science and Engineering可以有两种观点来看待流水线性能的提高可以有两种观点来看待流水线性能的提高l由于缩短了CPI(Clock cycle per instruction)l由于缩短了Clock cycle time.传统上,采用比较CPI方法来计算流水线的加速因子,我们研究CPIpipelined=Ideal CPI+Pipeline stall clock cycles per instruction=1+Pipeline stall clock cycles per instruction54Advanced Computer ArchitectureThe School of Information Science and Engineering假设流水线机器每一周期内完成的工作量均是均衡的,即设备因为实现流水线而延长流水级的时间,则Clock Cycleunpipelined=Clock Cycle pipelined则含有停顿周期的流水线的加速因子为:speedup CPIunpipelined=-1+Pipelined stall cycles per instruction Pipeline depth=-1+Pipelined stall cycles per instruction55Advanced Computer ArchitectureThe School of Information Science and Engineering3.2 指令级并行概念与技术指令级并行概念与技术3.2.1 提高流水线性能的思路提高流水线性能的思路(1)l直观思路直观思路:缩小流水线的CPI CPIunpipelined因为Speedup=-CPIpipelinedCPIpipelined=Ideal pipeline CPI+pipelined stall cycles per instruction=1+Structual stalls+RAW stalls+WAR stalls +WAW stalls+Control stalls56Advanced Computer ArchitectureThe School of Information Science and Engineeringl所以所以:缩小CPIpipelined的途径就是:减少各种竞争造成的停顿周期数减少各种竞争造成的停顿周期数57Advanced Computer ArchitectureThe School of Information Science and Engineering各种高级流水线技术及其作用对象:58Advanced Computer ArchitectureThe School of Information Science and Engineering本质上思路本质上思路(2)-研究指令级并行性研究指令级并行性(ILP,instruction-level parallelism),据此进一步开发指令重叠执行的可能性l流水线技术就是指令重叠执行技术前提:有足够硬件资源(无机构竞争)重叠执行的指令是相互独立的,也就是说,无数据依赖关系和执行顺序的约束关系,即无数据竞争和控制竞争。59Advanced Computer ArchitectureThe School of Information Science and Engineeringl指令之间可重叠执行性,即所谓指令级并行性。因此进一步研究开发存在于指令之间的并行性,将进一步提高流水线的性能。l从两个方面研究ILP研究循环的多次迭代之间存在的并行性,即所谓循环级并行性(loop-level parallelism)(一类一类指令并行性指令并行性)研究指令之间的相关性(dependences)(具有普具有普遍意义的指令并行性遍意义的指令并行性)60Advanced Computer ArchitectureThe School of Information Science and Engineering3.2.2 指令级并行性指令级并行性l程序基本块程序基本块(basic block)内指令间并行性是内指令间并行性是有限的。有限的。程序基本块:程序基本块:指不包括转入(除程序入口)和转出(除程序出口)指令的连续代码序列,通常由6-7条指令组成。根据统计在整数程序中动态转移的概率为16%,即程序中一对转移指令之间仅含6-7条指令)考虑到基本块内指令之间存在各种相关性,所以程序基本块内可重叠执行的指令数远少于可重叠执行的指令数远少于6条条。61Advanced Computer ArchitectureThe School of Information Science and Engineeringl必须研究多个基本块代码之间的可重叠执行性,即ILP。l最常见,也是最简单的一种多个基本块之间的并行行为:循环多次迭代之间的并行性,称微循环级并行性(loop-level parallelrism-LLP)。例 for(i=1;I=1000;i=i+1;)xi=xi+yi;loop内指令无重叠执行可能性,loop的每一次迭代可重叠执行。62Advanced Computer ArchitectureThe School of Information Science and Engineeringl如何将此类如何将此类LLP转化为转化为ILP?首先把loop按每次迭代代码序列展开,再根据代码指令指令之间相关性进行调度。63Advanced Computer ArchitectureThe School of Information Science and Engineering3.2.3 将将LLP转化为转化为ILP方法方法-循环展开(loop unrolling)加流水线调度(pipeline scheduling)l 两种loop unrolling 方法:static loop unrolling by compilerdynamic loop unrolling by hardwarel流水线调度流水线调度:若j指令要用到I指令的结果(RAW相关),流水线调度是指把(i和j)两条指令分隔开来,两者之间应间隔的时钟周期数等于源指令产生结果所需的延时(latency)时钟周期数。64Advanced Computer ArchitectureThe School of Information Science and Engineeringl两种流水线调度方法两种流水线调度方法Static pipeline scheduling by compiler;Dynamic pipeline scheduling by hardware.l本章采用如下假设本章采用如下假设无结构竞争(即有足够硬件可供使用),每一时钟周期可发射一条指令采用DLX标准的整数操作流水线结构(即由IF,ID,EX,MEM,WB五拍组成)转移指令(Branch)后由一个时钟周期延时浮点操作的延时时钟周期数参见表 65Advanced Computer ArchitectureThe School of Information Science and Engineering浮点操作延迟时间浮点操作延迟时间66Advanced Computer ArchitectureThe School of Information Science and Engineering实例实例:说明编译器如何通过调度和循环展开来提高流水线性能For(i=1;i=1000;i+)xi=xi+s;其中其中:xi-array element;s -scalar.67Advanced Computer ArchitectureThe School of Information Science and Engineering转换为DLX汇编语言代码如下:Loop:LD F0,0(R1)ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,8 BNEZ R1,LoopR1:数组元素的地址,初始化为最高地址F2:标量值s双字地址间隔为8字节68Advanced Computer ArchitectureThe School of Information Science and Engineering计算未调度时计算未调度时loop一次迭代所需时钟周期数一次迭代所需时钟周期数Loop:LD F0,0(R1)ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,8 BNEZ R1,LoopF D X M W F D s A1 A2 A3 A4 W F s D s s X M W F s s D X M W F s D X M W 10 CC F F 10 CC F F69Advanced Computer ArchitectureThe School of Information Science and Engineering对对loop代码进行调度后代码进行调度后,一次迭代所需时钟周一次迭代所需时钟周期数期数Loop:LD F0,0(R1)SUBI R1,R1,8 ADDD F4,F0,F2 BNEZ R1,Loop SD 8(R1),F4F D X M W F D X M W F D A1 A2 A3 A4 W F D X M W F D s X M W 6 CC F F s D X M W70Advanced Computer ArchitectureThe School of Information Science and Engineering前页说明前页说明:l为了颠倒SUBI和SD顺序,SD的地址发生了改变!即恢复到原地址l一次迭代由9个时钟周期减少到6个时钟周期l是积极算一个数组元素仅需3个时钟周期(Load,add和store);另外3个时钟周期(SUBI,BNEZ和一个stall)是loop的开销71Advanced Computer ArchitectureThe School of Information Science and Engineering用loop unrolling来消除loop overhead,以及进一步改善调度性能.Loop:LD F0,0(R1)stall ADDD F4,F0,F2 stall,stall SD 0(R1),F4 LD F6,-8(R1)stall ADDD F8,F6,F2 stall,stall SD -8(R1),F8 LD F10,-16(R1)stall ADDD F12,F10,F2 stall,stall SD -16(R1),F12 LD F14,-24(R1)stall ADDD F16,F14,F2 stall,stall SD -24(R1),F16 SUBI R1,R1,#32 stall BNEZ R1,loop stall72Advanced Computer ArchitectureThe School of Information Science and EngineeringlLoop展开4次lSUBI指令中R1要减32l注意loop展开后,每一次迭代采用不同寄存器,如用F0,F6,F10,F14表示LD的目的寄存器,分别表示不同变量l展开后loop需28个时钟周期,即每次迭代平均需28/4=7个时钟周期,仅通过展开仅通过展开,消除loop overhead,就可缩短每次迭代的时钟周期数,这里没有做任何调度没有做任何调度.73Advanced Computer ArchitectureThe School of Information Science and Engineering对unrolling loop进行调度进行调度,达到进一步缩短每次迭代的时钟周期数Loop:LD F0,0(R1)LD F6,-8(R1)LD F10,-16(R1)LD F14,-24(R1)ADDD F4,F0,F2 ADDD F8,F6,F2 ADDD F12,F10,F2 ADDD F16,F14,F2SD 0(R1),F4SD -8(R1),F8SUBI R1,R1,#32SD -16(R1),F12BNEZ R1,LoopSD 8(R1),F16(因R1已减32,所以加8)74Advanced Computer ArchitectureThe School of Information Science and Engineering前页说明前页说明:l 展开调度后的Loop共需14个时钟周期,则每次迭代平均只需14/4=3.5个时钟周期l调度展开的循环对提高性能的作用大于单纯的调度75Advanced Computer ArchitectureThe School of Information Science and Engineering例子说明的问题例子说明的问题:l研究开发ILP对提高处理器功能单元性能(即流水线性能)的巨大作用;l流水线思想早在60年代就开始应用于处理器,但只有在80年代和90年代,在深入研究ILP之后提出一系列先进流水线技术先进流水线技术,才成为使微处理器性能突飞猛进才成为使微处理器性能突飞猛进的关键技术;的关键技术;l上述例子所采用的一些方法对我们人类来讲都十分直观和简单,但要使硬件和软件但要使硬件和软件(编译器编译器)来完成上述来完成上述过程过程,必须总结出一套形式化的必须总结出一套形式化的,方法学上的条例来方法学上的条例来确定确定何时何时以及以及如何如何来改变指令的执行顺序来改变指令的执行顺序。76Advanced Computer ArchitectureThe School of Information Science and Engineering小结:小结:关于循环展开和调度方法在执行过程中,做出了以下决策和代码变换。(1)确信把SD移到SUBI和BNEZ之后是合法合法的,并求出SD的位移量位移量;(2)确信循环体的每次迭代是相互独立的每次迭代是相互独立的(除维持循环的代码外),以及循环体展开有循环体展开有利于性能提高利于性能提高;(3)为了避免因采用同一寄存器而造成不必要的限制,可以采用不同寄存器采用不同寄存器表示不同变量;77Advanced Computer ArchitectureThe School of Information Science and Engineering(4)消除额外测试和转移指令,调整维持循环的代码;消除额外测试和转移指令,调整维持循环的代码;(5)只有确信不同迭代中的Loads和stores是互相独立的之后,Loads和和Stores才能在展开后的循环体中才能在展开后的循环体中互换位置互换位置。为此必须分析存储器的地址,并确信Loads和stores访问的并非同一地址。这就是所谓的memory disambiguation。(6)在调度指令执行顺序时,必须确保相关性不变,才能使调度后的代码的结果与源代码的相同。78Advanced Computer ArchitectureThe School of Information Science and Engineering做出上述决策的关键在于做出上述决策的关键在于l了解指令之间的相关性(dependence)l了解给定的相关性下,应如何改变指令或重排其执行顺序。
展开阅读全文