- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 分支预测未来 进一步提高很难 95%-98%左右 工业界分支预测越做越大,Alpha21464有48KB 进一步提高很有意义 预测精度提高0.5%,10000条分支指令就能够减少50次流水线的刷新 新应用及新结构需要新的预测机制 Power-aware分支预测 SMT结构分支预测 神经网络分支预测器 分支预测大赛 工业界支持,2年一次 * 作 业 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 在取指或译码阶段预测转移是否成功以及转移目标进行后续指令的取指 以减少指令流水线由于控制相关而堵塞 在执行阶段判断转移预测是否正确 如果猜测正确,则正常提交 如果猜测错误,则取消该转移指令及其后续指令 硬件转移预测基本思路 * 猜测依据 当前指令的地址(PC)和性质(是否转移指令) 过去转移指令历史记录 猜测内容 转移方向、转移目标地址 硬件转移预测基本原理 转移预测器 过去转移 指令记录 当前指令信息 (PC和指令性质) 转移方向 目标地址 * 分支处理机制的性能取决于 预测精度(BPA)= 设计好的预测器 预测精度越高,能抽取的并行性就越多 预测正确所付的代价:转到目标地址处执行所需的延迟 译码时根据IR内容预测:有一拍的延迟槽,在4发射情况下有4条指令的延迟槽 取指时根据PC预测:没有延迟槽,需要BTB/Trace Cache等机制 MIPS R10000无BTAC,MIPS R12000有32项BTAC 预测错所付的代价 尽量提前执行转移操作 Pentium II/III和Alpha 21264重新刷新流水线需要11周期以上 * 转移预测关键技术 如何保证准确的预测:根据记录的历史进行预测 如何记录转移历史,记录哪些转移历史 记录多少转移历史 何时更新:更新太早,转移指令也可能被取消;更新太晚,导致转移历史不准确 如何在取消猜测执行的操作时保证现场精确性 增加提交流水级,在提交时修改寄存器和内存 I/O指令的猜测执行难以取消 如何识别流水线中的指令哪些需要取消,哪些不要取消 例外取消一般在提交时,取消所有后续指令 转移取消一般在执行后,只取消部分指令 延迟槽指令的处理 每个周期多个分支预测 每周期1个预测,基本可满足4-6 发射需要的取指带宽 * 静态/动态转移预测 静态预测:总是预测转移成功或总是预测转移不成功 预测转移成功:较精确,计算转移地址需要delay slot 预测转移不成功:直接用PC+4 动态预测:根据转移指令执行历史进行预测 复杂预测技术:精确、控制复杂 混合预测:利用编译器的提示,结合动态和静态预测 * 局部转移预测 独立考虑单个循环的历史记录,寻找其中的重复性规律,并根据该规律预测未来的转移行为 对于重复性特征明显的转移指令(如循环)效果好 例子 for (I=0, I10; I++){ } 转移模式为(1111111110)n * 转移历史表BHT(Branch History Table) 用PC的低位索引,每项1位 记录同一项上次转移是否成功,表示是否转移成功 不进行地址比较检查(cache tag用于地址比较检查) 问题 对循环进行猜测时,1位 BHT引起两次猜错 循环退出时,转移方向不一致 进入循环时,和上次退出时的转移方向不一致 for (i=0;i10;i++) for (j=0; j10; j++) { …… } 利用单个分支的重复性---BHT * 两位BHT表 只有连续两次猜错,才会改变猜测方向 在前述两重循环的例子中,内循环预测准确率从80%提高到98% 4096项已经足够,和无穷项效果差不多 2位已经足够, n位 (n2)与2位效果差不多 * 在取指阶段根据当前PC值预测转移方向和转移地址 需要进行地址全相等比较 直接预测PC值而不是根据指令内容计算 失效时进行替换 减少猜测延迟---BTB * 返回地址栈 返回地址栈(Return Addresses Stack)预测返回地址 函数调用时压栈,返回时从栈顶弹出作为返回地址 针对函数调用有很高的预测准确率 * 转移指令的相关性 2位分支预测之后,预测正确率难以提高 主要原因是分支指令的相关性 If (d =10) //分支1 d = 12; If (d ==12) //分支2依靠分支1 d = 2 * Yeh和Patt分类 当前的转移依赖于两种情况: 该指令的过去m次转移记录:PHT(Pattern History Table) 程序中所有转移指令过
原创力文档


文档评论(0)