zoukankan      html  css  js  c++  java
  • 指令级并行:动态调度技术

    动态调度技术用于实现基本块内并行。即保持控制相关,以避免控制冒险产生。其基本思想是将取数段ID拆成发射段IS和取数段OF,用发射(流出)段处理结构冒险,用取数段处理数据冒险。操作数就绪的指令优先通过取数段,以实现顺序到乱序的转换。

    动态调度实现的基本要求是:用指令窗口提供选择平台,并且保持指令的异常行为,当然我们允许异常推迟产生。采用动态调度技术后,各执行部件的时延可以不同,因此缩短了指令周期;同时,属于不同功能部件的多条指令可以同时执行,提高了并行度。

    动态调度技术的常用调度算法主要有记分牌算法和Tomasulo算法。

    记分牌算法

    记分牌动态调度的核心思想是:操作数就绪的指令优先执行,冒险全部用阻塞法处理。具体而言,IS段在没有结构冒险也没有WAW冒险时发射指令,否则阻塞;OF段在指令所有源操作数就绪时令部件读OPD;EX段部件进行操作;WB段在无WAR冒险时写结果,否则阻塞。

    所谓记分牌,其本质时一个状态记录控制器,用状态表记录指令的执行状态、部件的工作状态和REG的状态,根据状态表检测冒险并控制部件操作。指令状态表中,对每条指令,记录它执行到了哪个流水段。功能部件状态表中,为每个功能部件设置一行,其中包含这个部件是否忙碌、工作内容(指令类型)、操作数(寄存器编号),同时还需要为源操作数准备一个就绪状态位(表示操作数就绪并且未被执行部件取走)和一个来源部件名(若操作数未就绪,则此处记录哪个部件将产生这个操作数)。

    Tomasulo 算法

    记分牌调度只是引入了乱序执行,其对所有的冒险都采用阻塞法处理。Tomasulo算法在冒险处理上采取更加巧妙的机制。Tomasulo算法中操作数一旦就绪立即执行指令,其采用转发法获取操作数,而非通过读寄存器来获取;同时,采用寄存器重命名技术来消除读后写WAR和写后写WAW冒险。

    Tomasulo沿用了记分牌中在IS段处理结构冒险,OF段处理数据冒险的方法。但其将记分牌部件细化,拆分为保留站RS、取缓冲FLB、存缓冲SDB和寄存器组FLR。保留站中保存经过换名后的指令,在操作数就绪时送给ALU执行;FLB中保存经过换名后的取数指令,就绪后控制MEM读。ALU执行和MEM读结果送上公共数据总线CDB,需要这个结果的部件自行获取之。因此,WB段本质上时通过寄存器组FLR自行获取CDB上的结果来实现的,存数是通过SDB中的指令就绪后控制MEM写入来实现的。

    Tomasulo算法中,各流水段的功能总体与记分牌类似。IS段在没有结构冒险时发射指令,并通过寄存器重命名消除WAR冒险和WAW冒险。OF段被隐含,其内容为RS/FLB/SDB监视CDB,在CDB上有所需数据时接收之。EX段时,RS/FLB在部件空闲、OPD就绪时控制操作实现。WB段中,等待结果的部件接收CDB上的结果数据,SDB在地址数据就绪时控制访存操作实现。

    与记分牌不同,Tomasulo算法的缓冲器中对于操作数要么保存值,要么保存其值来源的保留站(或FLB)站号。正因此,在指令IS的时刻后,其来源的寄存器编号就已经失去意义,其值已经确定,只不过有时需要延迟一段时间才能产生罢了。这是寄存器重命名技术实现的关键,也是转发解决RAW冒险的关键。对于WAW冒险,在后一条指令发射时,直接覆盖掉FLR中旧的来源站号Qi即可,因为需要它的指令都已经发射,关联关系已经被确定,后面的指令需要的值都是由新的来源站号产生的。

    从结构上分析Tomasulo和记分牌的不同之处,由于每个缓冲器都有它的长度,而IS段阻塞当且仅当其所需的缓冲器已满,因此可以同时发射到缓冲器中的指令数是记分牌的m倍。由于RS、FLB、SDB分离,操作分配和冒险检测都得到了简化。操作数直接以值或地址的形式保存在缓冲器中,不需要在使用时临时读取FLR,这样有利于转发的实现,同时实现了寄存器重命名技术,解决了WAR冒险。

    总结Tomasulo算法对数据冒险的处理,对于写后读RAW,源操作数部件FLR的忙位Bs=1时存在冒险,此时将该FLR的来源站号Qi抄到当前指令的缓冲器的对应源操作数的来源站号Qj/Qk中,由于数据未就绪,这条指令会等待,直到这个来源站的结果产生并送上CDB时,该指令缓冲器收数据改状态,RAW冒险就此消除。对于读后写WAR,指令有源操作数时都需要警惕,方法是,在该源操作数Bs=0时赶紧把值取走,Bs=1时把产生部件站号取走,这样后面的写入指令就不会影响到本条指令的源操作数,也就避免了乱序导致的结果错误。对于WAW,当目的操作数部件忙位Bs=1时,意味着上一个结果还没有产生,需要警惕本次结果先产生而上次结果后产生导致最后的结果等于旧结果而不是新结果的情况,因此,直接用本条指令的站号覆盖到FLR中对应行的来源站号上,这样保证最后只有新的指令能实现FLR的写入。

  • 相关阅读:
    android 自定义dialog 易扩展
    android 圆角item shape
    模板方法模式
    观察者模式
    工厂方法模式(选自《设计模式之禅》)
    单例模式
    如何快速创建静态WEB站点
    React Native 插件系列之lottie-react-native
    JavaJavaScript小问题系列之JSON解析
    React Native 插件系列之PushNotificationIOS
  • 原文地址:https://www.cnblogs.com/mollnn/p/14773394.html
Copyright © 2011-2022 走看看