首页 > 其他分享 >3.6 基于硬件的前瞻执行

3.6 基于硬件的前瞻执行

时间:2023-11-23 22:57:19浏览次数:31  
标签:硬件 ROB 3.6 指令 处理器 执行 前瞻

3.6 基于硬件的前瞻执行

Tomasulo算法通过寄存器重命名、设置预留站和使用公共数据总线等方式,优化指令的并行执行,能够处理数据依赖,但在处理控制依赖时存在局限。如果存在分支带来的控制依赖,Tomasulo算法需要等待分支指令的执行结果,(或者不等待,但可能导致中断的不精确,乱序执行本身就会导致中断不精确,要实现完全的精确,就需要额外的机制辅助)。

硬件前瞻技术可以通过分析和预测指令的执行结果,提前执行那些有用的指令,从而减少处理器的空闲时间,并提高整体性能,弥补Tomasulo算法(和Scoreboarding)的不足。

硬件前瞻技术主要基于三点重要思想:

  1. 动态分支预测用于选择执行哪些指令

  2. 推测允许在控制依赖项解决之前执行指令(具有撤销错误推测序列的影响的能力)

  3. 进行动态调度,以应对基本块不同组合方式的调度(意思是硬件前瞻能够跨越基本块的边界进行调度,没有硬件前瞻的动态调度只能在基本块内部进行部分重叠的调度,因为它需要在实际执行后续基本块中的任何指令之前先解析分支指令。基本块是指程序中单入口单出口的代码块,可以理解为for循环的一块或者if-else的两块)

硬件前瞻根据预测来选择何时执行指令,一旦操作数可用就立刻执行计算。为了扩展Tomasulo的算法以支持推测,我们必须将指令结果旁路(这是推测执行指令所需的)与指令的实际完成分开。通过这种分离,我们可以允许一条指令执行并将其结果旁路到其他指令,而不允许该指令执行任何无法撤消的更新,直到我们知道该指令不再具有不确定性。当一条指令确定后再更新寄存器/存储器,这叫做指令提交

推测后的关键思想是允许指令乱序执行(不用管前面分支指令的结果出来了没有),但强制顺序提交,防止不可挽回的动作(状态更改、触发异常)。因此就引入重排序缓冲(Reorder Buffer, ROB)这个硬件结构。详细可参考不精确中断文章。(Smith 和 Pleszkun, 1985)(注意一下:硬件前瞻技术本身不直接解决中断精确性的问题。硬件前瞻主要用于预测指令的执行结果,并提前执行有用的指令,以提高处理器效率。它更多地关注于指令的执行流程和优化。)

 

ROB主要包含四个信息:指令类型,目的字段、值字段和就绪,“Figure 3.11” (Hennessy 和 Patterson, p. 185)展示了进行硬件前瞻拓展后的Tomasulo结构,去处理Store Buffer。上往下数据依次从新变旧,因此数据先从ROB拿,没有再找register。拓宽CDB还可以支持多发射。

指令执行的4个步骤:

  1. Issue:ROB与保留站都有空才发射;

  2. Execute:操作数都可用时执行,否则监视CDB,避免RAW;

  3. Write Result:将结果与ROB标签写在CDB上,写到ROB与需要的保留站上;对于Store指令,如果要存的值就绪了,就存入,否则监视CDB;

  4. Commit:分三种情况,完成后都需要清除ROB对应条目。ROB满了就要停止取指令直到有空。

    1. 正常提交:当指令到达ROB头部且结果已经写回ROB时,用结果更新寄存器;

    2. 提交存储指令:类似正常提交,不过更新的是存储器;

    3. 分支预测错误:ROB被刷新,重新从分支后续正常指令开始执行。

 

“Figure 3.14” (Hennessy 和 Patterson, p. 191)非常重要,具体讲清楚了各种操作。具体不同体现

  1. Issue的时候需要多考虑一次ROB中的数据是不是有效的?有效的话直接从ROB里面取(ROB数据比寄存器新);

  2. 增加了Commit部分的判断;

总而言之,硬件前瞻技术能够带来一下四点好处:

  1. 提高处理器效率:通过预测指令的执行结果,硬件前瞻技术能够提前执行有用的指令,避免等待无用指令执行完成的时间,从而显著提高处理器的运算效率。

  2. 优化指令执行顺序:硬件前瞻技术可以分析和预测数据依赖性和控制依赖性,优化指令的执行顺序,使得处理器能够更加高效地利用资源。

  3. 减少处理器空闲时间:通过提前执行有用的指令,硬件前瞻技术减少了处理器的空闲时间,从而提高了处理器的整体性能。

  4. 支持更复杂的任务处理:硬件前瞻技术能够处理复杂的数据依赖和控制依赖场景,使得处理器能够更高效地处理复杂任务,满足不断增长的计算需求。

标签:硬件,ROB,3.6,指令,处理器,执行,前瞻
From: https://www.cnblogs.com/panpanda07/p/17852710.html

相关文章

  • 硬件驱动为什么要有WHQL数字签名
    硬件驱动要有WHQL数字签名才能实现正常安装、启动、运行,并实现驱动静默安装。目前的桌面操作系统中,Windows系统市场占有率处于优势,Windows的各个版本的系统加起来几乎占领了大部分市场。所以很多工业和行业的硬件设备都要考虑兼容在Windows系统上使用,这个使用过程中难免涉及设备的......
  • 转载:基于WDF的PCI/PCIe接口卡Windows驱动程序(5)-如何为硬件移植驱动程序
    原文地址:http://www.cnblogs.com/jacklu/p/6139347.html如果你觉得这篇博客对你的项目有用,请引用以下论文:MengShengwei,LuJianjie.DesignofaPCIeInterfaceCardControlSoftwareBasedonWDF.FifthInternationalConferenceonInstrumentationandMeasurement,C......
  • ogre_v13.6.1的Tutorial例子
    这里使用的是Ogre官网提供的预编译的ogre-sdk-v13.6.1-msvc141-x64,假设解压在E:\ogre-sdk-v13.6.1-msvc141-x64,环境变量设置OGRE_HOMEe:\ogre-sdk-v13.6.1-msvc141-x64OGRE_CONFIG_DIRe:\ogre-sdk-v13.6.1-msvc141-x64\binPATH添加:%OGRE_HOME%\bin VC2019C++控制台......
  • 阿里云卡片式硬件终端ASC01使用体验
    大概今年三月份的时候,我收到一条短信说阿里云搞活动,本来这种短信我不会理会的,但是那天可能太闲了,于是点开看来看,结果就看到了一个只卖99元的卡片电脑(原价1000)。当时我就和我同学一起买了一个。  买回来后,发现只有一个巴掌大的合金卡片,手感质感真的非常好,上面有两个typeC接......
  • 轻松定位硬件故障方法-日志分析
    同事发现某台机器上message日志数量突然暴增,简单查看了下有内存相关的报错,所以转交给我来查看。Message日志进入服务器查看message日志,先看看同事说的告警到底是什么,如下图:还真是,通道3,第一个槽位的内存发生故障了。但是,我只知道A1/B1/A2/B2,所以我还是继续。Ipmitool工具不论怎......
  • opengl开发:win11已阻止应用程序访问图形硬件如何处理?
     开发中出现这种问题: 请到设置里面搜索:图形设置,浏览,加入exe,选择选项然后设置。不要选择让windows决定即可。 ......
  • 硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析
    前言  做硬件做系统做驱动,很难从核心板做起,所以我们先依赖核心板,分析底板周围的电路,然后使用AD绘制原理图和设计PCB,打样我司测试底板,完成硬件测试,再继续系统适配,驱动移植,从而一步一步完善成为一个功能完善的底板,且搭载了我们跳完的系统和驱动。  本篇文章,先从底板的电源电......
  • 3.6 Windows驱动开发:内核进程汇编与反汇编
    在笔者上一篇文章《内核MDL读写进程内存》简单介绍了如何通过MDL映射的方式实现进程读写操作,本章将通过如上案例实现远程进程反汇编功能,此类功能也是ARK工具中最常见的功能之一,通常此类功能的实现分为两部分,内核部分只负责读写字节集,应用层部分则配合反汇编引擎对字节集进行解码,此......
  • DCMTK3.6.5编译说明(ChatGPT翻译)
    DICOM工具包(DCMTK)安装先决条件DICOM工具包(DCMTK)需要使用C++编译器进行编译。我们建议使用GNUC++编译器的版本高于4.2.1(在此版本的开发中,大部分工作是在DebianLinux上使用GNUC++6.3.0完成的)。该软件也已知可以使用SUNProC++编译器、Clang和MicrosoftVisualStudio进行编译......
  • 硬件开发笔记(十一):Altium Designer软件介绍、安装过程和打开pcb工程测试
    前言  前面做高速电路,选择是阿li狗,外围电路由于读者熟悉AD,使用使用ad比较顺手,非高速电路就使用AD了,其实AD也可以做高速电路,由于笔者从13年开始做硬是从AD9开始的,所以开始切入AD做硬件软件学习成本会低很多。 AltiumDesigner简介  AltiumDesigner是原Protel软......