重排序缓冲区(英语:re-order buffer, ROB))可以使指令在乱序执行,之后按照原有顺序提交。
简介在最初的动态调度乱序执行机制中,主要分三个阶段:发射(issue)、执行(execute)和写结果(write Result)。Tomasulo算法则增加了一个被称为“提交(Commit)”的过程。在写结果阶段,指令的结果暂时被存储在重排序缓冲区中。随后,指令执行的结果再被储存在寄存器或主存储器中。如果其他指令急切需要此结果,那么重排序缓冲区可以直接为其传输所需的数据。
Tomasulo算法Tomasulo算法(托马苏洛算法)是IBM的Robert Tomasulo在1967年研发出来的一种用来改善处理器乱序执行的指令级并行性的硬件算法。
在处理器中,先后执行的指令之间经常具有相关性(例如后一条指令用到前一条指令向寄存器写入的结果),因此早期简单的处理器使后续指令停顿,直到其所需的资源已经由前序指令准备就绪。Tomasulo算法则通过动态调度的方式,在不影响结果正确性的前提下,重新排列指令实际执行的顺序(乱序执行),提高时间利用效率。IBM System/360 Model 91处理器的浮点运算器中率先使用了这种算法。
该算法与之前同样用于实现指令流水线动态调度的计分板不同在于它使用了寄存器重命名机制。指令之间具有数据相关性(例如后条指令的源寄存器恰好是前条指令要写入的目标寄存器),进行动态调度时必须避免三类冒险:写后读(Read-after-Write, RAW)、写后写(Write-after-Write, WAW)、读后写(Write-after-Read, WAR)。第一种冒险也被称为真数据相关(true data dependence),而后两种冒险则并没有那么致命,它们可以由寄存器重命名来予以解决。Tomasulo算法使用了一个共享数据总线(common data bus, CDB)将已计算出的值广播给所有需要这个值作为指令源操作数的保留站。该算法尽可能降低了使用计分板技术导致的流水线停顿,从而改善了并行计算的效率。1
乱序执行在计算机工程领域,乱序执行(错序执行,英语:out-of-order execution,简称OoOE或OOE)是一种应用在高性能微处理器中来利用指令周期以避免特定类型的延迟消耗的范式。在这种范式中,处理器在一个由输入数据可用性所决定的顺序中执行指令,而不是由程序的原始数据所决定。在这种方式下,可以避免因为获取下一条程序指令所引起的处理器等待,取而代之的处理下一条可以立即执行的指令。2
本词条内容贡献者为:
黄伦先 - 副教授 - 西南大学