当前位置: 首页 > news >正文

HNU计算机结构体系-实验2:CPU动态指令调度Tomasulo

文章目录

  • 实验2 CPU动态指令调度Tomasulo
    • 一、实验目的
    • 二、实验说明
    • 三、实验内容
      • 问题1:
      • 问题2:
      • 问题3:
      • 问题4:
      • 问题5:
    • 四、思考题
      • 问题1:
      • 问题2:
    • 五、实验总结

实验2 CPU动态指令调度Tomasulo

一、实验目的

熟悉Tomasulo模拟器同时加深对Tomasulo算法的理解,从而理解指令级并行的一种方式-动态指令调度。

掌握Tomasulo算法在指令流出、执行、写结果各阶段对浮点操作指令以及load和store指令进行什么处理;给定被执行代码片段,对于具体某个时钟周期,能够写出保留站、指令状态表以及浮点寄存器状态表内容的变化情况。

二、实验说明

学习ScoreBoard和Tomasulo算法,并且进行Tomasulo算法的模拟实验,同时熟悉动态指令调度相关知识

三、实验内容

Tomasulo算法模拟器

使用模拟器进行以下指令流的执行并对模拟器截图、回答问题

L.D   F6, 21(R2)
L.D   F2, 0 (R3)
MUL.D  F0, F2, F4
SUB.D  F8, F6, F2
DIV.D  F10,F0, F6
ADD.D  F6, F8, F2

假设浮点功能部件的延迟时间:加减法2个周期,乘法10个周期,load/store2个周期,除法40个周期

问题1:

分别截图(当前周期2和当前周期3),请简要说明load部件做了什么改动

答:

周期2:占用Load2部件,Busy置位;R2就绪,将地址 R[R2]+21 保存在Load1部件的地址寄存器

image-20231209104014093

周期3:第一条LD指令执行完毕,地址 M[R[R2]+21] 计算完成,Load1部件将从存储器读到的值保存在Load1部件寄存器;R3就绪,将地址 R[R3]+0 保存在Load2部件地址寄存器

image-20231209104037484

寄存器重命名:一个新的指令流出,进入保留站之后,它首先就要检查操作数,在寄存器中查看对应的操作数有没有,如果有的话自然万事大吉直接读取就可以,如果是基于其他运算指令得到的,并且还没有完成,寄存器中此时就没有数值,此时对这个操作数进行标记,标记这个计算指令对应的保留站编号,对于源操作数,也需要改写成这个指令的保留站编号,这时就完成了寄存器的重命名。

寄存器重命名的好处在于它允许多个指令并行地使用同一个物理寄存器的多个重命名副本,避免了数据相关性的延迟和资源竞争。这可以提高指令级并行性,并允许更多的指令同时执行,从而提高整体性能。

问题2:

请截图(MUL.D刚开始执行时系统状态),并说明该周期相比上一周期整个系统发生了哪些改动(指令状态、保留站、寄存器和Load部件)

答:

MUL.D刚开始执行时是第六个周期:

image-20231209104053775

其上一个周期为第五个周期:

image-20231209104104425

主要变化如下:

  • 指令状态:发射第六条ADD指令,同时第三条、第四条指令进入执行状态
  • 保留站:新发射的ADD.D指令占用Add2保留站,进入执行的指令MUL.D和SUB.D开始执行,时间开始倒计时
  • 寄存器:新发射的指令ADD.D指令等待F8寄存器,F6的状态变成Busy, 原因是新发射的ADD.D指令写入F6
  • Load部件:无变化

Tomasulo算法采用了保守的策略,确保结果先写入寄存器文件或数据存储器,然后在下一个周期才允许其他指令读取这个结果。这样可以确保后续指令读取到的是正确的、已经更新的值,保持数据的一致性。

问题3:

简要说明是什么相关导致MUL.D流出后没有立即执行

答:

因为其所需要的一个操作数F2还没有写回,即与L.D F2 0(R3)之间的RAW相关

Tomasulo算法通过动态调度的方式,将指令按照其操作数的可用性进行调度。当一个指令需要等待一个操作数时,它会被放置在调度队列中,直到所有操作数都可用。这种方式可以有效地隐藏RAW依赖的延迟,因为指令可以在操作数就绪后立即被调度执行。

问题4:

请分别截图(15周期和16周期的系统状态),并分析系统发生了哪些变化

答:

第十五周期:

image-20231209104118852

第十六周期:

image-20231209104127385

主要变化如下:

  • 指令状态
    • 第十五个周期时MULT指令刚执行完毕
    • 第十六个周期时将MULT指令的执行结果写回到F0寄存器中
  • 保留站
    • 第十五个周期时仍在执行MULT指令
    • 第十六个周期时释放保留站,CBD将结果广播到指令DIV.D对应的保留站
  • 寄存器
    • 第十五个周期时F0结果还未写回
    • 第十六个周期时释放保留站,CBD将结果广播到寄存器
  • Load部件:无变化

问题5:

回答所有指令刚刚执行完毕时是第多少周期,同时请截图(最后一条指令写CBD时认为指令流执行结束)

答:

所有指令执行完毕是第57个周期,DIV.D是执行的最后一条指令, 在第56个周期执行完毕,在第57个周期开始写结果

image-20231209104223213

四、思考题

问题1:

Tomasulo算法相比Score Board算法有什么异同?(简要回答两点:1.分别解决了什么相关问题,2.两者分别是分布式还是集中式)

答:

Tomasulo

  • 特点:分布式;指令状态、相关控制和操作数缓存分布在各个部件中(保留站)
  • WAR相关:使用RS的寄存器或指向RS的指针代替指令中的寄存器-寄存器重命名
  • WAW相关:使用RS中的寄存器值或指向RS的指针代替指令中的寄存器
  • RAW相关:检测到寄存器就绪即没有冲突再读取操作数,进入执行阶段
  • 结构相关:有结构冲突不发射
  • 结果Forward:从FU广播结果到RS和寄存器

Score Board

  • 特点:集中式;指令状态和相关控制都在记分牌处理
  • WAR相关:对操作排队,仅在读操作数阶段读寄存器
  • WAW相关:检测到相关后,停止发射前一条指令,直到前一条指令完成
  • RAW相关:检测到没有冲突(寄存器就绪)再读取操作数,进入执行阶段
  • 结构相关:有结构相关不发射
  • 结果Forward:写回寄存器接触等待

问题2:

Tomasulo算法是如何解决结构冒险、RAW、WAR和WAW相关的数据冒险?

答:

  • 结构相关: 所有功能部件都完全流水化, 功能部件有序访问存储器,有结构冲突不发射
  • RAW相关:Tomasulo通过监测Common Data Bus跟踪每个源操作数当前是否可用,仅当所有源操作数可用时才允许指令进入执行阶段
  • WAR,WAW相关:Tomasulo使用硬件寄存器重命名技术, 以及在发射阶段时, RS空闲才发射指令和操作数

WAW相关:

Tomasulo算法可以避免WAW相关,原理是前一个指令先进功能单元,紧接着对应的目标寄存器的标识就修改为了这个保留站的编号,接下来,第二个指令进入功能单元,目的寄存器的标识再次修改成第二个,这时即便是第二个指令先完成并写回,前一个指令再算好了也不会改变寄存器了,因为在CDB通知各个功能单元的时候,对应的寄存器只会响应第二个指令完成时传递发出的CDB信号。
举例说明:修改模拟器中的默认指令,将最后的加法指令的目的寄存器调整为F12,此时最后两条指令之间就产生了WAW相关,因为除法指令的执行时间会更长,如果不进行处理的话,就会出现除法指令执行——加法指令执行——加法指令完成写回——除法指令完成写回的情况,那么最后F12的结果就会是除法指令的结果,但是这显然和程序想表达的意思不一致。

image-20231209104237003

而通过使用tomasulo算法,我们可以看到在第五个周期的时候,除法指令流出,进入保留站,F12寄存器保留了除法指令的保留站编号:

image-20231209104246075

在第六个周期的时候,加法指令流出,此时F12的寄存器更改标识为加法指令对应的保留站编号:

image-20231209104256453

那么此时第一条指令什么时候完成就已经不重要了,F12对应的寄存器只会在加法指令完成之后,响应CDB信号读取数据,可以看到在加法指令完成的第十一个周期,寄存器F12中就获取了数据:

image-20231209104308559

而继续执行程序到最后除法指令完成,可以看到最后的除法运算完成之后,F12的寄存器数据也没有改变,说明Tomasulo算法可以处理WAW相关。

WAR相关:

前一个读指令先进保留站,有数据的话是直接从寄存器取,没有的话就是标记上对应的指令的保留站编号,这样一来,后续的写操作的目的寄存器和前一个读的已经不同名了,自然没有影响。

举例说明:添加了两个加法指令,其中第一个指令要读F12寄存器,第二个指令要写F12寄存器,如果没有处理WAR相关,指令乱序执行,就可能会出现因为加法指令完成更快,写回到F12的位置,第一个加法指令读到的是第二个指令的结果,但是实际指令的目的是让它读除法指令的结果,导致WAR相关。

image-20231209104319484

而在Tomasulo算法中,我们可以看到在第五个周期的时候,除法指令流出,目的寄存器F12此时标记的就是这个除法指令的保留站编号,在这里实现了寄存器的重命名:

image-20231209104326943

接下来第七个周期的时候,添加的第一个加法指令流出,此时检查操作数,F4在寄存器中已经有了,所以可以直接读取,F12此时还没有,所以读取的是对应指令的保留站编号并存在保留站中:

image-20231209104334952

在之后是第八个周期,添加的第二个写F12的指令流出,此时因为刚好第四个指令sub指令完成,所以不会存在结构相关的问题,指令直接存放在保留站的第一个位置,并且此时,F12的对应的保留站指令修改为添加的第二个指令:

image-20231209104343471

此时,继续执行到添加的F12写回指令完成:

image-20231209104351472

此时F12也已经有了自己的数据了:

image-20231209104400146

如果没有使用Tomasulo算法,那么可能这个时候添加的第一条指令就会读取走这个F12的数据并且开始执行,但是因为Tomasulo算法的寄存器重命名规则,他的保留站里存的用的操作数是保留站编号为Mult2的指令的结果数据,所以此时不执行,继续等待。

继续执行到除法指令完成:

image-20231209104410257

此时查看保留站,可以看到对应的保留站编号域变更为具体数值域:

image-20231209104417883

接下来开始执行:

image-20231209104425985

这里后面的写指令没有对前面的读指令造成影响,说明Tomasulo算法可以处理WAR相关。

五、实验总结

在进行这个实验的过程中,我深入学习和研究了Tomasulo算法和指令级并行的动态指令调度方法,并通过Tomasulo模拟器进行了实际操作和观察。以下是我在这个实验中的心得体会和收获:

  1. 对Tomasulo算法的理解加深:通过实验,我对Tomasulo算法的原理和实现方式有了更深入的理解。我了解了如何使用寄存器重命名、乱序执行和指令调度等技术来实现指令级并行,提高处理器的性能。这个算法的核心思想和设计对于理解现代处理器的工作原理非常重要。
  2. 实践操作的重要性:通过使用Tomasulo模拟器,我能够亲身操作和观察指令级并行的过程,这对于加深理论知识的理解非常有帮助。通过在模拟器上进行实验,我能够看到指令之间的依赖关系、执行时间和调度策略对性能的影响,从而更好地理解并行执行的原理。
  3. 学以致用:这个实验不仅仅是理论学习,更是将理论知识应用于实际情境的实践。通过实验,我能够更好地将Tomasulo算法应用于指令级并行的场景,并理解其在提高处理器性能方面的作用。这种将理论知识转化为实际应用的能力对于我今后在计算机体系结构和并行计算领域的学习和研究都具有重要意义。

综上所述,通过这个实验,我不仅熟悉了Tomasulo模拟器和动态指令调度的实践操作,还加深了对Tomasulo算法和指令级并行的理解。这个实验为我今后在计算机体系结构和并行计算领域的学习和研究打下了坚实的基础,并培养了我动手实践和团队合作的能力。

相关文章:

HNU计算机结构体系-实验2:CPU动态指令调度Tomasulo

文章目录 实验2 CPU动态指令调度Tomasulo一、实验目的二、实验说明三、实验内容问题1:问题2:问题3:问题4:问题5: 四、思考题问题1:问题2: 五、实验总结 实验2 CPU动态指令调度Tomasulo 一、实验…...

智慧城市是什么?为什么要建智慧城市?

智慧城市是一个通过现代科技手段推动城市管理和服务创新的概念。 具体来说,它利用信息技术和创新概念,将城市的各个系统和服务集成起来,以提升城市运行效率、优化城市管理和服务,改善市民的生活质量。 为什么要建智慧城市呢&…...

数据结构线性表-栈和队列的实现

1. 栈(Stack) 1.1 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 …...

IntelliJ IDEA 的 HTTP 客户端的高级用法

本心、输入输出、结果 文章目录 IntelliJ IDEA 的 HTTP 客户端的高级用法前言HTTP 请求对 gRPC 请求的支持对 GraphQL 和 WebSocket 请求的支持环境文件OpenAPI 补全用于持续集成的 HTTP 客户端 CLI花有重开日,人无再少年实践是检验真理的唯一标准IntelliJ IDEA 的 HTTP 客户端…...

代码随想录算法训练营第四十六天 _ 动态规划_198.打家劫舍、213.打家劫舍II、337.打家劫舍 III。

学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 198.打家劫舍 动态规划五步曲&a…...

ffmpeg编译问题

利用ffmpeg实现一个播放器,ffmpeg提供动态库,但是编译链接的时候遇到下面的问题: ../ffmpegWidgetPlayer/videoplayerwidget.cpp:23: error: undefined reference to sws_freeContext(SwsContext*) ../ffmpegWidgetPlayer/videoplayerwidget.…...

【flink番外篇】1、flink的23种常用算子介绍及详细示例(3)-window、distinct、join等

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的…...

centos7做gitlab数据灾备项目地址指向问题

如果你在 CentOS 7 上使用 GitLab 时,它回复的数据指向了另一个服务器的地址,可能是因为配置文件中的一些设置不正确。 要解决这个问题,可以尝试以下几个步骤: 检查 GitLab 配置文件:打开 GitLab 的配置文件&#xf…...

leetcode:93. 复原 IP 地址

复原 IP 地址 中等 1.4K 相关企业 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但…...

玄子Share-CSS3 弹性布局知识手册

玄子Share-CSS3 弹性布局知识手册 Flexbox Layout(弹性盒布局)是一种在 CSS 中用于设计复杂布局结构的模型。它提供了更加高效、简便的方式来对容器内的子元素进行排列、对齐和分布 主轴和交叉轴 使用弹性布局,最重要的一个概念就是主轴与…...

Nat easy IP ACL

0表示匹配,1表示任意(主机位0.0.0.255(255主机位)) rule deny source 192.168.2.1 0 设置拒绝192.168.2.1的主机通过 记住将其应用到接口上 [AR2]acl 2000 //创建基本ACL [AR2-acl-basic-2000]rule deny source 192…...

Numpy数组的数据类型汇总 (第4讲)

Numpy数组的数据类型 (第4讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…...

通讯app:

为了开发一个即时通讯的app,包含发送文字、语音、视频以及视频通话的功能,我们需要考虑以下的技术栈和实现步骤: 技术栈建议: 前端:React Native 或 Flutter 用于跨平台移动应用开发。后端:ThinkPHP Wor…...

【Backbone】TransNeXt:最新ViT模型(原理+常用神经网络汇总)

文章目录 一、近几年神经网络 Backbone 回顾1.Densenet 与 Resnet2.CBP3.SENet4.GCNet5.DANet6.PANet 与 FPN7.ASPP8.SPP-net9.PSP-net10.ECA-Net 二、TransNeXt(2023)1.提出问题2.Aggregated Pixel-focused Attention2.1 Pixel-focused Attention&#…...

使用Java将图片添加到Excel的几种方式

1、超链接 使用POI&#xff0c;依赖如下 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>Java代码如下,运行该程序它会在桌面创建ImageLinks.xlsx文件。 …...

用什么台灯对眼睛最好?考公护眼台灯推荐

之前我一直觉得&#xff0c;孩子近视&#xff0c;是因为玩手机太多&#xff0c;看电子产品的时间过长&#xff0c;但后来控制孩子看电子产品时间的触底反弹与越来越深的度数告诉我&#xff0c;孩子近视的真正原因&#xff0c;我根本没有找到&#xff0c;后来看到一篇报告&#…...

【嵌入式开发 Linux 常用命令系列 4.2 -- .repo 各个目录介绍】

文章目录 概述.repo 目录结构manifests/default.xmlManifest 文件的作用default.xml 文件内容示例linkfile 介绍 .repo/projects 子目录配置和管理configHEADhooksinfo/excludeobjectsrr-cache 工作区中的对应目录 概述 repo 是一个由 Google 开发的版本控制工具&#xff0c;它…...

【C++学习手札】基于红黑树封装模拟实现map和set

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 &#x1f49c;本文前置知识&#xff1a; 红黑树 ♈️今日夜电波&#xff1a;漂流—菅原纱由理 2:55━━━━━━️&#x1f49f;──────── 4:29 …...

linux查看当前路径的所有文件大小;linux查看当前文件夹属于什么文件系统

1&#xff1a;指令查看当前路径所有文件内存空间大小&#xff1b;这样可以方便查询每个文件大小情况&#xff0c;根据需要进行删除 df -h // 根目录 du -ah --max-depth1 // 一级目录 虚拟机 du -ah -d 1 // 一级目录 设备使用 du -ah --max-depth2 // 二…...

PPT插件-好用的插件-超级文本-大珩助手

常用字体 内置了大量的常用字体&#xff0c;方便快捷的一键更换字体&#xff0c;避免系统字体过多卡顿 文字整理 包含删空白行、清理编号、清理格式&#xff0c;便于处理从网络上复制的资料 文本打散与合并 包含文本打散、文本合并&#xff0c;文本打散可实现将一个文本打散…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...