体系结构笔记------动态调度中的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需要更复杂的逻辑控制;

原文地址:https://www.cnblogs.com/yanzs/p/13788259.html