6.4 高速缓存介绍 您所在的位置:网站首页 cpu寄存器与缓存 6.4 高速缓存介绍

6.4 高速缓存介绍

2024-07-06 20:14| 来源: 网络整理| 查看: 265

一、缓存内存(cache memories)

早期的计算机系统中仅包含三个基本层次:CPU寄存器、DRAM主内存及磁盘存储。然而,由于计算机CPU和主内存间速度差异的不断拉大,系统设计者被迫在主存和CPU间插入一个小的SRAM缓存内存,称为L1缓存(Level 1 cache),如图6.26所示: 在这里插入图片描述 L1缓存的访问速度和寄存器差不多快,通常需要2-4个时钟循环。

随着CPU和主内存的性能差异不断拉大,计算机系统的设计者又继续主存和CPU间插入一个另外的更大的高速缓存,称为L2缓存。L2缓存位于CPU和L1缓存之间,可以在10个时钟中期内访问到。一些现代的计算机系统还包含一个更大的L3缓存,位于L2缓存和主存间,可以在30或40个时钟周期内访问到。在接下来的描述中,为了简化,我们假设在CPU和主存间只有一个内存层次:L1缓存。

1.1 通用缓存内存组织结构

考虑一个每个内存地址都有m位,因此总共有 M = 2 m M=2^m M=2m位不同地址的计算机系统。如图6.27(a)所示,为这种机器适配的缓存用 S = 2 s S=2^s S=2s个缓存集(cache sets)组成的数组组织成。每个缓存集都包括E个缓存线(cache lines)。每个线包括 B = 2 b B=2^b B=2b字节的数据块;一个有效位(valid bit),这个有效位指明了这个线是否包含有意义的信息;一个标签位(tag bits) t = m − ( b + s ) t=m-(b+s) t=m−(b+s),这是当前快内存地址的一个子集,独一无二的指明了在每个缓存线中存储的块。

大体上来讲,缓存可以用元组(S,E,B,m)进行符号化。缓存的大小C被表示为 C = S × E × B C=S\times E\times B C=S×E×B

当CPU接收到指令从主存的地址A处读取一个字的数据时,它会将地址A发送到缓存中。如果缓存中已经保存了地址A的字的一份拷贝,那么它会将这个字直接返回给CPU。缓存如何知道它包含这个字的一个拷贝?缓存被组织过因此它可以通过简单的检查地址的位来找到需要的字,这个过程和有一个非常简单的哈希函数的哈希表类似。具体工作过程如下:

参数S和B对m个地址位进行了一次划分,将原始地址位划分成了图6.27(b)中的三个部分: 在这里插入图片描述

A地址中的s个集合下标位(s set index bits)组成了S集合中的数组中的下标。第一个集合就将这位设为0,第二个集合设为1,以此类推。当这部分被解释为无符号整数时,集合下标位高五我们这个字必须被存储进哪个集合。一旦我们知道这个字必须存储进哪个集合后,A中的t个标志位告诉我们这个集合中的哪一行包含这个字。集合中的一行只有在有效位置位且这行的标志位和地址A的标志位对应才会包含这个字。在我们利用集合下标确定了集合并利用标志位确定了行后,我们接下来用b个块偏移位(b block offset bits)确定B字节数据块中字的偏移量。

我们可以注意到,描述一个缓存时用到了很多符号。图6.28总结了我们所引用的符号: 在这里插入图片描述

练习题:

下标给出了几个不同缓存的参数。对每个缓存,判断它包含的缓存集合数(S),标志位(t),集合下标位(s)以及块偏移位(b)。 在这里插入图片描述 答案: 在这里插入图片描述

1.2 直接映射缓存

缓存基于E划分成了几类。E=1时缓存被称为直接映射缓存,如图6.29所示: 在这里插入图片描述 直接映射缓存是最容易实现同时也是最容易理解的,所以我们会用它来阐述一些缓存如何工作的通用原理。

假设我们现在有一个包括一个CPU,一个寄存器文件,一个L1缓存以及一个主内存的系统。当CPU执行一个从内存中读取一个字w的指令时,它首先会从L1缓存中请求这个字。如果L1缓存中有这个字w的拷贝,那么L1缓存命中,缓存快速提取出w并且将它返回给CPU。否则这是一次缓存缺失,CPU需要等待到L1缓存从主存中请求到这个字w。当请求块从主存到达时,L1缓存将这个块存储到它的一个缓存线中,从这个块中提取出字w,并且将它返回到CPU中。缓存经过的决定一个请求是否是一次命中还是一次缺失,并且最终提取出我们所需要字的过程包括三步:

选择集合匹配行提取字 1.2.1 直接映射缓存中的集合选择

在这一步中,缓存从字w的地址中提取出s个集合下标位。这些位被解释为无符号整数,对应于一个集合。换句话说,如果我们将缓存认为是一个一维数组的集合,那么集合下标就指明了这个数组的下标。图6.30展示了在一个直接映射缓存中的集合选择过程: 在这里插入图片描述 在这个例子中,集合下标 0000 1 2 00001_2 000012​被解释为集合1的整数下标。

1.2.2 直接映射缓存中的行匹配

现在我们已经通过上一步选择了某个集合i,下一步就是判断字w的一份拷贝是否存储在集合i的行中。对于一个直接映射缓存来说,这个过程很简单且迅速,因为每个集合中仅有一行。w的一份拷贝只有在有效位置位且缓存行中的标志位和地址中的标志位匹配时才会存储在这行中。

图6.31展示了行匹配在直接映射缓存中是如何工作的: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有