高速缓冲存储器Cache_cache每个字节块内地址-程序员宅基地

技术标签: 高速缓存Cache  计算机组成原理  

为什么要使用Cache

CPU 和主存(DRAM)的速度差异,避免 CPU “空等” 现象。
在这里插入图片描述

程序局部性原理

为了充分发挥Cache的能力,使得机器的速度能够切实的得到提高,必须要保障CPU访问的指令或数据大多情况下都能够在Cache中找到,这样依靠程序访问的局部性原理。

时间局部性: 当前正在使用的指令和数据,在不久的将来还会被使用到。那就是如果使用了指令和数据,将这些指令和数据放入到cache中,后面再用的时候直接从cache中获取。
空间局部性: 当前正在使用的指令和数据,在不久的将来相邻的数据或指令可能会被使用到。那就是,如果使用了指令和数据,需要将相邻的指令和数据也放入到cache中。
所以放入cache中的数据是以块为单位的,块包含了当前正在使用的指令和数据和相邻的指令和数据,块的大小要通过实验的方式进行确定。

Cache工作原理

(一)主存和缓存编址

在这里插入图片描述
主存和缓存按块存储,块的大小相同,B 为块长,一般每块可取 4 ~ 8 个字,把主存储器和cache分成大小相等的块,主存中共有M块,cache中共育C块,Cache的容量要远远小于主存的容量,所以C要远远小于M,如果我们把主存和Cache分为大小相等的块,CPU给出的地址就可以分为两部分,即主存块号和块内地址,块内地址的位数决定了块的大小。Cache也分为了cache缓存编号和块内地址,但是在实际中,cache的缓存编号和块内地址没有实际的用处,也不用真正的去形成。

对于块内地址部分,主存块和cache块大小是相同的,所以块内地址位数是完全相同的,另外一个块在内存和cache之间进行传送的时候,是整体进行传送的,块内字节的顺序不会发生任何变化,所以内存块内地址和cache块内地址部分的值是完全相同的。

Cache上的标记,用于标记贮存块和cache块之间的对应关系,如果一个主存块我们把他保存到了cache中了,我们就把主存块号写入到标记中,将来CPU如果再次访问这个地址数据的时候,先访问cache,用主存块号和cache中的标记进行比较,看要访问的数据是否在cache中,如果和某一个标记正好相等,并且这个cache块是有效的,那这个cache块中就保存了他要访问的在内存中的信息,他就直接从cache中获取这些信息,这样速度就会得到很大的提升。

(二)命中和未命中

由于 M >> C,所以看定存在访问的部分主存内容不存在于 Cache中的情况。
命中: 主存块调入缓存,主存块与缓存块 建立 了对应关系,用 标记记录与某缓存块建立了对应关系的主存块号。
未命中: 主存块 未调入缓存,主存块与缓存块 未建立对应关系。

(三)Cache命中率

CPU 欲访问的信息在 Cache 中的 比率,命中率 与 Cache 的 容量 与 块长 有关,一般每块可取 4 ~ 8 个字,块长取一个存取周期内从主存调出的信息长度,这个和前面讲的提高存储器的访问速度中的多体交叉有关。如:采用16体交叉,每个存储体保存一个字,块长就是16个存储字,在一个存储周期中,可以把16个存储字取出放到cache中。如:

CRAY_1 16体交叉 块长取 16 个存储字
IBM 370/168 4体交叉 块长取 4 个存储字

CPU取若干次数据,从cache中读取了N1次,从主存中读取了N2次:
命中率 = N1 / (N1 + N2)

(四)Cache–主存系统效率

效率 e 与 命中率 有关:
在这里插入图片描述

分子是,CPU去访问一次Cache需要的时间。分母是CPU访问访问数据的平均时间(有的访问的是cache,有的访问的是主存)。

设 Cache 命中率 为 h,访问 Cache 的时间为 tc ,访问 主存 的时间为 tm
在这里插入图片描述

对于上面的这个公式,效率e的范围;[tc/tm, 1]。对于分母的平均时间计算,是在访问cache和访问主存并行的情况下计算出来的,如果,每次先访问cache,cache未命中再访问主存,公式将会发生变化。分母为 tc + (1 - h)tm。

Cache基本结构

在这里插入图片描述
将主存地址映射到缓存中定位称为地址映射,将主存地址变换成缓存地址称为地址变换,当新的主存块需要调入缓存中,而它的可用位置又被占用时,需根据替换算法解决调入问题。

Cache读写操作

(一)读操作

在这里插入图片描述

(二)写操作

写直达法写回法(Write – through): 写操作时数据既写入Cache又写入主存,写操作时间就是访问主存的时间,Cache块退出时,不需要对主存执行写操作,更新策略比较容易实现。

写回法(Write – back) 写操作时只把数据写入 Cache 而不写入主存,当 Cache 数据被替换出去时才写回主存,写操作时间就是访问 Cache 的时间,Cache块退出时,被替换的块需写回主存,增加了Cache 的复杂性。

Cache改进

(一)增加Cache级数

片载(片内)Cache,片外 Cache

(二) 统一缓存和分立缓存

指令 Cache,数据 Cache

Pentium 8K 指令 Cache 8K 数据 Cache
owerPC620 32K 指令 Cache 32K 数据 Cache

现在的缓存可分为片载缓存和片外缓存两级,并将指令缓存和数据缓存分开设置。

Cache-主存地址映射

(一)直接映射

在这里插入图片描述
以cache存储体容量为单位,将主存储体划分为若干个和cache存储体大小相等的区域。每个区的大小和cache存储体的大小相等,每个区中包含的字块数和cache存储体中包含的字块数相等。每个区中的字块进行编号的时候,可以编号2的C次方减一个,在进行映射的时候,任何一个区的第0块只能存放在cache存储的第0块,任何一个区的第1块只能存放在cache存储的第1块中。即:每个缓存块 i 可以和 若干 个 主存块 对应,每个主存块 j 只能和 一 个 缓存块 对应。

对于这种方式,如果CPU给出一个地址,我们可以把地址分为三部分:主存字块标记,Cache字块地址,块内偏移。主存字块标记对应主存字块编号,Cache字块地址对应cache字块地址,块内偏移就是块内地址。

因为cache中的第0块,装载的可以是主存储体中任意一个区域的第0块,所以我们要把区号写在标记中。当CPU给出地址访问cacne的时候,先通过Cache字块地址确定读取的是cache中的哪一个块,再通过比较器比较这个块的标记和CPU给定地址的主存字块标记是否相等,如果是,则表示要访问的数据已经被加载进了cache,可以直接从cache中进行获取。

优点:这种方式,可以直接根据块号确定cache ,根据区号判断要读取的块是否被加载进了cache。

缺点:由于任何一个区的第0块只能存放在cache存储的第0块,任何一个区的第1块只能存放在cache存储的第1块中,就算有其他空闲也不能存入,这种映射使得cache的利用率很低,cache在调入的时候,冲突的概率很大,命中率低。

(二)全相联映射

在这里插入图片描述
主存储器的任何块,可以被放入到cache中的任意块中,这样,任何一个字块只要想调入cache,只要cache中有空闲就能被调入进来。
缺点:
1、 CPU发出取数据地址,要确定要读取的数据是否在cache中,需要和cache中所有块的标记进行比较,如果相等就命中。这种方式速度比较慢。
2、 需要使用主存字块进行比较是否命中,参加比较的位数比较长,比较器的位数也比较长。

(三)组相联映射

在这里插入图片描述
组相联映射,是直接相连映射和全相联映射的折中。

先把cache分成块,再把这若干个块分成组,每组中可以包含2块,4块,8块等。然后把主存储器中的字块也进行分区,每个区的大小和cache中的组数是相同。也就是cache被分成了多少组,主存储器每个区就有多少个块。映像的时候,每个区的第0块,可以放到cache第0组的任何一个位置。也就是,区里面的编号,就直接决定了他被放入到了cache中的那个组中。

这种方式,和直接关联相比,对于主存储器中的每个块,可以放入到cache一组中的多个位置,只要这组中有一个位置空闲,就能被调入。和全关联相比,只需要确定这个块是否在当前组中即可。
对于这种方式,虽然结构比较复杂,但是cache利用率高,获取数据效率高,计算简单。对于这种方式,如果cache只有一组,就变成了全相联,如果cache每组只有一块,就变成了直接相联

对于以上的三种方式,在多层次的cache中使用是不一样的,对于接近CPU的cache,因为需要高速度,所以使用的是直接相连或者是cache每组块个数比较少的组相联。中间的层次,采用组相联的方式,距离CPU最远的cache,可以采用全相联的方式,因为距离CPU越远,对速度的要求越低,对cache利用率的要求越高。

4.7 替换算法

当使用全相联和组 相联的时候,如果 要获取的数据不在Cache中,从主存中读取后,需要将数据写入缓存Cache,如果Cache中已经有数据需要将Cache中的数据替换出去,那替换策略该如何呢。

(一)先进先出算法(FIFO)

让最先进入到内存块的数据先退出。这种方式并不能很好的体现程序的局部性原理。

(二)近期最少使用算法(LRU)

在最近的一段时间内,我们使用的最少的块。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/b_x_p/article/details/84195116

智能推荐

Power BI Desktop中的流程图-程序员宅基地

文章浏览阅读2.2k次。In this article, we will explore the Flow Map chart in Power BI Desktop. Power BI is helpful to visualize the data through various form of the inbuilt and the custom charts. We have explored few s..._powerbi工作流程图

嵌入式linux入门3-2-串口_cfmakeraw-程序员宅基地

文章浏览阅读3.6k次,点赞12次,收藏33次。个人博客上本篇文章地址:嵌入式linux入门3-2-串口tty体系tty是teletype的缩写,在上世纪计算机还很昂贵的时候,多人可以通过这种终端来连接并共用一台计算机,发展到今日,tty已经成为了字符类设备的统称,这类设备包括:控制台、UART等物理串行接口以及伪终端。也就是说,开发板物理串口一般对应linux中/dev目录下的tty*设备文件,访问这些文件,就访问硬件串口了。tips:以下内容为阅读 Serial Programming Guide for POSIX Operating Sy_cfmakeraw

tensorflow tensor中查找多个元素的索引_tensorflow获取为1的索引-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏2次。import tensorflow as tfarr=tf.constant([1, 5, 7, 4, 3, 1, 9])searched_value=tf.constant([1, 5, 9])index_arr=tf.where(tf.equal(aaa,tf.expand_dims(bbb,axis=-1)))'''Out:array([[0, 0], [0, 5], [1, 1], [2, 6]], dtype=int64)'''fin._tensorflow获取为1的索引

springboot+vue网工毕设新颖的方向怎么选-程序员宅基地

文章浏览阅读761次,点赞23次,收藏25次。 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的java web缺少创新和亮点,往往达不到毕业答辩的要求。 为了大家能够以最少的精力顺利通过毕业设计,学长推荐15个新颖优质 java毕业设计选题分享给大家,同时分享项目与论文(源码+论文)。 下文会对每个推荐的项目进行展示与打分,大家可以挑选自己喜欢的项目作为毕业设计。项目分享:见文末!题目1 : 基于SSM的游戏攻略资讯补丁售卖商城 题目综合评分(每项满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分。

基于微信小程序的共享书橱系统(源码+文档+包运行)-程序员宅基地

文章浏览阅读72次,点赞3次,收藏3次。今天带来的是基于微信小程序的共享书橱系统,共享图书微信小程序,基于微信小程序的发展,结合目前用户在阅读方面的需求,开发了本基于微信小程序的书橱系统,为用户提供一个便利的图书查询、在线阅读平台,更好的为用户服务。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte-程序员宅基地

文章浏览阅读1k次。import pandas as pdimport numpy as npfrom datetime import datetime df = pd.read_csv('E:/data.csv',)# 运行后报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid co..._utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byt

随便推点

JAVA语言程序设计第一二章总结-程序员宅基地

文章浏览阅读254次,点赞3次,收藏4次。通常学习工作中使用的是Java SE,即标准版(Standard Edition),另外还有企业版(Enterprise Edition)的Java EE,还有手机丶嵌入式设备上使用的Java ME(Micro Edition)。JAVA是什么,官方给出的解答是‘JAVA语言是一种通用的,支持并行的,基于类的,面向对象的程序设计语言,被特别设计成与运行的平台尽可能无关,它最大的特性就是允许编程者只编写一次就可以在互联网上到处运行。这是一个新手小白的第一次个人博客,记录我学习JAVA语言的过程。

mac 系统下安装tensorflow过程中踩得一些坑,以及自己的解决办法-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏4次。mac 系统下pip install tensorflow1. 速度慢pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple2. 网速不稳定超时了ERROR: Exception:Traceback (most recent call last):File “/Users/mac/anaconda3/envs/tensorflow/lib/python3.5/site-packages/pip/_vendor/ur

面试&面试-程序员宅基地

文章浏览阅读40次。面试共性问题的准备1.基础的机器学习算法线性模型有序属性和无序属性的转化有序属性可以进行连续值的转化,无序属性,假定有k个值则转换为k维向量线性回归问题转换成分类问题直接引入- 对数几率函数经典的数值优化方法:梯度下降法,牛顿法.牛顿法求解平方根决策树ID3算法,利用信息增益 但是其有一个缺点就是对数量较多的属性具有一定的偏袒性.C4.5算法, 增益率 对数目较少的属性具有一定的偏袒性...

python distance函数_关于python:仅使用NumPy计算马氏距离-程序员宅基地

文章浏览阅读2.8k次。我正在寻找计算两个numpy数组(x和y)之间的马氏距离的NumPy方法。以下代码可以使用Scipy的cdist函数正确计算出相同的值。 由于此函数在我的情况下会计算出不必要的后缀,因此我想仅使用NumPy进行更直接的计算。import numpy as npfrom scipy.spatial.distance import cdistx = np.array([[[1,2,3,4,5],[5,..._python distance

odoo 自定义登录界面_odoo登录界面-程序员宅基地

文章浏览阅读618次。odoo的登录界面太单一,而且登录的方式不够多。所以 自己单独用jinja2 渲染了一个html 进行登录。_odoo登录界面

pycharm、idea、golang等JetBrains其他IDE修改行分隔符(换行符)、在Git CRLF、LF 换行符转换_idea换行符设置-程序员宅基地

文章浏览阅读2.3k次。pycharm、idea、golang等JetBrains其他IDE,默认行分隔符 是跟随系统,但是我们很多场景是要在linux运行,所以我们需要修改行分隔符~_idea换行符设置

推荐文章

热门文章

相关标签