【计算机系统结构】流水方式(续)

news2024/11/15 20:57:14

📝本文介绍
本文总结了流水机器的相关处理以及非线性流水线的调度

👋作者简介:一个正在积极探索的本科生
📱联系方式:943641266(QQ)
🚪Github地址:https://github.com/sankexilianhua
🔑Gitee地址:https://gitee.com/Java_Ryson
由于本人的知识所限,如果文章有问题,欢迎大家联系并指出,博主会在第一时间修正。

文章目录

  • 📕流水机器的相关处理
    • 📖各种相关
      • 🔖局部相关
      • 🔖全局相关
      • 🔖流水机器的中断处理
  • 📘非线性流水线的调度
    • 📖静态调度
    • 📖动态调度
    • 📖二维预约表,禁止表,冲突向量,以及状态转移图

📕流水机器的相关处理

  影响流水通畅的因素:

  • 编译后的目标代码
  • 操作数,指令的读取
  • 各种相关
  • 中断

📖各种相关

🔖局部相关

局部相关的处理

  局部相关:指令相关,访存操作数相关,通用寄存器组相关等。 (先读后写产生)
  解决方法:1. 推后执行 2. 设置相关专用通路
  流水线中的流动方式:

  • 顺序流动方式(同步流动方式):任务流出流水线的顺序保持与流入流水线的顺序一致。(即:所有流水段的流入流出同步进行,那么每段任务都必须经过所有流水线!)
    • 先写后读相关
  • 异步流动方式:任务流出流水线的顺序与流入流水线的顺序不同。(即:这种情况下,如果有任务与某段流水段无关,可以选择跳过该流水段,进入下一个流水段。)
    • 写-写相关
    • 先读后写相关

数据相关

  • 先写后读相关(RAW)
    顺序流动和异步流动都会发生
  • 先读后写相关(WAR)
    顺序流动不会发生,异步流动会发生
    WinDLX规定读操作只发生在ID阶段,写操作只发生在WB阶段,不会出现WAR相关。如果是乱序发射就需要考虑保证正确性
  • 写-写相关(WAW)
    顺序流动不会发生,异步流动会发生
    需保证写的正确顺序

解决:1. 推后执行 2.设置相关专用通路

结构相关

本质上是资源不足,导致的不能满足指令重叠的需求,所以解决方法就是增加硬件资源

🔖全局相关

  也称为转移相关,控制相关。指:已进入流水线的转移指令(尤其指条件转移指令)和其后续指令之间的相关。其造成的问题有:

  • 一旦转移成功,进入流水线的指令就作废,至少会浪费一个时钟周期
  • 若转移成功分支指令未被预取到指令缓冲区中,则需要从主存中取指,浪费一个访存周期。
    解决方法:
  • 猜测执行法
    • 分支选择:选择大概率分支。若概率相同选(跳转)不成功分支。
    • 加快执行:准备两套转移目标指缓
  • 延迟转移
    • 采用静态调度技术,编译时调整目标指令顺序,将转移指令与前面不相关的指令调换顺序。
  • 加快,提前形成条件码
    • 加快单指令内部条件码的执行(条件码是乘除结果的正,负,零值)
    • 加快程序段内条件码的执行(将产生条件码的指令提前到与其不相关的其它指令之前)
  • 加快短循环程序的处理
    • 短循环程序全部放入指令缓冲器内,并暂停预取指令。循环出口条件转移指令恒猜循环分支

🔖流水机器的中断处理

  中断的出现概率比条件转移的概率要低。(出现概率低的情况下,需要花费大 才能提升一点性能)处理中断的主要问题:断点现场的保护和恢复,而不是缩短流水线的断流时间。
  不精确断点:无论指令在哪处发生中断,都不允许尚未进入流水线的后续指令再进入流水线,已在流水线中的指令执行完毕后,转入中断处理程序。(不利于排错)
  精确断点:论指令是在流水线中的哪一段响应中断,给中断现场全都是对应的,之后流入流水线内的指令的原有现场都能保存和恢复。

📘非线性流水线的调度

📖静态调度

借助软件对指令执行顺序进行调度,以减少由于流水线中存在相关冲突而引起流水线的停顿时间。(流行)

📖动态调度

动态调度:通过硬件重新安排指令的执行顺序以减少流水的停顿。

📖二维预约表,禁止表,冲突向量,以及状态转移图

由于非线性流水线的特性:一个程序可能会多次经过同一段流水线,同时,在调度任务时需要保证不同任务之间不会出现需要同时占用同一流水段。二维预约表,可以清楚地将这类问题展示。

二维预约表

二维预约表的写法:有一个由K段组成的单功能非线性流水线,每个任务通过流水线需要n拍如果第m拍用到第l段,就在相应第m列和第l行的交叉点处用√表示
如:一个5段流水线,安排同一个需要9拍的任务。
在这里插入图片描述
也就是,任务在第一拍和第九拍的时候需要使用第一个流水段。其他的类似。

禁止表

那么,禁止表如何看呢?我们这里的目的是让其不要在同一时刻内争用同一段流水。所以,有多次使用的段我们才需要去看。那么相隔几拍会遇到一起呢?以第一个流水段段为例,其在1拍和9拍都需要使用,那么如果该任务执行到9拍时(已执行8拍),下一个任务此时进来,由于其处于1拍,需要使用第1个流水段,此时就会发生争用。所以,这个周期是不允许有任务进来的。第一个不允许的周期就得到了。从表上看,就是同一个流水段之间相邻的拍数。
根据上述,1号段中得到不允许间隔8拍,二号段中得到不允许间隔1拍(2,3拍之间),6拍(2,8之间),5拍(3,8之间)。故得到的禁止表为:{1,5,6,8}

冲突向量

冲突向量:根据禁止表上,置一为不允许。其为拍数减一。(因为间隔所有拍数或其以上,上一个任务已流出流水线,没有冲突的可能)。用C表示。
根据上述可得到C=(10110010)
这里还有一个问题:已经经过n拍之后,冲突向量如何变化?将整个冲突向量左移n位,右边补0。
为什么要左移呢?经过n拍之后,所有占用流水段的时间实际上都前移了n拍,而冲突向量代表的就是在第n拍的时候进入流水段会有冲突。
右位为何补0?左移n位之后,实际上就是其执行n拍之后。而冲突向量只有任务执行时间-1的拍数,一旦左移1位之后,就相当于间隔了任务总拍数再安排任务,此时任务都已流出流水线,不存在争用问题。所以置0。

状态转移图

状态转移图描述了该任务在允许的时间间隔内安排后,其任务状态的变化。根据上述所讲,每个安排的任务初始阶段都是初始状态量,而经过n拍安排任务后,其状态量要左移,同时,之后安排的任务也不能与该任务冲突。故,需要将初始状态量(新安排任务)与原来已在流水线中的任务的状态量(左移后的)进行相或,从而得出新的状态量。每个新的状态量都需重复该操作,直到完成。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2A大电流线性稳压器具备两种输出电压范围

概述 PCD3931 是一款低噪声、低压差线性稳压器 (LDO),可提供 2A 输出电流,最大压降仅为 160mV。该器件提供两种输出电压范围。 PCD3931 的输出电压可通过外部电阻分压器在 0.5V 至 5.5V 范围内进行调节。PCD3931 集低噪声、高 PSRR 和高输出电流能力等特…

国密证书VS国外证书:选哪种更靠谱?一文带你了解优劣势!

在数字化生活的今天,无论是网上购物、在线支付还是远程办公,我们的信息安全和隐私保护都显得尤为重要。而数字证书,就像是一把“信任钥匙”,帮助我们确认信息的真实性和保护数据的安全。但是,面对国密证书和国外品牌证…

Java | Leetcode Java题解之第22题括号生成

题目&#xff1a; 题解&#xff1a; class Solution {static List<String> res new ArrayList<String>(); //记录答案 public List<String> generateParenthesis(int n) {res.clear();dfs(n, 0, 0, "");return res;}public void dfs(int n ,int…

【派兹互连-SailWind】这家公司悄然入局,国产EDA突围又有新看头了!

从光刻机到EDA软件&#xff0c; 国产厂商何以突围&#xff1f; 两年前&#xff0c;美发布禁令直接把对中国大陆半导体产业的限制&#xff0c;从光刻机扩大到集成电路所必需的EDA软件领域&#xff0c;在此之前华为因被美国列入实体清单&#xff0c;被三大海外EDA巨头断供&…

MOM系统:制造企业的“神级助手“!

一、大环境下的智能化改造 嘿&#xff0c;亲爱的制造企业老板们&#xff0c;你们是否曾经为生产计划混乱、物料和设备管理无序、产品质量不稳定等等问题而头疼不已&#xff1f;现在&#xff0c;有一个超级助手可以帮助你们解决这些问题&#xff0c;那就是MOM系统&#xff01;什…

《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念&#xff0c;听到的时候还以为是说CSS的伪类呢&#xff0c;网上一查&#xff0c;这东西原来还是个很常见的家伙。 何为伪数组 伪数组有两个特点&#xff1a; 具有length属性&#xff0c;其他属性&#xff08;索引&#xff09;为非负整数但是却不具备…

Python 操作 json 数据

在Python中&#xff0c;操作JSON数据主要包括序列化&#xff08;将Python对象转换为JSON格式&#xff09;和反序列化&#xff08;将JSON字符串转换回Python对象&#xff09;。 以下是使用Python内置的json模块进行这些操作的基本示例&#xff1a; JSON 序列化 (Serialization…

记一次事件到供应链的顶级拉扯

前言 某天&#xff0c;夜里3点 天刚蒙蒙亮 开局&#xff1a;我有一个朋友~ 看不懂发的什么意思&#xff0c;再仔细看看&#xff0c;懂了! 闲言少叙&#xff0c;遇事不决先上bp&#xff0c;启动&#xff01; 进去之后发现基本没什么实际功能点&#xff0c;像假的一样。注意这里…

怎么修改图片大小?在线图片处理的方法介绍

在日常生活中&#xff0c;我们经常需要调整图片大小以适应不同的网络上传要求。不管是微信、QQ换头像背景图片&#xff0c;还是各种社交媒体相册&#xff0c;都需要对图片改大小&#xff0c;今天就介绍几个关于修改图片大小的方法&#xff0c;可以不用下载安装就能在线图片处理…

学浪怎么下载视频

购买了学浪的人希望能随时随地学习&#xff0c;而学浪提供了许多有价值的视频课程。然而&#xff0c;由于网络限制或个人需求&#xff0c;有时候我们可能希望将这些视频下载到本地。本文将介绍如何利用简单的工具实现学浪视频的下载&#xff0c;让学习变得更加自由灵活。 学浪…

OSPF 开放式最短路径优先协议

目录 技术产生原因&#xff1a;因为RIP存在不足 OSPF优点&#xff1a; RIPV2和OSPFV2比较&#xff1a; 相同点&#xff1a; 不同点&#xff1a; OSPF的结构化部署 --- 区域划分 区域划分的主要目的&#xff1a; 区域边界路由器 --- ABR &#xff1a; 区域划分的要求&am…

【源码】2024全开源多语言多商户跨境商城源码|多语言跨境外贸电商系统App

ikTok SHOP跨境电商系统V8版是一套B2CB2B跨境电商商城系统源码&#xff0c;多商户多语言&#xff0c;全新百变DIY模板&#xff1b;该系统支持B-C自营、B-B-C第三方卖家系统、B2B批发电商模式&#xff1b;该源码是使用Laravel框架PHP开发的&#xff0c;前后端全开源可二开。 版…

护眼灯什么牌子好,几款专业的护眼灯品牌推荐

​随着近视在孩子中的普遍性日益增加&#xff0c;家长们开始认识到&#xff0c;除了学业成就外&#xff0c;孩子的视觉健康同样需要早期关注。毕竟&#xff0c;学业的挫折可以逐步克服&#xff0c;但一旦视力受损&#xff0c;眼镜就可能成为终生的伴侣。鉴于此&#xff0c;专业…

企业级网络安全:入侵防御实时阻止,守护您的业务安全

随着互联网技术的快速发展&#xff0c;企业级网络安全问题日益凸显。在这个数字化时代&#xff0c;企业的业务安全不仅关系到企业的形象和声誉&#xff0c;还直接影响到企业的生存和发展。因此&#xff0c;加强企业级网络安全&#xff0c;预防和抵御各种网络攻击已成为企业的重…

【ThinkBox_Deadline_3dmax使用教程】

ThinkBox Deadline 3dmax使用教程 2019-01-18 10:51 1.打开Thinkbox.Deadline 监控器&#xff0c;设置超级用户才能操作提交渲染和设置任务。 2.设置插件和软件的路径的操作&#xff1a; 3.默认安装C盘安装在其他盘符的需要按照路径找相应格式的文件加载&#xff08;标注的…

EPSON 的 RX8010SJ 为安防产品解决方案

EPSON作为实时时钟解决方案提供商中的佼佼者&#xff0c;为了适应市场需求&#xff0c;推出实时时钟模块RX8010SJ。该款实时时钟模块除了拥有超高性价比以外&#xff0c;还拥有不俗的整体性能&#xff0c;同时集成了日历功能可用于事件标记&#xff0c;非常适合应用在竞争日渐激…

【2024年认证杯】A题详细思路+数据(来源)+成品论文+模型代码(matlab+python)

2024年认证杯A题 解题思路 ⭐⭐第一问题分析第二问题分析第三问题分析 数据与数据来源&#x1f389;&#x1f389;指标解释数据来源 成品参考论文&#x1f60a;&#x1f60a;python/ matlab 代码&#x1f680;&#x1f680; 解题思路 ⭐⭐ 这个题目要求我们围绕人造保暖纤维的…

vue模版字符串解析成vue模版对象

模版字符串 this.code <template><div style"width:100% ; height: 100% ;">{{resultData[0].name}}</div> </template> <script> export default {data() {return {resultData: [{ name: 图幅, value: 20 },]}},mounted(){},method…

STM32移植嵌入式开源按键框架

目录 STM32移植嵌入式开源按键框架 MultiButton简介 multi_button.c文件 multi_button.h文件 按键事件 案例使用方法 学习剖析 STM32移植嵌入式开源按键框架 今天移植了一款嵌入式按键框架工程MultiButton&#xff0c;MultiButton是一个小巧简单易用的事件驱动型按键驱动…

15 Python进阶: random和pyecharts

Python random 模块主要用于生成随机数。 random 模块实现了各种分布的伪随机数生成器。 要使用 random 函数必须先导入&#xff1a; import randompython random 模块的一般用法 Python中的random模块提供了生成伪随机数的功能&#xff0c;可以用于模拟、游戏开发、密码学…