cache高速缓存 简单讲解与验证

本文介绍了CPU高速缓存的作用和原理,包括缓存命中(hit)和未命中(miss)的概念,并通过矩阵乘法的实例展示了不同存取方式对缓存命中率的影响,揭示了程序的局部性原理。通过实验,比较了两种矩阵乘法算法的性能差异,说明了优化数据访问顺序对于提高效率的重要性。
摘要由CSDN通过智能技术生成

前言

上次做计算机系统的实验,做到一个高速缓存的实验,不过实验内容比较简单,就是验证一下不同的数据存取方式对缓存命中率的影响(通过运行时间体现)

因为我上课全程摸鱼,所以今天来回顾一下高速缓存这个内容,加深映像(

高速缓存介绍

什么是高速缓存

高速缓存是介于cpu和内存之间的一级存储器。访问cpu高速缓存的速度要快于访问内存,因此高速缓存常常用来加速cpu的运算。

你可以在任何一本介绍计算机基础的课本上找到类似的图(图片源 百度图片)来描述计算机的各种存储器:
在这里插入图片描述

高速缓存基本原理

cpu的速度远远快于内存,因此如果cpu只是从内存中读取数据,那么会花费较多的时间在等待数据上,我们希望有一种方法解决【从内存中读数据慢】的问题,于是有了高速缓存。

对于数据的读取基于两个猜想,假设我们读取内存地址x处的数据,那么有

  1. 内存地址x处的数据在短时间内容易被再次访问
  2. 内存地址x周围的数据在短时间内容易被再次访问

以上两个猜想很容易得到证实,(这也是程序的局部性原理的一部分),比如我们会经常编写这样的代码

// 猜想1: 频繁地访问指针a指向的地址存储的变量
int* a = new int;
*a = 123;
for(int i=0; i<n; i++)
{
   
	*a += i;
} 

// 猜想2: 矩阵运算的时候 频繁访问相邻的变量 a[i+1]
int a[10];
int b[10];
for(int i=0; i<9; i++)
{
   
	a[i] += b[i+1];
	a[i+1] += b[i];
}

频繁访问内存意味着速度慢。高速缓存的引入解决了这个问题

hit

我们在访问一个内存地址的时候,先查看高速缓存里面有无该地址的数据。如果有就直接从高速缓存中读取数据,这个行为我们叫做hit,即缓存命中

miss

如果高速缓存中没有数据,我们需要从内存中读取数据,这个行为叫做miss。值得注意的是,我们一次读取不是读取一个内存单元的数据,而是读取一个【cache行】的数据,这意味着目标地址及其附近区域的一些数据会被读到高速缓存中,如果下次访问邻近的数据,就不会miss。(cache行一般是64字节)

图解

下面通过一张图解释高速缓存的基本原理,这个原理告诉我们,对内存中的数据的访问,数据们相距的越近,数据越集中,存取速度越快。

在这里插入图片描述

更加详细

在《深入理解计算机系统》书中,给出了相当详细的对于高速缓存的解释,我们可以来一探究竟

在这里插入图片描述
在这里插入图片描述

简单的来说,就是取数据的时候,先查看数据地址,然后做一次硬件哈希映射,查找缓存里是否命中,然后按照情况做对应的操作。

简单实验验证

我们模拟简单的矩阵

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值