电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

实验四:控制冒险与分支预测

  • 资源ID:90852749       资源大小:429.51KB        全文页数:20页
  • 资源格式: DOC        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

实验四:控制冒险与分支预测

深圳大学实验报告课程名称: 计算机系统(3) 实验项目名称: 处理器结构实验 二 学院: * 专业: * 指导教师: * 报告人: * 学号:* 班级:*实验时间:2017年12月6日星期三实验报告提交时间:2017年12月21日星期四教务处制一、试验目的 控制冒险与分支预测了解控制冒险分支预测的概念了解多种分支预测的方法,动态分支预测更要深入了解理解什么是BTB(Branch Target Buffer),并且学会用BTB来优化所给程序利用BTB的特点,设计并了解在哪种状态下BTB无效了解循环展开,并于BTB功能进行对比对WinMIPS64的各个窗口和操作更加熟悉二、实验内容按照下面的实验步骤及说明,完成相关操作记录实验过程的截图:首先,给出一段矩阵乘法的代码,通过开启BTB功能对其进行优化,并且观察流水线的细节,解释BTB在其中所起的作用;其次,自行设计一段使得即使开启了BTB也无效的代码。第三,使用循环展开的方法,观察流水因分支停顿的次数减少的现象,并对比采用BTB结构时流水因分支而停顿的次数。(选做:在x86系统上编写C语言的矩阵乘法代码,用perf观察分支预测失败次数,分析其次数是否与你所学知识吻合。再编写前面第二部使用的令分支预测失败的代码,验证x86是否能正确预测,并尝试做解释)三、实验环境硬件:桌面PC软件:Windows四、实验步骤及说明背景知识在遇到跳转语句的时候,我们往往需要等到MEM阶段才能确定这条指令是否跳转(通过硬件的优化,可以极大的缩短分支的延迟,将分支执行提前到ID阶段,这样就能够将分支预测错误代价减小到只有一条指令),这种为了确保预取正确指令而导致的延迟叫控制冒险(分支冒险)。为了降低控制冒险所带来的性能损失,一般采用分支预测技术。分支预测技术包含编译时进行的静态分支预测,和执行时进行的动态分支预测。这里,我们着重介绍动态分支预测中的BTB(Branch Target Buffer)技术。BTB即为分支目标缓冲器,它将分支指令(对应的指令地址)放到一个缓冲区中保存起来,当下次再遇到相同的指令(跳转判定)时,它将执行和上次一样的跳转(分支或不分支)预测。一种可行的BTB结构示意图如下:在采用了BTB之后,在流水线各个阶段所进行的相关操作如下:注意,为了填写BTB,需要额外一个周期。一、矩阵乘法及优化在这一阶段,我们首先给出矩阵乘法的例子,接着将流水线设置为不带BTB功能(configure->enable branch target buffer)直接运行,观察结果进行记录;然后,再开启BTB功能再次运行,观察实验结果。将两次的实验结果进行对比,观察BTB是否起作用,如果有效果则进一步观察流水线执行细节并且解释BTB起作用原因。矩阵乘法的代码如下:.datastr: .asciiz "the data of matrix 3:n"mx1: .space 512mx2: .space 512mx3: .space 512.textinitial: daddi r22,r0,mx1#这个initial模块是给三个矩阵赋初值 daddi r23,r0,mx2daddi r21,r0,mx3input:daddi r9,r0,64daddi r8,r0,0loop1:dsll r11,r8,3dadd r10,r11,r22dadd r11,r11,r23daddi r12,r0,2daddi r13,r0,3sd r12,0(r10)sd r13,0(r11)daddi r8,r8,1slt r10,r8,r9bne r10,r0,loop1mul:daddi r16,r0,8daddi r17,r0,0loop2:daddi r18,r0,0#这个循环是执行for(int i = 0, i < 8; i+)的内容loop3:daddi r19,r0,0#这个循环是执行for(int j = 0, j < 8; j+)的内容daddi r20,r0,0#r20存储在计算resultij过程中每个乘法结果的叠加值loop4:dsll r8,r17,6#这个循环的执行计算每个resultijdsll r9,r19,3dadd r8,r8,r9dadd r8,r8,r22ld r10,0(r8)#取mx1ik的值dsll r8,r19,6dsll r9,r18,3dadd r8,r8,r9dadd r8,r8,r23ld r11,0(r8)#取mx2kj的值dmul r13,r10,r11#mx1ik与mx2kj相乘dadd r20,r20,r13#中间结果累加daddi r19,r19,1slt r8,r19,r16bne r8,r0,loop4dsll r8,r17,6dsll r9,r18,3dadd r8,r8,r9dadd r8,r8,r21#计算resultij的位置sd r20,0(r8)#将结果存入resultij中daddi r18,r18,1slt r8,r18,r16bne r8,r0,loop3daddi r17,r17,1slt r8,r17,r16bne r8,r0,loop2halt不设置BTB功能,运行该程序,观察Statistics窗口的结果截屏并记录下来。接着,设置BTB功能(在菜单栏处选择Configure项,然后在下拉菜单中为Enable Branch Target Buffer选项划上钩)。并在此运行程序,观察Statistics窗口的结果并截屏记录下来。在这里,我们仅仅观察比较Stalls中的最后两项-Branch Taken Stalls和Branch Misprediction Stalls。接下来,对比其结果。我们就结合流水线执行细节分析造成这种情况发生的原因。(30分,结果的获取10分,细节分析20分)二、设计使BTB无效的代码在这个部分,我们要设计一段代码,这段代码包含了一个循环。根据BTB的特性,我们设计的这个代码将使得BTB的开启起不到相应的优化作用,反而会是的性能大大降低。提示:一定要利用BTB的特性,即它的跳转判定是根据之前跳转成功与否来决定的。给出所用代码以及设计思路,给出运行结果的截屏证明代码实现了目标。(30分,代码及思路20,获取结果并证明目标实现10分)三、循环展开与BTB的效果比对首先,我们需要对循环展开这个概念有一定的了解。什么是循环展开呢?所谓循环展开就是通过在每次迭代中执行更多的数据操作来减小循环开销的影响。其基本思想是设法把操作对象线性化,并且在一次迭代中访问线性数据中的一个小组而非单独的某个。这样得到的程序将执行更少的迭代次数,于是循环开销就被有效地降低了。接下来,我们就按照这种思想对上述的矩阵乘法程序进行循环展开。要求将上述的代码通过循环展开将最里面的一个执行迭代8次的循环整个展开了,也就是说,我们将矩阵相乘的三个循环通过代码的增加,减少到了两个循环。比较,通过对比循环展开(未启用BTB)、使用BTB(未进行循环展开)以及未使用BTB且未作循环展开的运行结果。比较他们的Branch Tanken Stalls和Branch Misprediction Stalls的数量,并尝试给出评判。(30分,循环展开代码及思路20分,评判10分)四、结束语写下对于这次试验的所得与感想。(报告撰写质量10分)一、矩阵乘法及优化1. 不设置BTB功能,运行该程序,观察Statistics窗口的结果截屏并记录下来。2.接着,设置BTB功能(在菜单栏处选择Configure项,然后在下拉菜单中为Enable Branch Target Buffer选项划上钩)。并在此运行程序,观察Statistics窗口的结果并截屏记录下来。3.我们发现Branch Taken Stalls减少了,Branch Misprediction Stalls增加了。3.1在Cycles窗口中进行对比,我们可以发现在没有BTB的时候:3.1.1第一次分支跳转错误,但是没有进行任何记录。产生了一次控制冒险(还有一次数据冒险这里不再讨论)。3.1.2第二次分支跳转仍然错误,但是没有进行记录。又产生了一次控制冒险(还有一次数据冒险这里不再讨论)。3.2我们可以发现在有BTB的时候:3.2.1第一次分支跳转错误,但是进行了记录。产生了一次控制冒险,和一次记录BTB的阻塞。(还有一次数据冒险这里不再讨论)。3.2.2第二次由于有过记录,分支跳转正确。没有产生控制冒险,由于预测正确,也没有产生由于记录BTB的阻塞。(还有一次数据冒险这里不再讨论)。3.2.3在最后一次预测中,分支跳转错误,产生了一次控制冒险和一次由于记录BTB引起的阻塞。(还有一次数据冒险这里不再讨论)。因此,在开启BTB后,预测错误会增加两个阻塞,预测正确会减少一个阻塞。即Branch Taken Stalls减少,Branch Misprediction Stalls增加。二、设计使BTB无效的代码1. 在这个部分,我们要设计一段代码,这段代码包含了一个循环。根据BTB的特性,我们设计的这个代码将使得BTB的开启起不到相应的优化作用,反而会是的性能大大降低。1.1编写代码,计算0-18所有偶数的和 .data .text daddi r8,r0,0 # 计数器 daddi r9,r0,0 # 总和 daddi r11,r0,18 # 最大值loop: beq r8,r11,end daddi r8,r8,1 bne r10,r0,zero dadd r9,r9,r8 daddi r10,r0,1 j loopzero: daddi r10,r0,0 j loopend: halt1.2关闭BTB1.3开启BTB1.4通过反复切换跳转和不跳转,让BTB的预测错误,增大预测成本。因此BTB会比BTB效率还低。三、循环展开与BT

注意事项

本文(实验四:控制冒险与分支预测)为本站会员(jiups****uk12)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.