LSU介绍

LSU(Load Store Unit)是一个专门的执行单元,负责执行所有的加载(load)和存储(store)指令等,生成load和store操作的虚拟地址,并从内存中加载数据或将数据从寄存器中存储回内存。LSU里一般包括L1 D-cache、D-TLB、AGU、load queue、store queue等模块。

下文以(Berkeley out-of-order machine(BOOM)为例子)

  • 负责决定什么时候将memory operations送到memory system;
  • load instruction产生uopLD, 会计算出将要访问的地址,并将结果存在LDQ中;
  • store instruction会产生两个微指令,uopSTA(store addr generation)和u哦怕STD(store data generation)
    • STA: 计算store的地址,同时将地址存放在STQ中;
    • STD:将store data存入STQ中;
  • uopLD/STA/STD都是乱序进行的;

 

 Store Instructions

  • 在decode stage, 会申请store queue entry; (stq[i].valid = 1);
  • 每个valid bit对应两个其他的valid, 分别是
    • valid addr(stq[i].bits.addr.valid);
    • valid data(stq[i].bits.data.valid);
  • 当store instruction提交了,则对应的store queue中的entry也被标记成commited, 可以在合适的时候,将其释放掉;
  • store queue中的entry, 是按照PO的顺序,给到memory系统中;

Store Micro-Op

  • store是作为一条单独的指令插入到issue window中;而不是被分解为单独的addr-gen和data-gen UOP);
  • 这样做的好处是不会浪费昂贵的issue window entries, 也不会给送往LSU的issue ports带来额外的竞争问题;
  • 两个操作数都准备好的存储可以作为一个UOP发送给LSU, UOP同时向LSU提供地址和数据。
  • 虽然这要求存储指令能够访问两个寄存器文件的读端口,但这样做是为了不让store-heavy code的性能降低一半。
  • Sequences involving stores to the stack should operate at IPC=1!
  • 然而,通常在store addr知晓之前,就知道store addr。
    • store addr应该尽快放到STQ,可以使得后续进来的load, 能够进行冲突检查,以避免任何内存排序失败。
    • 因此,issue windows会根据需要发出uopSTA或uopSTD UOP s,然后等待第二个操作数准备好。

Load Instructions

  • 在decode stage申请LDQ entry;
  • 在decode stage,每个load entry会带一个store mask信息,ldq[i].bits.st_dep_mask, 这个标志记录了当前这条load, 依赖于STQ中的哪些store instruction;
  • 当store fired to memory,and leaves the Store Queue, 对应的mask标志被清除;
  • 当load对应的地址被计算出来,放入LDQ后,ldq[i].addr.valid =1;
  • load指令在LDQ中的执行过程:
    • load inst到达LSU后,会尽快的送到memory system中;
    • 这样的做法,对于乱序pipeline有巨大的好处;
    • load指令,会和store queue中的entry, 进行地址比较,检查是否依赖于store addr;
      • 如果match, 则memory request会被kill掉;
      • 如果对应的store data已经存在,在store data会forwarded to load,load标记为完成;
      • 如过对应的store data不存在,则load会sleep, 稍后会再次进行访问memory的申请;

 

 The BOOM Memory Model

  • 遵循RVWMO memory consistency model;
    • Write -> Read constraint is relaxed (newer loads may execute before older stores).
    • Read -> Read constraint is maintained (loads to the same address appear in order).
    • A thread can read its own writes early.
  • ordering loads to the same addr;
    • RVWMO要求,loads to the same addr should be orded;
    • 这就要求,每个load,需要和其他的load做检查,看是否有冲突的地址;
    • 如果younger load在older load之前已经执行,则younger load将会被replay, 其后面的指令,也要在pipeline中被flush掉;
    • 这种场景,出现在当memory coherence的snoop,能够探测到core‘s memory时,并将这种reorder暴露给其他的threads时,需要处理,否则,这种reoder也是ok的;

Memory Ordering Failures 

 考虑如下的场景:

    

  • 如果X2和X4的物理地址相同,那么load实际上应该是依赖于之前的store; 如果load先执行,那么就会读到错误的数据,此时称之为发生了memory ordering failure;
  • 一旦发生了memory ordering failure,则pipeline必须flush, RAT也要重置,这是相当expensive 的operation;

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

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

相关文章

关于前端原生技术-Jsonp的理解与简述

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/134777717 出自【进步*于辰的博客】 在学习了Jsoup这个知识点之后,发觉js的这一特点…

基于appium的常用元素定位方法

一、元素定位工具   app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位。 1.uiautomatorviewer.bat   uiautomatorviewer.bat工具在安装完ADT工具之后&a…

【Docker】进阶之路:(十一)Docker存储

【Docker】进阶之路:(十一)Docker存储 Docker存储简介storage driverdata volumevolumebind mounttmpfs mount Docker提供了4种存储方式:默认存储、volume(数据卷)、bind mounts(绑定挂载)、tmpfsmount(仅在Linux环境中提供)。其中…

Jemeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组; 2、线程组--添加--取样器--HTTP请求; 3、Http请求--添加--后置处理器--正则表达式提取器; 4、线程组--添加--监听器--查看结果树; 5、线程组--添加--取样器--调试取样器。 响应体数据…

docker mysql8 设置不区分大小写

docker安装Mysql8.0的坑之lower_case_table_names_docker mysql lower_case_table_names-CSDN博客https://blog.csdn.net/p793049488/article/details/108365929 docker run ‐di ‐‐nametensquare_mysql ‐p 33306:3306 ‐e MYSQL_ROOT_PASSWORD123456 mysql

金蝶EAS如何增加报表

金蝶EAS如何增加销售毛利报表? 文章目录 菜单路径:导入授权发布管理 菜单路径: 商业分析———扩展报表中心——报表工具 ——报表工具 汽车 4S——整车管理——整车销售——扩展报表 导入 选择报表文件进行导入 授权 发布管理

(纯原创)基于JavaWeb的宠物领养商城(详细源码以及开发设计报告)

摘要 本宠物领养系统以MVC分层为原则,数据持久化使用Mybatis,数据库使用MySQL,这些技术目前相对比较成熟,方便系统的维护与扩展 商城系统包括了宠物领养、用户注册、用户登录、商品查询、商品添加到购物车、删除商品等几大功能…

Linux基础项目开发2:物联网监控——视频监控方案介绍(一)

前言: 这次我们来做一个关于视频监控的基础小项目,需要我们用到网络的相关知识,还会学到好多优秀的网络协议,下面让我们开始对物联网视频监控进行一个大体框架的介绍吧 目录 项目内容: 1.视频监控方案介绍 2.视频监控…

手写VUE后台管理系统10 - 封装Axios实现异常统一处理

目录 前后端交互约定安装创建Axios实例拦截器封装请求方法业务异常处理 axios 是一个易用、简洁且高效的http库 axios 中文文档:http://www.axios-js.com/zh-cn/docs/ 前后端交互约定 在本项目中,前后端交互统一使用 application/json;charsetUTF-8 的请…

云计算 云原生

一、引言 云计算需要终端把信息上传到服务器,服务器处理后再返回给终端。在之前人手一台手机的情况下,云计算还是能handle得过来的。但是随着物联网的发展,什么东西都要联网,那数据可就多了去了,服务器处理不过来&…

MachMap:End-to-End Vectorized Solution for Compact HD-Map Construction

参考代码:None 动机与出发点 地平线的MapTR展现出了构建高精地图的能力,但是它的机制确实是有点复杂了。为了兼容不同车道线的朝向,环形车道线的起终点等情况,针对性设计了permute-equal的匹配逻辑,这样的逻辑真的是太…

软件测试之压力测试详解

一、什么是压力测试 软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、…

appium安卓app自动化,遇到搜索框无搜索按钮元素时无法搜索的解决方案

如XX头条,搜索框后面有“搜索”按钮,这样实现搜索操作较为方便。 但有些app没有设置该搜索按钮,初学者就要花点时间去学习怎么实现该功能了,如下图。 这时候如果定位搜索框,再点击操作,再输入文本后&#x…

SpringBootWeb请求响应之前言及状态码的详细解析

SpringBootWeb请求响应 前言 在上一次的课程中,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。 其实呢,是我们在浏览器发起请求…

【算法与数据结构】332、LeetCode重新安排行程

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题比较属于困难题目,难点在于完成机票、出发机场和到达机场之间的映射关系,再…

使用yum/dnf管理软件包

本章主要介绍使用 yum 对软件包进行管理。 yum 的介绍搭建yum源创建私有仓库yum客户端的配置yum的基本使用使用第三方yum源 使用rpm安装包时经常会遇到一个问题就是包依赖,如下所示。 [rootrhel03 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.modulee…

【三维重建】对极几何

极几何描述了同一场景或者物体的两个视点图像间的几何关系 可以发现P在左右相机的投影点一定在各自的极线上,如果求出极线就能缩小求解对应点的范围。 本质矩阵对规范化摄像机拍摄的两个视点图像间的极几何关系进行代数描述 规范化相机指的是相机的内参…

人工智能_机器学习063_SVR支持向量机_回归拟合天猫双十一销量方程---人工智能工作笔记0103

之前我们用线性回归做过天猫双十一销量预测的数据,现在我们再来用SVR支持向量机来做一下 首先上面是给出了销量,对应2009年到2019年的,销售额 可以看到: X=np.arange(2009,2020)-2008 统一减去2008的话看起来数据比较简单了 y=np.array([0.5,9.36,52,191,350,571,912,1207,1…

使用perl的Tie::File 模块删除文件固定行

使用perl的Tie::File 模块删除文件固定行, 为了说明简单代码中处理的是固定第二行开始的3行长度。下面给出perl代码: #! /usr/bin/perl use v5.14; use Tie::File;if (ARGV 0) {say "请输入一个文件名 !!!";exit 1; }my $filePath $ARGV[0]; tie my ar…

java工程(ajax/axios/postman)向请求头中添加消息

1、问题概述 在项目中我们经常会遇到需要向请求头中添加消息的场景,然后后端通过request.getRequest()或者RequestHeader获取请求头中的消息。 下面提供几种前端向请求头添加消息的方式 2、创建一个springmvc工程用于测试 2.1、创建工程并引入相关包信息 sprin…