Tomasulo 调度算法实现架构分析

news/2025/2/19 17:49:10/文章来源:https://www.cnblogs.com/devil-sx/p/18717572

虽然早在 1967 年就已经提出了 Tomasulo 调度算法 [1],但网上仍很少找到关于落到模块粒度的教程文档。从零复现一遍成本太大,因此用画原理图的方式做思想实验,尝试理解 Tomasulo 在电路上如何实现。

处理数据

首先明细几个概念

  • 指令(Instruction):包含指令类型(ADD、MUL、LD、ST 等),输入:输入寄存器地址(Src Addr) 或是 立即数,目标寄存器地址(Dst Addr)。
  • 当前指令(This Operator)以及先前指令(Operator)。标记指令的字段,可以唯一追踪到程序中的某条指令,一种方法是用在指令缓存中的地址表示。
  • 保留站(Reservation Station)的输入:包含五个字段,当前指令、依赖指令1、依赖指令2、数据1、数据2。

寄存器要重命名,可为何指令用寄存器?

原始指令中用寄存器建立图依赖关系,而寄存器建立的依赖关系并非真正的依赖关系。

比如:

  • 指令 1 -> 输出寄存器 A
  • 指令 2 -> 输出寄存器 A
  • 指令 3 <- 输入寄存器 A

可见指令3实际上依赖的是指令2的值,和指令1输出的值无关,但指令1和指令2输出共用了同一个寄存器,有可能因为伪依赖导致不能乱序执行。指令采用寄存器的方式传递指令间的信息本质时源于这符合物理描述,寄存器很容易映射到物理存储,但违背了逻辑描述。

逻辑上指令间的依赖关系用图表示,图依赖是建立指令之间的依赖(或者数据上的依赖),而非物理映射的存储地址。因此乱序思路是用指令信息表征依赖关系替代寄存器名称,这种方法叫做寄存器重命名。

实现分析

arch

这是不带 Speculative Execution 的 Tomasulo 调度硬件原理图。

Register (实现寄存器重命名功能)

寄存器重命名的实现有两个基础:

  1. 程序正确执行的判据: 乱序执行只需要保证程序执行完的状态量一致(各层 DRAM、Cache 、Register File 内的值),而中间状态变更的过程可以任意调整;
  2. 指令序列是因果序列: 后端执行的指令通过前端的 Instruction Queue 传入,Queue 表示程序是序列,同时是因果的,任意指令的输入寄存器都是由之前指令的输出寄存器所写入。或者说从依赖图转到序列的过程满足拓扑排序

只要在从 Instruction Queue 读入指令时,用表示指令的字段替换掉寄存器存下来,而由于指令是因果的,当输入新指令时其的依赖指令一定已经存储下来了。可以说 Register 存储了 寄存器 -> 指令的 映射(地址->指令内容),使用一个额外空间存储追踪这种映射关系。

图中红色绿色表示这个 entry 的值是否有效,实际上只要保证 2 ,新输入的指令所读取的寄存器一定是以及保存过的,这个标志去掉也没问题。

Reservation Station

指令是序列输入的,而依赖是图构成的,序列一定会将一些没有依赖的节点排在前面,为了让不被前面的节点阻塞流水线。需要一个存储记录住还没执行的指令,并时刻检测一但条件满足立刻执行,这便是 Reservation Station。

RS

如图是程序依赖关系,每个节点是一条指令,节点的数字代表被塞入 Instruction Queue 的顺序,灰色代表已经执行的指令,蓝色是正在执行,红色是在 RS 里。当前正在时刻 4,此时 2 和 3 号程序在站点里休息等待 1 执行完毕。

从以上分析可知,需要一个物理存储让指令们休息,还需要一个判断机制让指令们离开。通过保存前级 register 映射的指令信息并通过监听数据总线(Common Data Bus)获取当前完成的指令。

另外,由于后继资源可能阻塞(比如多个执行单元对总线资源的占用),即使执行条件就绪也不一定就能立刻执行,因此还需要一个缓存记录可以执行的指令,并通过一个调度策略从中选择指令执行。

Others

执行单元不必多说。系统中同时有多个 RS 用于给不同种类指令休息,每个 RS 中保存的指令不重叠,没有 coherence 问题,但依赖关系应该是广播的,所以通过 CMB 广播消息。同时 CMB 也解耦了输入数据和寄存器堆,类似引入了旁路,但 RS 和寄存器堆内也可能对一个数据重复更新。

综上,整个 Tomasulo 算法可以概括完成信息的映射过程:

寄存器 --(Register)--> 指令 --(Reservation Station)--> 数据 -- (执行单元) --> 数据


  1. https://en.wikipedia.org/wiki/Tomasulo's_algorithm ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/884476.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新VMware Workstation虚拟机下载并安装

[2025年]最新VMware Workstation虚拟机下载并安装 1.最新VMware Workstation下载地址 2024年5月5日之后,VMware workstation不能直接在vmware官网进行下载了,需要在broadcom博通网站上进行下载 博通收购Vmware后(将workstation免费了),如下 旧的地址点击下载的时候会跳转到…

js之prototype

var TestPrototype = function () {this.propA = 1;this.methodA = function() {return this.propA;} }TestPrototype.prototype = {methodB: function() {return this.propA;} }var objA = new TestPrototype();objA.methodA() // 1 objA.methodB() // 1JavaScript 中, 任何函…

LGP4211_1 [LNTS 2014] LCA 学习笔记

LGP4211_1 [LNTS 2014] LCA 学习笔记 本题一题多解,此处记录其树剖+线段树做法。 Luogu Link 题意简述 给出一棵 \(n\) 个结点的树,以 \(1\) 为根。令 \(dep[1]=1\)。\(m\) 次询问,每次给定 \(l,r,z\),求 \(\sum_{i=l}^r dep[\text{lca}(i,z)]\)。 \(n,m\le 5^10^4\)。 做法…

LGP4211 [LNTS 2014] LCA 学习笔记

LGP4211_1 [LNTS 2014] LCA 本题一题多解,此处记录其树剖+线段树做法。 Luogu Link 题意简述 给出一棵 \(n\) 个结点的树,以 \(1\) 为根。令 \(dep[1]=1\)。\(m\) 次询问,每次给定 \(l,r,z\),求 \(\sum_{i=l}^r dep[\text{lca}(i,z)]\)。 \(n,m\le 5^10^4\)。 做法解析 题目…

自然语言处理入门【第4章】:认知语言智能

4.1 对话与问答 4.1.1 问答系统 问答系统(Question Answering System,QA System)是人工智能与自然语言处理领域的重要研究方向,旨在通过计算机技术实现对人类自然语言提问的精准理解与高效响应。与传统的搜索引擎不同,问答系统不仅需要检索相关信息,还需对问题进行语义解…

V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库

前言 今天大姚给大家分享一个基于 .NET MAUI 的开源免费、开箱即用的UI组件库:V-Control。 V-Control项目介绍 V-Control 是一个适用于 .NET MAUI 的开源(MIT license)、免费的 UI 组件库,它提供了一组开箱即用的 UI 控件,可快速搭建面向业务的应用程序界面。.NET MAUI介绍 …

[AI/GPT/LLM] 大模型评估的综述:现状、挑战与未来方向

一、背景大语言模型(LLM)的复杂性和开放性带来了诸多评估挑战。准确、全面地评估大语言模型的性能,对于确保其在实际应用中的可靠性、安全性和有效性至关重要。 本文将深入探讨大语言模型评估的现状、挑战以及未来的发展方向,旨在为相关领域的研究人员和实践者提供有价值的…

CTF-web4

一、菜狗杯TapTapTap一个js小游戏,我们在js里面找。找一会儿可以看到一串可疑代码。把它放到控制台console上,可以看到flag位置。传入php中就能拿到flag了。二、菜狗杯化零为整看代码,我们需要传入长度为一的字符拼成“大牛”。用url编码“大牛”得到 payload:/?1=%E5&…

佐证资料

一、ABB控制系统虚拟机仿真平台 二、工作过程文件三、自己梳理纯碱控制系统系统架构图四、纯碱工艺流程梳理与学习

Win32汇编学习笔记10.OD插件

原文链接:https://www.bpsend.net/thread-223-1-1.html 筛选器异常插件 被调试程序: 📎TestUnh.zip 我们用OD条试试发现,无法断下 筛选器异常 异常产生之后 异常首先会给调试器 调试器不处理就会给 SEH , SEH 不处理的话有又给调试器, 调试器不处理的话就会给筛选器 , 筛选器…

异步接口如何做接口自动化测试?

异步接口的自动化测试与同步接口有所不同,因为异步接口在发起请求后不会立即返回最终结果,通常需要额外的机制来等待和验证结果。 以下为你详细介绍异步接口自动化测试的实现步骤和方法: 1. 理解异步接口的工作模式 在进行测试之前,需要了解异步接口的工作原理。常见的异步…

【草原之歌】:守护绿色的律动与《草原法》的力量

在广袤的地球上,有一种风景以其独有的辽阔与壮美占据着人们的心灵,那就是——草原。它不仅是大自然赋予的生态宝库,也是许多民族文化的摇篮。然而,草原的保护与管理面临着诸多挑战,因此,《草原法》应运而生,成为了守护这片绿色律动的重要法律保障。今天,让我们一同探索…