高速缓存Cache原理之-1.存储器层次结构

本文详细介绍了存储器的层次结构,解释了高速缓存(Cache)在这一结构中的作用及其如何提升访存速度。通过分析不同存储器如寄存器、SRAM、DRAM和硬盘的特点,阐述了层次化存储结构的有效性,以及程序访问的局部性如何促进Cache的高效工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高速缓存Cache原理之-1.存储器层次结构

本节开始,系列介绍cache的相关知识。
目录框架为:

  1. 存储器层次结构
  2. cache和主存的关系
  3. 实现cache需要解决的问题
  4. cache的映射方式
  5. cache命中率和缺失率
  6. cache的关联度
    下面开始第一节内容,存储器的层次结构,及cache在层次化结构中的位置。

我们希望的存储器是什么样子?

目前,我们所知道的存储器有寄存器、SRAM、DRAM、硬盘等,列出它们的相关指标:
在这里插入图片描述
寄存器:触发器,速度非常快,访问延时为1ns。
SRAM:SRAM由6个T管组成,通过在位线上写高低电平写入SRAM;靠读取位线上的电平读出数据,所以速率很快。但是其由6个T管组成,集成度低,所以容量也就很小。
DRAM:DRAM由一个T管和一个电容组成,集成度高,容量大。DRAM是靠寄生电容的电荷存储数据,靠电容的充电和放电过程实现写入和读取动作,我们知道电容的充放电曲线,所以DRAM读写速度比SRAM要低。
盘:读写为机械动作,所以速率更低。
我们想要的存储器为大容量、快速、便宜的存储器,没有单独的一种存储器能够满足要求,所以,提出了一种层次化的存储结构
存储器的层次结构如下
在这里插入图片描述
上图中的cache位于寄存器和主存之间。
层次化存储器结构的大概思想为:
数据总是在相邻两层之间复制传送。这里要强调下,数据传送是复制传送,比如将主存中的数据传送到Cache后,主存中的数据仍然存在的,并没有丢失。
Block:最小传送单位为定长块,互为副本。
在这里插入图片描述
问题: 为什么这种层次化的结构是有效的呢? 为什么每次复制传送一个block,一大块信息,没有白白浪费带宽呢?因为程序访问的局部性特点,在不久的将来,CPU访问的是这个block的指令和数据,所以,一次性搬一大块,可以减少搬运次数,某个时刻都去访问这个block。
局部性访问包含两点:

  1. 时间局部性(Temproal Locality)
    含义:刚被访问过的单元不久很可能又被访问。
    做法:让最近被访问过的信息保留在离CPU更近的存储器中。
    例子:循环具有时间局部性。
  2. 空间局部性(Spatial Locality)
    含义:刚被访问过的单元的邻近单元很可能被访问。
    做法:将刚被被访问过的单元的邻近单元调到离CPU更近的存储器中。
    例子: 循环,数组,具有空间局部性。
    总结:程序的局部性访问使得层次化存储结构非常有效。
    那么,程序为什么具有局部性访问的特性呢?
    原因:
    1. 指令:指令按序存放,地址连续,具有空间局部性;循环程序或者子程序段重复执行,具有时间局部性。
    2. 数据:连续存放,数组元素重复、按序访问。

为什么引入cache会加快访存速度?
在CPU和主存之间设置一个快速小容量的存储器,其中总是存放最活跃的程序和数据,由于程序访问的局部性特征,大多数情况下,CPU能直接从这个高速缓存中取得指令和数据,而不必访问主存。从而加快访存速度。

我们写程序的时候,如何来利用cache的特性呢?
下面以一个双重循环的不同写法来比较其性能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值