超标量处理器中的分支预测实现

2024-04-12 15:36

本文主要是介绍超标量处理器中的分支预测实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 超标量的分支预测与标量分支预测的不同点:
    • 在取指令时给出一个地址,会从 I-Cache 中取出多条指令,这些取出的指令组成了一个指令组(fetch group);
    • 处理器会自动根据指令组中的指令个数,调整取指令的地址,用来进行下个周期的取指令。
    • 因此超标量处理器中的取指令地址并不是连续的,每次增加的值等于指令组的字长,送入到I-Cache中取指令的地址其实只是指令组中第一条指令的地址而已。
    • 如果此时仍旧只是使用取指令时的地址(也就是PC值)进行分支预测,那么就相当于只是对指令组中的第一条指令进行了分支预测,而指令组中后面的指令根本就没有顾及到,使超标量处理器无法从分支预测中获得太大的好处。
  • 解决方式之一:对取指令进行限制;以4-way超标量处理器为例; 
    • 约束每次取指令位于4B对齐的边界内,此时可以使用PC[31:4]来寻址分支预测器;
    •  分支预测器中,记录这4条指令中,第一个分支指令的信息即可;因为大部分情况下,每个4B对齐的四条指令中,最多也就存在一条分支指令;
    • 此时还需要在分支预测器中,记录分支指令的位置,防止错误使用;
      • 如下图所示,在如下的4B对齐的指令中,此时取指令的PC值位于branch之后,那么这个pc就不应该使用分支指令的预测信息
      • 要想知道该信息,就需要在BTB中,记录分支指令的偏移值;
  • 解决方式之二:不进行限制,全部进行分支预测;
    • 此时没有对齐限制,需要对所有的指令,进行分支预测;
    • 第一个预测跳转的分支指令的目标地址,作为下一个周期取指令的地址;
    • 取指令阶段使用的 PC 值只给出了指令组中第一条指令的 PC 值,需要使用三个加法器来实现 PC+4、PC+8 和 PC+12 的功能;
    • 由于对目标地址的预测来说,需要在一个周期内提供四个PC值对应的目标地址,这就相当于需要BTB支持四个读端口,即使可以采用交叠(interleaving)的方式来避免真正的多端口,但是考虑到在使用过程中,最多只会使用其中的一个端口的值,所以这种方式对于硬件的利用效率是很低的。
  • 其他方式:
  1. 进入icache之前,预解码,这样取出来之后,马上就可以识别出分支指令,快速计算出跳转目标地址;当然,如果是return类型的指令,这种方式不行;
  2. 不一定在一个周期得到分支预测结果,可以这样做, 降低设计复杂度:
    1. 方向预测和目标地址预测串行,在方向预测完成后,再利用其结果信息进行目标地址的预测,可以避免对BTB部件的多端口需求;

  • 扩展:interleaving的处理,需要一个cycle内的pc值,译码到不同的bank, 从而不产生冲突,如果pc值做了hash, 但是又希望不同的pc hash后, 在同一个cycle内不会产生bank冲突,如何解决?
    • 最简单的方式,将PC的[3:2]作为寻址低位即可;

这篇关于超标量处理器中的分支预测实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897534

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.