《计算机体系结构量化研究方法》第2章-存储器层次结构设计 2.1 引言

news2025/4/27 21:59:17

一、概述

1、存储器层次结构:层次由速度和容量各不相同的存储器组成。
在这里插入图片描述
2、存储器层次结构被分为几个级别——离处理器越近,容量越小速度越快。
3、包含性质:大多数情况下,低层级存储器中的数据是上一级存储器中数据的超集。比如缓存的下一级存储器是主存;虚拟内存的下一级是辅助存储器(磁盘或者闪存)。
4、这是单处理器性能和主存储器访问耗时的历史发展过程。
在这里插入图片描述
5、传统上,存储器层次结构的设计人员把重点放在优化存储器的平均访问时间上,这个时间是由缓存命中时间、缺失率和缺失代价决定的。但是最近,功耗成为了主要考虑因素。在高端的微处理器上,可能有较多的片上缓存,大容量的第二级或第三级缓存会产生大量功耗,包括不执行操作时的漏电功耗和执行读写时的有效功耗,功耗预算可能会降到1/20~1/50。因此,缓存功耗可能占总功耗的25% ~ 50%。

存储器层次结构基础:快速回顾

一、块和组

如果在缓存中找不到某一个字,就必须从层次结构较低的一个层级(可能是另一个缓存,也可能是主存储器)中提取这个字,并把它放在缓存中,然后才能继续。出于效率原因,会一提取多个字,这称为块(或行)这样做还有另外一个原因:由于空间局部性原理,很可能马上就会用到这些字。每个缓存块都包括一个标签(tag)、用来指明它与哪个存储器地址相对应。
  在设计时需要做一个非常重要的决策:哪些块(或行)可以放在缓存中。最常见的方案是组相联(set associative),其中组是指缓存中的一组块。一个块首先被映射到一个组上,然后可以将这个块放到这个组中的任意位置。要查找一个块,首先要将这个块的地址映射到这个组,然后再搜索这个组(通常为并行搜索)。这个组是根据数据地址选择的:
  (块地址)MOD(缓存中的组数)
  如果组中有n个块,则缓存的布局被称为n路组相联(n-way set associative)。组相联的端点有其自己的名字。**直接映射缓存(direct-mapped cache)**的每组中只有一个块(所以块总是放在同个位置),**全相联缓存(fully associative cache)**只有一个组(所以块可以放在任何地方)只从缓存中读取数据很容易,因为缓存副本和存储器是相同的。向缓存中写入数据难一些,比如,缓存副本和存储器怎样才能保持一致呢?主要有两种策略。一种是 写直达(write-through,又称“写穿透”) 缓存,当它更新缓存中的条目时,会同时将数据写人主存储器中,并对其进行更新另一种是 写回(write-back,又称“回写”) 缓存,仅更新缓存中的副本。在要替换这个块时,再将它复制回存储器。这两种写入策略都可以使用 写缓冲区(write buffer),这样将数据写入这个缓冲区之后,马上就可以进行缓存操作,而不需要等待将数据写入存储器。

二、缺失率

1、衡量不同缓存组织方式的优劣的一个指标是 缺失率(miss rate)。缺失率是指那些未能找到预期目标的缓存访问所占的比例,即未找到目标的访问数目除以总访问数目。
(1)强制(compulsory)缺失:对数据块的第一次访问肯定不会在缓存中,所以必须将这个块放入缓存中。即使拥有无限大的缓存,也会发生强制缺失。
(2)容量(capacity)缺失:如果缓存不能包含程序运行期间所需要的全部块,就会因为有丝块先被丢弃之后再被调入而导致容量缺失(除了强制缺失之外)。
(3)冲突(conflict)缺失:如果块放置策略不是全相联的,并且多个块映射到一个块的组中,对不同块的访问混杂在一起,那么一个块可能会被丢弃,之后再被调入,从而发生冲突缺失(除强制缺失和容量缺失之外)。
2、存储器平均访问时间 = 命中时间+缺失率*缺失代价。
3、如何降低缺失率?
(1)增大缓存块,降低缺失率。
(2)增大缓存,降低缺失率。
(3)提高相联度,降低缺失率。
(4)采用多级缓存以降低缺失代价。
(5)为读缺失指定高于写操作的优先级,降低缺失代价。
(6)在索引缓存期间避免虚实地址转换,以缩短命中时间。

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

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

相关文章

基于RSA的数字签名设计与实现

信息安全课程的第二个实验,主要是用java、js,前端页面用的html写的。 页面成果展示: 基本公私钥生成 实验环境为win10系统,使用git命令行工具——git bash生成公私钥。生成私钥,密钥长度为1024bit并从私钥中提取公钥 …

如何在 Spring Boot 项目中开启 “热部署“

目录 1. 添加热部署框架支持 2. 设置当前项目 Settings 和新项目 Settings 开启项目自动编译 3. 开启运行中热部署 4. 使用 Debug 启动项目 (社区版 IDEA) 1. 添加热部署框架支持 在 pom.xml 中添加如下框架引用: <dependency><groupId>org.springframework.b…

vue3中常用的三种组件传值方式

比较大型的项目中经常会涉及到多个组件之间进行传值&#xff0c;所以对之前用过的一些传值方法做个笔记&#xff0c;还有就是对不同的情况下需要使用哪一种传值方法更合适的思维进行一个总结 vue3中常用的三种组件传值方式mitt依赖注入pinia总结mitt 因为vue3去掉了全局事件总…

qt实现的pdf阅读器(二)--XpdfReader在linux下的编译

目录 1.简介 2.需求说明 3.编译 3.3. 下载源码 3.2. 移植安装包和依赖库 3.2.1 准备工作 3.3.2 了解 3.3.3 编译并安装zlib 3.3.4 编译并安装libpng 3.3.5 编译并安装lcms 3.3.6 编译并安装freetype 3.3.7 编译xpdf 3.3.8 查看运行编译好的xpdf 1.简介 Xpdf 是一个免…

我以为自己MySQL够牛逼了,直到看到了Alibaba的面试题

前言 众所周知&#xff0c;简历上“了解&#xff1d;听过名字&#xff1b;熟悉&#xff1d;知道是啥&#xff1b;熟练&#xff1d;用过&#xff1b;精通&#xff1d;做过东西”。 相信大家对于MySQL的索引都不陌生&#xff0c;索引(Index)是帮助MySQL高效获取数据的数据结构。…

SpringBoot Disruptor框架遇到的问题

1.消息重复消费问题 问题描述&#xff1a; 项目中启动了多个消费者,测试中发现同一条消息被多次消费。 解决方案&#xff1a; ①幂等方案处理 ②disrutor提供了不同的处理机制&#xff1a; 自定义消费者实现EventHandler接口,他是属于重复消费&#xff0c; 自定义消费者实现W…

SVN培训笔记(下拉项目、同步修改、添加文件、修改文件、删除文件、改名文件等)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128417196 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

【矩阵论】7. 范数理论——非负/正矩阵

7.5 非负/正矩阵 7.5.1 定义 a. 非负/正矩阵定义 一个实矩阵 A(aij)∈RmnA(a_{ij})\in R^{m\times n}A(aij​)∈Rmn 若对每一 iii 和 jjj &#xff0c;aij≥0a_{ij}\ge 0aij​≥0 &#xff0c;则称A是非负矩阵&#xff0c;A≥0A\ge 0A≥0 若对每一 iii 和 jjj &#xff0c;…

简单四则运算语法树可视化

简单四则运算语法树可视化 前几天有一篇博客是关于四则运算和二叉树的&#xff0c;我是把四则运算用二叉树写出来&#xff08;我是用的 JSON 的形式来存储和表达的&#xff09;&#xff0c;并计算最终的结果。最近&#xff0c;也在继续这个方面的东西&#xff0c;不过遇到一些…

uni-app 微信支付-小程序、APP、IOS

小程序 支付 先看官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml 知晓有那些比不可少的流程&#xff0c;之后后端确定返回的参数值&#xff0c;用于前端支付。参数值必须一一对应&#xff0c;不然支付会失败 uni.requestPayment({timeStamp…

mysql5.7主从复制配置

写在最前面&#xff1a;一入编程深似海&#xff0c;从此对象变路人&#xff08;码农没时间谈恋爱&#xff09;。很长一段时间连写个文章的时间都没有了&#xff0c;学完后端、学前端&#xff0c;前端刚入门又要搞容器化&#xff0c;这真是“一重山外一重关&#xff0c;关关难过…

如何在Angular框架中更好地使用字体?一篇文章解答!

作为前端开发人员&#xff0c;在Angular JS中构建项目时&#xff0c;使用自定义字体可能会很棘手。有时候&#xff0c;如果开发者想要把选择的字体添加到项目中&#xff0c;将不得不把它导入到现有的代码中。 PS&#xff1a;Kendo UI致力于新的开发&#xff0c;来满足不断变化…

信息安全产品认证

文章目录一、引言二、《网络关键设备和网络安全专用产品安全认证证书》2.1 背景2.2 产品目录2.3 认证依据标准2.4 认证机构三、《中国国家信息安全产品认证证书》3.1 背景3.2 产品目录3.3 行业跟进四、《IT产品信息安全认证证书》五、CCC认证5.1背景5.2 中国强制性产品认证体系…

多源传感器组合导航 GNSS 视觉SLAM LiDAR INS 开源项目总结

多源传感器组合导航 GNSS 视觉SLAM LiDAR INS 开源项目总结 本文更改自 吴桐wutong 微信公众号文章。 开源代码总览 名称传感器类型组合类型滤波方法备注RTKLIBG-KFGAMP、rtklibexplorerhttps://www.rtklib.com/GPSTKG-KFhttps://github.com/SGL-UT/GPSTkBNCG-KFppp_wizardK…

【多个IP地址用逗号分割开】vue简单实现,textarea文本域输入多个ip地址用逗号分隔开,根据空格分割

前言 这个功能也是很多地方会用到的。 一般使用的地方是比如需要设置白名单或者黑名单 然后页面上会有一个textarea文本域。 在文本域中输入多个ip地址&#xff0c;输入一个回车换一行。 然后点击保存后&#xff0c;把数据通过逗号隔开的格式传给后端 后端再去拿到每一个ip地址…

电脑重装系统win11如何更改默认下载路径

win11如何更改默认下载路径&#xff1f;当大家平日里面&#xff0c;在使用win11系统的时候&#xff0c;如果觉得某一个下载路径的内存空间已经满了的话&#xff0c;那么就必须要及时更改&#xff0c;下面是小编提 供的更改路径的方法。 工具/原料&#xff1a; 系统版本&#x…

ES集群节点角色更换

背景 如何在一个3节点集群中&#xff0c;将Master/Data角色的节点中的数据分散到其他数据节点中&#xff0c;将该节点角色变更为Master 操作步骤 构建集群 集群角色如下 m-01:master/data d-02:data d-03:data 集群配置文件&#xff1a; Master节点elasticsearch.yml配置文件…

关于Maven中引用的jar的version配置为版本区间自动使用最新的版本,maven是如何判断哪个版本更加新?

背景 在Maven中&#xff0c;a工程引入了个jar包&#xff08;b工程&#xff09;&#xff0c;可以使用区间引入的方式&#xff0c;类似于数学区间的写法&#xff0c;如下 <dependency><groupId>org.example</groupId><artifactId>demo-jar</artifac…

使用Anaconda安装TensorFlow详细教程

一、Anaconda安装 可以参考笔者的这篇博客&#xff1a;Anaconda安装详细教程 二、准备工作 1、单击启动Anaconda Prompt创建新虚拟环境 2、在Anaconda Prompt依次执行以下命令conda create -n pytorch python3.6&#xff0c;创建名字为tensorflow的虚拟环境&#xff0c;再通…

Nacos学习笔记 (2)配置管理

1. 什么是配置中心 1.1 什么是配置 应用程序在启动和运行的时候往往需要读取一些配置信息&#xff0c;配置基本上伴随着应用程序的整个生命周期&#xff0c;比如&#xff1a;数据库连接参数、启动参数等。 配置主要有以下几个特点&#xff1a; &#xff08;1&#xff09;配…