首页 > 其他分享 >处理器中的几种hazard

处理器中的几种hazard

时间:2024-10-10 17:18:20浏览次数:3  
标签:instruction hazard 几种 PC 指令 Opcode 处理器 冒险

什么是hazard?

  • Instructions interact with each other in pipeline ;

Structural Hazard

原因:

  • An instruction in the pipeline may need a resource being used by another instruction in the pipeline ;
  • Structural hazard occurs when two instructions need same hardware resource at same time
  • 因缺乏硬件支持而导致指令不能在预定的时钟周期内执行的情况。

实例:

    例子1:存储器发生结构冒险(存、取冲突)

  • 假设图4-27 的流水线结构只有一个存储器而不是两个存储器,那么如果有第四条指令的话,第一条指令在访问存储器的同时第四条指令将会在同一存储器中预取指令,流水线就会发生结构冒险。
  • 这种解决方式,是stall older instruction;

   例子2:寄存器发生结构冒险(读、写冲突)

  • 如图所示,读寄存器和写寄存器同时发生,产生结构冒险。

如何解决:

  • Can resolve in hardware by stalling newer instruction till older instruction finished with resource
  • A structural hazard can always be avoided by adding more hardware to design;
    • E.g., if two instructions both need a port to memory at same time, could avoid hazard by adding second port to memory;
  • 感觉还有另外一种,是通过编译器解决的,就是编译器通过分析,将调整顺序不影响执行结果的指令,如果存在结构冒险,则通过调整顺序的方式,将这种结构冒险给消除掉;

Data Hazard

原因:

  • An instruction may depend on something produced by an earlier instruction;
    • Dependence for a data value;
  • 发生在由于一条指令必须等待另一条指令的完成而造成流水线暂停的情况下。
  • 这种hazard总结起来,就是说:无法提供指令所需数据;
    • 即一条指令的执行需要等待另一条指令执行完成后所产生的数据。

实例:

  • 上例中解决方式一:bubbles

  • 上例中解决方式二:bypass

如何解决:

  • Interlock
    • Wait for hazard to clear by holding dependent instruction in issue stage;
  • Bypass
    • Resolve hazard earlier by bypassing value as soon as available;
  • Speculate
    • Guess on value, correct if wrong;
    • So far, only effective in certain limited cases:
      • Branch prediction
      • Stack pointer updates
      • Memory address disambiguation

Control Hazard

原因:

  • An instruction may depend on something produced by an earlier instruction;
    • Dependence may be for the next instruction’s address(branches, exceptions);
  • 决策依赖于一条指令的结果,而其他指令正在执行中。比如说分支跳转指令,必须等ALU给出结果后才知道该跳转到哪一条语句。
  • 因为取到的指令并不是所需要的(或者说指令地址的变化并不是流水线所预期的)而导致指令不能在预定的时钟周期内执行。

实例一:

实例二:What do we need to calculate next PC?

  • 对于Unconditional Jumps类型的指令
    • Opcode, PC, and offset
  • 对于For Jump Register类型的指令
    • Opcode, Register value, and offset
  • 对于Conditional Branches类型的指令
    • Opcode, Register (for condition), PC and offset
  • 对于all other instructions
    • Opcode and PC ( and have to know it’s not one of above )

如何解决:

  • 加入delay slot;
    • 如果不能在第二级解决分支问题(这种情况在较长的流水线中经常发生),那么分支结构上的阻塞将导致更大的速度下降。对很多计算机来说,这种阻塞的方法代价太大,因此也就产生了另外一种消除控制冒险的方法;
  • 预测
    • 总是预测发生;
    • 或者是分支预测;
    • 这里参考分支预测器的原理和实现;

标签:instruction,hazard,几种,PC,指令,Opcode,处理器,冒险
From: https://blog.csdn.net/zhangshangjie1/article/details/142755074

相关文章

  • 企业数据安全常见的几种内部威胁
    CybersecurityInsiders发布的《2023年内部威胁报告》指出,74%的组织容易受到内部威胁。内部威胁引发企业网络安全事件的平均成本、数量都在上升,但这些内部威胁没有引起企业足够的重视,往往在事发后才开始补救。人为因素是企业数据泄露主因,内部威胁和人员关系紧密,人员有意或......
  • DSP概述及应用——TMS320DM6437ZDU4、TMS320DM6437ZWT6、TMS320DM6437ZWT7数字媒体处
    概述:TMS320DM6437是一款DSP芯片,具有强大的处理能力和丰富的功能模块。TMS320DM6437采用基于超标量架构的C64x+内核,具有高效的乘法累加单元和多格式指令集,能够在单个时钟周期内执行两条指令,大大提高了运算速度和效率。TMS320DM6437采用基于超标量架构的C64x+内核,具有高效的乘法累......
  • 在Js中匿名函数的几种写法
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • C/C++ 判断计算机存储器字节序(端序)的几种方式
    字节序分为存储器字节序和网络字节序(通常采用大端),这里主要讨论的是主存储器字节序。主存是存储器中的一种,为什么只讨论主存?因为编写运行在现代主流操作系统上的程序,是没有I/O权限的。主存字节序所谓字节序就是字节排列的顺序,拿主存来说就是如果低字节存放在低地址处,就是低端......
  • Python并发编程(1)——Python并发编程的几种实现方式
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料Python并发编程是指在Python中编写能够同时执行多个任务的程序。并发编程在任何一门语言当中都是比较难的,因为会涉及各种各样的问题,在Python当中也不例外。Python提供了多......
  • LoongArch@微处理器体系结构专利技术研究方法@20241002
    微处理器体系结构专利技术研究方法第一辑:X86指令集总述 微处理器体系结构专利技术研究方法第二辑:x86多媒体指令集 微处理器体系结构专利技术研究方法第三辑:X86指令实现专利技术 ......
  • 高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?
    如果有遗漏,评论区告诉我进行补充面试官:Redis持久化有几种方式?我回答:Redis是一个高性能的键值存储系统,常用于缓存、消息队列和实时数据分析等场景。为了保证数据的持久性,Redis提供了两种主要的持久化方式:RDB(RedisDatabaseBackup)和AOF(AppendOnlyFile)。这两种方......
  • PICO 2 RP2350使用官方推荐RISC-V编译器在O3优化下的coremark跑分,与Hazard3库宣传跑分
    编译环境:WSLUbuntu22.04GCC13.2.0 Hazard3存储库https://github.com/Wren6991/Hazard3/RP2350默认频率150MHz,编译内核为其RISC-V架构内核,在此频率下实测O3等级跑分453左右,O2等级跑分429左右。在测试时,当我打开第二个核心后,并且第二个核心只用来控制led灯,此时coremark跑......
  • linux中的信号处理器函数
    信号处理器函数的设计常见的两种信号处理器函数设置全局性标志变量并退出。主程序对此标志进行周期性检查,一旦置位随即采取相应动作。信号处理器函数执行某种类型的清理动作,接着终止进程或者使用非本地跳转将栈解开并将控制返回到主程序中的预定位置。设计原则简洁性......
  • 面向对象编程中,对象的几种关系分别都是啥
    在面向对象编程中,对象之间的关系是构建复杂系统的基础。这些关系定义了对象之间如何交互和协作。以下是面向对象编程中对象的几种主要关系:1.依赖关系(Dependency)定义:一个类依赖于另一个类的定义。这种关系通常表现为一个类的方法参数、返回值或局部变量使用了另一个类。特点:......