高级计算机体系结构-3-1.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
不能用“提前”方法解决数据竞争的例子 LW R1,0(R2) SUB R4,R1,R5 AND R6,R1,R7 OR R8,R1,R9 R1最早等到第四拍MEM结束,才能得到.(即才能从Data Memory读入,存入暂存器) SUB所用的R1最迟在第三拍EX开始是要准备好,与LW相差一拍。 同SUB, 可用“提前”方法解决 同SUB, 可用“提前”方法解决 Load Delay: 不能用“提前”方法解决 解决方法: 需要一种称为“Pipeline interlock”的硬件,来检测储存在此类竞争,使Pipeline 停顿下来,一直到竞争消失(或可用“提前”硬件解决这一竞争。 Compiler Scheduling, 或称Pipeline Scheduling, instruction Scheduling 编译器调度:由编译器重新按排指令执行顺序,来避免停顿周期 例: LW R1, B LW R2, C ADD R3, R1, R2 SW A, R3 由于存在Load Delay, ADD必须推迟一拍 A=B+C的流水过程 编译器调度指令顺序,避免停顿 [例] a = b+c ; d = e-f LW Rb, b LW Rc, c ADD Ra,Rb,Rc SW a, Ra LW Re, e LW Rf, f SUB Rd,Re,Rf SW d, Rd LW Rb, b LW Rc, c LW Re, e ADD Ra,Rb,Rc LW Rf, f SW a, Ra SUB Rd,Re,Rf SW d, Rd 要采用interlock或forwarding来避免数据竞争的前提是要能检测出在流水线中存在数据竞争。这里要解决两个问题: 1.如何监测数据竞争(分别对应需interlock或forwarding的数据竞争) 2.检测到需interlock或forwarding后,做什么? *分析需Interlock的情况(相对简单:只在Load Delay时发生) 如何检测Load Delay? LD IF ID EX MEM WB ID/EX ADD IF ID Stall EX MEM WB IF/ID SUB IF Stall ID EX MEM WB 只要对LD指令(在ID后,才知道指令的opcode及其操作数operands)比较其紧跟其后的指令的opcode及其operands,是否直接相关。 Load引起数据竞争的检测 如何实现内锁 一旦检测到Load Delay情况,只需 把下一条指令的ID/EX暂存器的操作码寄存器内容置0,使ADD R0, R0, R0,成为条空操作. 使IF/ID中被停顿指令的操作码寄存器的内容延长保留一拍. 对应forwarding path参见(图4-19,p156) 3.控制竞争造成停顿实例 转移指令造成的三个停顿周期 控制竞争造成停顿的原因: 转移地址在第三拍EX中计算;转移条件比较在第四拍MEM中进行。所以要等到第四拍结束才能知道转移成功与否。 解决控制竞争造成停顿的方法(1) 通过提前计算转移的目的地址和提前比较转移条件,可使转移指令造成的停顿周期由3个减少到1个。 转移计算提前后的流水线 解决控制竞争造成停顿的方法(2) 预测每一个转移都不成功,即在下一拍立即取转移指令的下一条指令。 预测成功,即实际为不转移,则无停顿 预测失败,即实际为转移,则停顿一个周期 解决控制竞争造成停顿的方法(3) 预测每一个转移都成功,但必须等算出转移目标地址,才能取转移目的指令。 这一方法对DLX机器无效,因为在DLX机器中,转移地址计算和转移条件比较(即知道转移能否成功)是同时获得的,因而无利可图。但对其他机器可能有利。 解决控制竞争造成停顿的方法(4) 延时转移(delayed branch)方法 从开始处理转移指令到明确转移是否发生之间存在一段转移延时时间,称为转移延时槽(branch-delay-slot)。 在DLX机器中这一由转移指令造成的延时时间为一个时钟周期,即允许利用branch-delay-slot执行一条指令。 Delayed branch方法就是由编译器挑选合适的,有用的指令填入延时槽中执行,即合理利用这一延时时间,而不浪费。 三种转移延时槽调度方法(由编译完成) 3.1.6 带有停顿周期的流水线性能计算 spee

文档评论(0)

骨干 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档