zoukankan      html  css  js  c++  java
  • 体系结构笔记------动态调度中的Tomasulo算法

    体系结构笔记------动态调度中的Tomasulo算法

    核心思想

    Tomasulo算法采用寄存器重命名(Renaming)方法,将记分牌中的寄存器和指令的运算内容用一大组"虚拟寄存器名"来代替(也就是下面的保留站)。
    功能部件缓冲器称为 “保留站(reservation stations)”,用来存放未决的操作数;
    指令中的寄存器被数值或者指向保留站的指针代替,这一过程称为:寄存器换名(register renaming) ;
    保留站比实际寄存器多,因而可以完成编译器所不能完成的一些优化工作;以消除WAR、WAW冒险;

    装入(Load) 和 存储(Stores)也象其他功能部件一样具有保留站(专门的缓冲器);
    运算结果无需通过寄存器, 而是通过公共数据总线(Common Data Bus)把结果广播到所有的功能部件上;
    公共数据总线:数据 + 源 (“来源”总线),如果与期望的功能部件匹配,就“写”(产生结果);传输是以广播方式进行。

    算法阶段

    Issue

    从图中的FP Op Queue中取出指令,如果保留站空闲 (无结构冒险), 控制机制发射指令,发送操作数(对寄存器进行换名,消除名相关)。

    Execution

    对操作数执行操作(EX),如果两个操作数都已就绪,就执行(RAW的处理);如果没有就绪,就观测公共数据总线等待所需结果;

    Write result

    完成执行(WB),通过公共数据总线将结果写入到所有等待的部件;标记保留站可用 (Not busy),并从CDB写入目的寄存器,当连续写同一寄存器时,只有最后一次才能写入,消除了WAW。

    保留站组成

    Op:该部件将完成的具体操作(例如, + or –)
    Vj, Vk:源操作数的实际数值,存储缓冲器(Store buffers)设有V域,存放将存储的结果;
    Qj, Qk:—将产生源寄存器值(将写的值)的保留站。
    Busy:指明保留站或FU处于忙状态
    Register result status:指明哪个功能部件将写到哪个寄存器(Qi)。如果没有将写入寄存器的未决指令,该域为空 ;
    在tomasulo算法中Qj,Qk=0 就表示操作数处于ready状态。

    load也有专门的保留站,其中address是要读取的内存地址的值。
    在基于tomasulo算法的动态调度中,指令是:按序发送、乱序执行、乱序完成的。

    小结

    相比于记分板算法,Tomasulo运行相同的程序的时间要比记分板小,主要由于对WAR与WAW的处理上,Tomasulo以换名来避免,而记分板直接是暂停等待,但是在实现上Tomasulo需要的硬件要求与成本都太高。需要大量高速的相联存储(associative buffer),而且公共数据总线是制约性能增长的瓶颈,每个CDB必须广播到多个功能部件单元(大容量、写操作密集),每个周期可以同时完成的功能部件数量可能由于单总线而受限(最坏情况为“1”);对于多个CDB来说,为完成并行相联存储,功能部件FU需要更复杂的逻辑控制;

  • 相关阅读:
    Appium Desktop使用
    mumu模拟器使用
    adb
    测试准出
    缺陷管理
    测试准入检查
    测试工作流程
    需求测试分析
    异常字符测试
    今日总结
  • 原文地址:https://www.cnblogs.com/yanzs/p/13788259.html
Copyright © 2011-2022 走看看