CPU的高速缓存存储器知识整理

基于缓存的存储器层次结构

基于缓存的存储器层次结构行之有效,是因为较慢的存储设备比较快的存储设备更便宜,还因为程序往往展示局部性:

时间局部性:被引用过一次的存储器的位置很可能在不远的将来被再次引用。

空间局部性:如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。

通用高速缓存存储器结构

一个通用的高速缓存存储器会有S = 2 ^ s个set(组)

每个set含有E个line(既通常所说的cache line)

每个line又包含1位vaild bit、 t位tag、B = 2 ^ b bytes cache block(真正存储数据的地方)。

通常我们说的cache line 64位 32位,实际上是说的cache line中cache block是64位32位。

假设我们的存储器地址有m位,共M = 2^m个不同的地址。我们看一下各个变量之间的关系。

cache缓存数据的大小C = (sizeof set * number of set) = (size of block * lines a set) * number of set = B * E * S

内存大小2^m Cache line大小2^b 内存的cache line个数2^(m-b)

2^(m-b)个cache line分到2^s个set里, 每个set会有2^(m - b –s)个cache line,这个数字不是E,是指会有2^(m – b –s)个cache line落到这个set 里面,那么就需要有m-b-s位tag,标记出当前是哪个cache line落到这个set里面了。也就是说t = m - b –s。

如上图所示,m位地址的内存,需要s位做索引,选set,t位做tag,选cache line,然后b 位做偏移取具体地址的内存。

高速缓存的映射

高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步1)组选择2)行匹配3)字抽取。

直接映射

直接映射每个组只有一行E=1

选组

地址中取s bits选组

选行

地址中取t bits与cache line中t bits tag匹配,匹配则命中,不匹配则cache miss

字抽取

地址中的b bits就是cache line中偏移,在命中的cache line中的取字。

 

直接映射不命中时,不需要什么策略,直接把索引的组中的cache line替换掉即可。

 

组相连映射

组相连映射中,一个组包括多个cache line,目前常见的有四路组相连映射,16路组相连映射,即一个set中有4个或16个cache line。对比直接映射,set 个数要比直接映射的少。因此s会小,相应的落到每个set中的cache line会多,因此t会大。

选组

组相连映射的组选择与直接映射一致。

选行

cache line的选择时,因为一个set中有多个cache line,因此需要搜索set中的每个cache line的tag,对比检查是否命中。

字抽取

与直接映射一致

 

组相连映射对于一个index就会有多个行与之相对应,比较每行的tag是否与想要的地址相符合,这样就会大大增加命中的几率,避免了一小段程序中频繁cache失效的问题。

组相连映射不命中时,由于索引到的组中会有多个cache line,因此会有多种算法选择到底替换哪个cache line。

 

全相连映射

全相连映射就是组相连映射只有一个组的情况。

选组

全相连映射组选择很简单,只有一个组,不需要组索引,s = 0,地址只被划分为一个标记tag,和一个偏移。

选行

全相连映射cache line选择时,需要多缓存中的所有cache line进行搜索对比。

字抽取

与之前一致

 

全相连映射需要大量的搜索cache line进行对比,导致构造一个又大又快的全相连高速缓存很困难,而且很昂贵。因此全相连缓存只适合做小的高速缓存,比如TLB。

Core i7的高速缓存特性

 

以上内容来自《深入理解计算机系统》6.4

以下内容来自互联网

 

几种cache方式

Virtual index virtual tagged

逻辑cache,Virtual index virtual tagged是纯粹用虚拟地址来寻址,逻辑地址索引逻辑地址tag,这种方式带来了很多的问题,每一行数据在原有tag的基础上都要将进程标识加上以区分多个进程之间的相同地址,而在 处理共享内存时也比较麻烦,共享内存在不同的进程中的虚拟地址不相同,如何同步是个问题。

Physical index physical tagged

物理cache,Physical index physical tagged,物理地址索引和物理地址tag,是一种最容易理解的操作方式,cache针对物理地址进行操作,简单粗暴,而且不会有歧义。但是这种方式的缺陷也很明显,在多进程操作系统 中,每个进程拥有自己独立的地址空间,指令和代码都是以虚拟地址的方式存在,cpu发出的memory access的指令都是以虚拟地址的方式发出,这样的话,对于每一个memory access的操作,都要先等待MMU将虚拟地址翻译为物理地址,这是一种串行的方式,效率较低。

virtual index physical tagged

现在比较多的是采用virtual index physical tagged的方式,virtual index的含义是当cpu发出一个地址请求之后,低位地址去和cache中的index匹配, physical tagged是指虚拟地址的高位地址去和mmu中的页表匹配以拿到物理地址(index和取物理地址这两个过程是并行的),然后用从mmu中取到的物理地 址作为tag(或者tag的一部分)去和cache line的tag位匹配,这样既保证了同一地址在cache中的唯一性(有个例外,cache alias)又能将mmu和cache并行工作,提高了效率。

这种方式带来的唯一问题就是cache alias,即一个物理地址缓存到两个cache line中。当进程间通过共享内存方式通信,或者一个进程通过mmap的方式内核与应用层共享内存,就会出现同同一块物理内存,以多个虚拟地址访问的情况。就容易导致一块物理内存缓存到两个cache line中。

由于共享内存是页对其的,因此多个进程空间的共享内存,或者内核态用户态的共享内存,其物理地址不同,但其页偏移是相同的。

假如页大小为P = 2^p 字节,cache line为 C = 2^c 字节,那么共享内存的不同虚拟地址其低p位是一致的,假如地址0 -> c位用于block offset,c -> p 位用于set index,那么就可以避免cache alias的问题。

但如果set index 位数 > p -c ,那肯定会出现cache alias的问题,因为同一块物理内存,不同的虚拟地址,其set index不同。

针对于cache alias问题,目前的方案是由操作系统来保证,对于同一物理地址在不同进程空间的虚拟地址,要保证他们index相同,落在同一个set,就需要保证他们虚拟地址的差值是cache大小的整数倍。同时已经有些cpu厂商在开发监视模块,试图在硬件层面解决类似的同步问题。

转载于:https://www.cnblogs.com/jintianfree/p/3896012.html

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

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

相关文章

uniapp光标自动定义到文本框_word技巧自动生成毕业论文目录

一篇word文档,内容有大的章,小的节。如何把章节抽出来生成目录?WORD →点击需要插入的地方 → 插入菜单 → 索引和目录 → 目录 → 确定。1 创建标题目录Word 一般是利用标题或者大纲级别来创建目录的。因此,在创建目录之前&#…

JSTL

2019独角兽企业重金招聘Python工程师标准>>> 说明 JSTL 是 JAVA 中的一个定制标记库集。实现了JSP页面中代码的复用,增加了JSP页面的可读性,方便查看和参与开发 使用 1.下载地址 http://archive.apache.org/dist/jakarta/taglibs/standard/bi…

自然语言0_nltk中文使用和学习资料汇总

sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare http://blog.csdn.net/huyoo/article/…

学习关于时间在sql里面的对比,用if语句(这个有点特别)

需求:假如当前时间是大于starttime且小于endtime的则按starttime倒序排列显示一条记录;假如当前时间小于starttime且小于endtime则按starttime正序排列显示一条记录。要在一次sql查询中完成。 这个是论坛里面的,人家给出答案了,我…

超简单的JNI——NDK开发教程

不好意思各位,我按照网上一些教程进行JNI开发,折腾了半天也没成功,最后自己瞎搞搞定了,其实超简单的,网上的教程应该过时了,最新版的AS就包含了NDK编译的功能,完全不用手动javah,各种…

查询工资最低的3名员工的职工工号、姓名和收入_关于工资条,这6个常识必须掌握,事关你的权益!...

大状说:找大状,中小企业自己的法律顾问。今天为大家带来的文章,是《关于工资条,这6个常识必须掌握,事关你的权益!》,是关于劳动法的内容,希望能给大家带来帮助。1、单位不发工资条的…

SQL之用户自定义函数

关于SQL Server用户自定义的函数,有标量函数、表值函数(内联表值函数、多语句表值函数)两种。 题外话,可能有部分朋友不知道SQL Serve用户自定义的函数应该是写在哪里,这里简单提示一下,在Microsoft SQL Se…

vb语言程序设计_如果编程语言难度决定头发浓度,学这语言的可能要光头了

对于程序员来说,头发真的比什么都重要,甚至很多程序员,大量的人民币都花在了后续植发上。甚至网上还流行这么一句话,你发际线越高,编程能力越高,那对于程序员来说,那么多语言,到底哪…

SD Card Formatter for Mac Download

https://www.sdcard.org/downloads/formatter_4/eula_mac/ SDFormatter Mac版是一款Mac OS平台上的sd卡修复工具,SDFormatter是一款比较好用的SD卡格式化工具,能够格式化SD存储卡和SDHC记忆Card(SD/SDHC 存储卡),使用遵…

linux删除用户oracle用户名,linux添加用户useradd 删除用户userdel

1.作用useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户。2.格式useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name3.主要参数-c:加上备注文字&#xff0c…

Asp.net创建伪静态页面

下面是我研究了好几天和同事一起才研究出来的,原创。 1伪静态的定义: 伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息。或者还想运用动态…

Spring 管理Bean(获取Bean,初始化bean事件,自动匹配ByName······等)

1.实例化spring容器 和 从容器获取Bean对象 实例化Spring容器常用的两种方式: 方法一: 在类路径下寻找配置文件来实例化容器 [推荐使用] ApplicationContext ctx new ClassPathXmlApplicationContext(new String[]{"beans.xml"}); 方法二: 在文件系统路径…

directoryinfo 读取 映射磁盘_LoaRunner性能测试系统学习教程:磁盘监控(5)

上期我们讲到LoaRunner性能测试内存监控,这期我们讲LoaRunner性能测试磁盘监控。磁盘监控在介绍磁盘监控前,先介绍固定磁盘存储管理的性能,固定磁盘存储器的结构层次如图所示。每个单独的磁盘驱动器称为一个物理卷(PV)…

Eclipse新建web项目正常启动tomcat不报错,但不能访问项目的解决方法

原因: 虽然我手动添加了自己下载的tomcat,但是由于在Eclipse中创建Server时,“Server Locations”选项采用的时默认配置,即"Use workspace metadata(does not modify tomcat installation ),这意味着该Server不会改变TOMCAT的安装及部署目录&#…

wordpress漏洞_WordPress XSS漏洞可能导致远程执行代码(RCE)

原作者: Ziyahan Albeniz在2019年3月13日,专注于静态代码分析软件的RIPS科技公司发布了他们在所有版本的WordPress 5.1.1中发现的跨站点脚本(XSS)漏洞的详细信息。该漏洞已在不同类别的各种网站上公布。有些人将其归类为跨站点请求伪造(CSRF)漏洞&#x…

DJ轮回舞曲网下载教程

该网站网址为:http://www.92cc.com/ 昨天有网友问我这个网站能不能下载。我告诉他,只要能在线试听的就能下载 于是今天出个临时教程 教大家如何获取试听的音乐URL。 第一步找到试听的网址,如: http://www.92cc.com/p97206.html 第…

【DP】【Asia - Harbin - 2010/2011】【Permutation Counting】

【题目描述】Given a permutation a1, a2,...aN of {1, 2,..., N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2. You are requested to find h…

三丰三坐标编程基本步骤_三丰三坐标CRYSTA APEX S776

日本三丰MITUTOYO从1934年成立至今,专力致于精密测量仪器的研发和生产,在七十多年中,日本三丰量具MITUTOYO已成为世界最大综合测量仪器的制造商,它生产的产品包括千分尺,卡尺,千分表,高度尺&…

Unity3D研究院之Android同步方法读取streamingAssets

版本Unity5.3.3 Android 小米pad1 首先非常感谢 守着阳光 同学在下面的留言。让我解决了一个大的谜团。。 开始我知道 StreamingAssets 路径是这个 path “jar:file://” Application.dataPath “!/assets/”; 文档在这里: http://docs.unity3d.com/Manual/Strea…

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组

题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少对这样的(i,j). 解法:分别从左到右,由右到左预处理到某个下标为止有多少个数等于该下标&…