zoukankan      html  css  js  c++  java
  • 【日更计划020】数字IC基础题

    上期答案

    [37] 什么是pipeline hazard?处理器中有几种pipeline hazard?

    pipeline hazard是指由于某些原因下一条指令无法执行的情况。有三种类型的hazard:

    1. Structural Hazards:由于硬件资源不足产生的。比如如果设计结构中只有一个浮点执行单元,每次执行都需要两个周期的时间,那么当程序中出现背靠背的浮点指令时会导致流水线停止。除此之外内存和缓存的访问也会导致Structural Hazards
    2. Data Hazards:由于前后指令数据的依赖性而造成的hazard
    • A、RAW:先读后写register,ture data dependence
    • B、WAW:先写后写register,output data dependence
    • C、WAR:先写后读register, anti-data dependence
    1. Control Hazards:当碰到跳转指令时,processor会stall一个cycle。
      因为processor在处理指令时会分两个stage:取指令和解码指令。
      当一条指令进入到解码阶段时,才会被发现需要跳转,所以在取指令阶段
      的那条指令会被废掉,故浪费掉一个cycle。

    [38] 如何避免三种pipeline hazard?

    1. Structural Hazards:将一个function unit切分成更小的stage或对设计相同功能的硬件等,总之,就是让硬件资源够用。
    2. Data Hazards:A情况是真正的数据依赖,会产生hazard,可以用forwarding技术来减少或消除它;而B和C是在当指令顺序被compiler或者是硬件调整后才会出现的数据依赖。如果出现了B和C的情况,可以有一种技术来消除它,叫做register renaming。
    3. Control Hazards:可以在program中加入likely()or unlikely()来帮助compiler预测taken or not taken的可能性。另外,compiler可以通过delayed-branch的技术来消除branch hazard,但是该技术很少用在很长的pipeline中。最后,可以通过硬件的技术消除Brach hazard。以上的技术都是compiler或hardware的技术,programmer可以不关心,但好的if语句应该
      如下:
    if(unlikely(condition))  
    {  
     几率小  
    }  
    else  
    {  
     几率大  
    }  
    注意:将几率大的语句放在not taken下面,将几率小的语句放在taken下,这样会节省4个
    cycle左右(由pipeline的深度决定)。另外,还有一种写法就是将unlikely改为likely,将几率大的和几率小的对调,这种方法比第一种方法要慢或持平(至于原因有compiler的原因,有pipeline的原因,所以它依赖于compiler和chip的设计)。
    

    你答对了吗

    本期题目

    [039] 如果一个流水线由十个阶段,每个阶段需要1ns执行。假设没有hazards,那么处理100个数据需要多久?

    [040] 指令有多少种寻址方式?

    欢迎在留言区给出你的答案,正确答案将在下一期公布,或者到下面的文章获取答案

    面试攻略

  • 相关阅读:
    PLSQL中使用二维存储结构---二维数组
    重启并发管理器
    Jackson优化使用实例
    Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)
    Java泛型简明教程
    理解JSON:3分钟课程
    java 电子书下载地址
    JAVA开发中相对路径,绝对路径全面总结
    Java关键字synchronized详解
    52 个超实用网站
  • 原文地址:https://www.cnblogs.com/icparadigm/p/14087893.html
Copyright © 2011-2022 走看看