计算机体系结构第五次实验——Branch-Target Buffers(BTB)

这篇具有很好参考价值的文章主要介绍了计算机体系结构第五次实验——Branch-Target Buffers(BTB)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本次实验的主要目的是加深对Branch-Target Buffers的理解。掌握使用Branch-Target Buffers减少或增加分支带来的延迟的情况。

实验内容:将以下程序段修改为可利用WinMIPS64模拟器运行的程序。假设R3的初始值为R2+40

branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

在使用forwarding的情况下,对比采用BTB与不采用BTB技术时流水线的变化。重点分析两种情况下每次循环的stall周期数,都是由什么原因造成的?重点分析与分支指令相关的stall。采用BTB技术时何时能够减少分支指令带来的暂停?何时会增加暂停?为什么?

实验完成情况:
因为程序段就是之前第三章第一次实验的时候要修改为WinMIPS64模拟器运行的程序,所以这里直接将修改好的文件输入WinMIPS64模拟器中。
这里先附上之前修改好的代码的截图:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

在WinMIPS64中执行这个修改好的文件:
首先是正常情况下,使用定向技术:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

执行完文件之后,查看执行周期:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

这里的分析之前也写过,这里简单复述一下,之后会进行每个循环的分析,这里的延迟对应的分别是每个循环一次的load指令导致的RAW相关带来的stall,一次是分支指令要在ID阶段完成目标地址和转移条件的计算,而要用到前一条指令的结果还没有计算出来带来的stall。程序总计循环了十次,所以有20次的RAW stall。另外因为分支指令这里采用了预测转移失败的方式进行处理,前九次转移成功,所以执行的后续指令被取消,带来了九次的控制相关的stall。

接下来,使用BTB技术:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

执行完文件之后,查看执行周期:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

这里也是先对程序执行结果进行一个简单的综述,之后再进行每个循环的分析,20次RAW相关导致的暂停和之前没有使用BTB时候是一样的,之后总共有4个周期的stall,前两个周期是第一次分支指令出来,这个时候BTB表内没有内容,那么就是默认继续执行,PC+4地址的指令,但是因为后续发现转移成功,所以之前的下一条指令的IF周期白干了,并且需要一个周期重新取指,把对应的分支指令和对应的目标地址存在BTB表中,所以带来了两个周期的浪费,对应上图中的branch taken stalls,而后的多个循环中,因为都是成功预测到了转移成功,所以没有周期浪费,直到最后一个周期,预测转移但是实际没有,所以又是两个周期的浪费。

接下来,以循环为单位,进行细致分析:
第一个循环:
不采用BTB的情况下,第一个周期分别因为load互锁,和分支指令ID段计算目标地址和转移条件需要的数据没有计算完成,所以有两个RAW相关,因为采用了预测分支转移失败,所以也有一个周期的浪费,即对应的branch taken stalls:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

而采用了BTB的情况下,除了两个RAW相关和之前一样,这里一开始BTB表为空,预测不转移,所以这里出现了halt指令,也就是出循环后的指令,而在前面的转移指令转移成功之后,需要取消指令,并且把这条分支指令和对应的目标地址存到BTB表中,所以红箭头所指的就是BTB导致的两个branch taken stalls(中间那个只是RAW暂停的顺延):
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

此时BTB表发生了变化(这里不考虑可选域的部分,因为对实验没有关系):
从一开始的全空:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

到现在的:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

接下来,第二个循环:
不采用BTB的情况和之前没有区别。

采用BTB的情况下,除了两个RAW相关不变之外,因为此时的BTB表中已经有了对应分支指令地址的选择了,所以当同样的分支指令再次执行的时候,这次默认的就是转移成功,提前获得对应目标地址,所以可以看到这个周期的时候没有控制相关导致的暂停:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

因为预测正确了,所以BTB表不会有变化。

然后从第三个循环开始到第九个循环,都是和第二个循环一样的情况,这里就不进行过多的说明了。

到最后的循环的第十个循环的时候:
没有采用BTB的情况,两次RAW相关都一样,然后是转移指令这里,因为这里循环结束转移失败,刚好编译器用的是预测转移失败,所以相当于一个周期没有浪费直接就可以直接之后最后的halt指令:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

而采用了BTB的情况,除了两次RAW相关之外,这里还有两个周期的branch misprediction stalls,因为之前的BTB表中是有这个分支指令和对应的目标地址的,所以这里依旧是预测转移成功,但是因为这里转移实际是失败了的,所以需要取消指令,重新取指,并且把BTB表中对应的指令项删除,浪费了两个周期:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

此时BTB表的变化:
从之前的:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

到现在的全空:
branch target buffer,课程作业记录博客,github,人工智能,BTB,体系结构

总结:
BTB技术可以再循环执行的过程中减少分支指令带来的暂停,在实验过程中,因为这时分支指令一直在转移,而BTB中又刚好有这条指令对应的目标地址,默认转移成功的情况下可以一个周期都不浪费,减少分支指令带来的暂停,但是在循环刚开始的时候和循环结束的时候会导致暂停周期的增加,因为此时分支指令是否转移出现了变化,BTB方式给出了错误的判断,需要取消指令,重新取指并且修改BTB表,这会导致两个周期的控制相关暂停。

通过实验,我们可以发现:在预测正确的情况下,可以有效减少分支指令带来的暂停,因为这样可以在取指阶段的时候就提前判断出分支指令是否转移,转移的目的地址是哪里,这样就可以在下一个周期直接开始下一个指令的取指,不需要等到ID段计算转移条件和转移地址再取指,所以可以减少分支指令带来的暂停。在预测失败时候增加暂停,这是因为预测失败之后需要重新取指,并且把这个转移地址连同下一个PC送到转移目标缓冲器中。所以不仅没有节省下来之前分支指令的一个周期的暂停,还需要额外的周期进行BTB表修改。文章来源地址https://www.toymoban.com/news/detail-763422.html

到了这里,关于计算机体系结构第五次实验——Branch-Target Buffers(BTB)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】—— 详解计算机体系结构

    前言: 在之前,我们已经对Linux环境开发的基本工具进行了详细的学习。接下来,我们将要学习的第一大块便是关于计算机体系结构的知识!! 目录 前言 (一)冯诺依曼体系结构 基本介绍 木桶原理 数据流动过程 (二)操作系统 1、概念 2、感性理解 总结 在我写的《操作系

    2024年02月09日
    浏览(50)
  • 第一章、计算机组成与体系结构

    第一节.数据的表示   二进制转十进制:权值相加。即一个二进制数为1010.1,转为十进制为: $$ 小数点左边从0开始幂,小数点右边就是-1   十六进制转十进制:同样的,权值相加。即一个十六进制为100121,转为十进制为: $$ 十进制转二进制:整数位用短除法,除二取余,直到

    2024年02月03日
    浏览(56)
  • 【计算机体系结构】什么是流水线?

    👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容  目录 参考资料 前言 流水线 提高流水线效率的技术 超级流水线 超标量 分支预测 乱序执行 (21条消息) 流水线、超流水线、超标量(superscalar)技术对比(转)_沉迷科研刘

    2024年02月03日
    浏览(60)
  • 【计算机组成原理与体系结构】指令系统

    目录 一、指令概述 二、指令分类 三、扩展操作码 四、指令寻址 五、数据寻址 六、x86汇编指令 计算机指令 :指示计算机硬件进行某种操作的命令 机器指令 :使用二进制编码来表示的计算机指令 能被计算机硬件系统识别并执行的特殊的0/1代码串(机器码) 指定了计算机硬

    2024年02月08日
    浏览(70)
  • 计算机网络第一章——计算机体系结构(上)

    提示:剑未佩妥,出门已是江湖;酒尚余温,入口不识乾坤,愿历尽千帆,归来仍是少年。 电信网络就是通过电话线连接起来的一个网络,有线电视网络通过电缆或者光缆将已经录制好的电视节目发给千家万户,计算机网络是通过各个结点,这个结点包括终端的电脑,手机,

    2024年02月06日
    浏览(63)
  • 【计算机组成原理与体系结构】控制器

    目录 一、CPU的功能与基本结构 二、指令周期的数据流 三、数据通路 四、时序控制 CPU的功能: 指令控制 :完成取指令、分析指令和执行指令的操作,即程序的顺序控制。 操作控制 :一条指令的功能往往是由若干操作信号的组合来实现的,CPU管理并产生由内存取出的每条指

    2024年02月08日
    浏览(47)
  • 【计算机体系结构】Cache性能分析实验报告

    原文档下载: https://download.csdn.net/download/weixin_56213139/87384692 一、 实验目的 (1)加深对Cache基本概念、基本组织结构以及工作原理的理解。 (2)掌握Cache容量、相关度、块大小对Cache性能的影响 (3)掌握降低Cache不命中率的各种方法以及它们对提高Cache性能的好处 (4)理解

    2024年02月03日
    浏览(52)
  • 中级软件设计师备考---计算机组成与体系结构3

    计算题 概念题 计算可靠度 码距:是指两个码字之间的不同位数。例如,1010和1111之间的码距是2,因为它们在第二位和第三位上不同。在信息传输中,码距越大,就越容易检测和纠正错误。 在一个码组内为了检测e个误码,要求最小码距d应满足:d=e+1 在一个码组内为了纠正

    2023年04月15日
    浏览(45)
  • 中级软件设计师备考---计算机组成与体系结构1

    对于n位二进制数,原码、反码和补码的表示范围如下: 原码:用最高位表示符号位,0表示正数,1表示负数。n位二进制数的原码表示范围为:-(2 n-1 -1) ~ 2 n-1 -1。 反码:正数的反码与原码相同,负数的反码是将原码中除符号位外的所有位取反。n位二进制数的反码表示范围

    2023年04月09日
    浏览(61)
  • 计算机体系结构实验三——流水线中的相关

    答:在WinDLX中执行程序段1,这里要声明的是文件需要以S文件的形式保存,TXT文件winDLX好像读不进去。 导入之后,程序段顺利运行,可以通过statistics查看执行周期数,由下图可知,执行周期数为130个周期。 分析程序中出现的暂停: 程序中出现的第一个暂停是数据相关,因为

    2023年04月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包