分享好友 最新动态首页 最新动态分类 切换频道
cpu cache line 原理
2024-12-26 11:38
cpu的cache通常较大, 比如 128KB, 被划分为多个有固定大小的cache line, cache line通常是32Byte或64Byte.

cpu cache line 原理


CPU内部的cache种类, 至少有三种
1) 指令cache
2) 数据cache 通常有多级 multi-level
3) TLB 加速虚拟地址to物理地址转换


cache entry (cache条目)
包含如下部分
1) cache line : 从主存一次copy的数据大小)
2) tag : 标记cache line对应的主存的地址
3) falg : 标记当前cache line是否invalid, 如果是数据cache, 还有是否dirty


cpu访问主存的规律
1) cpu从来都不直接访问主存, 都是通过cache间接访问主存
2) 每次需要访问主存时, 遍历一遍全部cache line, 查找主存的地址是否在某个cache line中.
3) 如果cache中没有找到, 则分配一个新的cache entry, 把主存的内存copy到cache line中, 再从cache line中读取.


cache中包含的cache entry条目有限, 所以, 必须有合适的cache淘汰策略
一般使用的是LRU策略.
将一些主存区域标记为non-cacheble, 可以提高cache命中率, 降低没用的cache


回写策略
cache中的数据更新后,需要回写到主存, 回写的时机有多种
1) 每次更新都回写. write-through cache
2) 更新后不回写,标记为dirty, 仅当cache entry被evict时才回写
3) 更新后, 把cache entry送如回写队列, 待队列收集到多个entry时批量回写.


cache一致性问题
有两种情况可能导致cache中的数据过期
1) DMA, 有其他设备直接更新主存的数据
2) SMP, 同一个cache line存在多个CPU各自的cache中. 其中一个CPU对其进行了更新.


cpu stall cpu失速
指的是当cache miss时(特别是read cache miss), cpu在等待数据从内存读进去cache中期间, 没事可做.
解决此问题的方法有
1) 超线程技术. CPU在硬件层面, 把一个CPU模拟成两个CPU, 在上层看来是两个CPU. 并发的执行两个线程. 这样当一个线程因cache miss在等待时, 另一个线程可以执行.


主存的一个地址, 需要被映射进哪个cache line? (术语:Associativity)
根据映射策略的不同而不同


1) 最笨的, 一个地址可被映射进任意cache line (fully associative)
   带来的问题是, 当寻找一个地址是否已经被cache时, 需要遍历每一个cache line来寻找, 这个代价不可接受.
   就像停车位可以大家随便停一样, 停的时候简单的, 找车的时候需要一个一个停车位的找了.
   你想下, cpu想知道一个地址是否已经在cache中了, 需要把全部cache line找一边, 那该有多慢?


2) Direct Mapped Cache  (相当于1-way associative)
   这个就是相当于hash了, 每个地址能被映射到的cache line是固定的. 
   每个人的停车位是固定分配好的. 可以直接找到.
   缺点是, 因为人多车少, 很可能几个人争用同一个车位, 导致cache 淘汰频繁. 需要频繁的从主存读取数据到cache, 这个代价也较高.
   由于cache中cache line的个数都是2的指数个. 那么, hash算法就很简单了, 不用取模, 直接把内存地址的某几个bit位拿出来即可. 比如cache line有128(2^7)个, cache line的大小是32(2^5)字节, 
   那么一个32位地址的 0~4位作为cache line内部偏移, 5~11位作为cache line的索引即可. 剩下的bit12~31作为当前cache line的tag. tag的作用时, 当有另外一个地址也映射到同一个cache line时, tag用来比较两个地址是不是同一个地址. 毕竟同一个cache-line可以对应的内存的位置非常多个的.


3) 2-way associative
   是fully associative和Direct Mapped Cache的折中.
   2-way, 每一个人可以有两个停车位, 这样当一个停车位被占了的时候, 还有机会寻找另外一个. 虽然人数众多, 但同时来找停车位的人并不多. (相当于很多人的车在外面,没有开回来)
   所以, 2-way associative近似的相当于有了2倍大小的cache, 使用Direct Mapped Cache策略.
组相连方式

注意, 这图只统计了cache miss率, 很显然full-associative是做好的. 但是full-associative导致的判断一个地址是否在cache中的代价是非常昂贵的.所以, 生产环境一般都是2-way associative
======================================================
最新文章
AI手机股票龙头名单是这些!(2024/12/17)
  据南方财富网概念查询工具数据显示,2024年AI手机股票龙头股:  思泉新材301489:AI手机股票龙头,截止15时,思泉新材报62.590元,跌2.76%,总市值36.1亿元。  根据2024年2月28日、29日投资者关系活动记录表,AI给消费电子终端带来
0基础学python爬虫兼职,可以月入过万吗?
废话少说,直接上图 本朝九晚六的社畜靠着下班、周末时间接单帮别人写代码,上个月就赚了1W+学会python做接单真的不难,有台电脑就行,当初我什么都不会 说实话,我虽然住在一线城市,但是工资交
bios怎么设置guid
在现代计算机系统中,GUID(全局唯一标识符)是一种用于标识系统中固件和存储器的标准格式。设置正确的GUID有助于系统启动、分区管理以及在多重引导环境中的操作。在这篇文章中,我们将探讨如何在BIOS中设置GUID,涉及的步骤和示例代码确保
2025达州技师学院开设的专业一览表
2025达州技师学院开设的专业有:汽车制造与装配、汽车驾驶、汽车维修、新能源汽车检测与维修、汽车技术服务及营销、数控加工(数控车工)、模具制造、机电一体化技术、工业机器人应用与维护、计算机应用与维护、计算机广告制作、现代物流、
AI制作复杂漂亮的无缝贴图
本篇教程将向脚本之家上学习AI的朋友们介绍使用裁切标记,制作较为复杂的无缝贴图的方法。 为了更加便于朋友们理解这个命令的应用原理,我精心的为朋友们安排了实例,希望朋友们喜欢!下面我们先在网上下载一个如下图的AI格式复杂图案(2)
3D17日连号走势图近500期带连线
功能类福彩3D显示遗漏:显示/隐藏遗漏值,遗漏值是指自上期开出到本期间隔的期数。福彩3D遗漏分层:是将当前遗漏值用柱状图形标注。福彩3D分段线:是每五期使用分隔线,使横向导航更加清晰。福彩3D显示断区:在分区走势中使用,将开出0个号
7743游戏盒子2021最新版下载
7743游戏盒子2021最新版是一款手机上非常好用的游戏辅助工具,这里提供很多游戏的下载,游戏的各个版本这里都有。你还能在这里了解到最新的游戏资讯,还有最新的游戏活动、攻略等等,心动了吗?那就赶紧行动起来啦!1、7743游戏盒子2021最
12月16日专用设备行业十大熊股一览
证券之星消息,12月16日,沪指报收3386.33,较前一交易日下跌0.16%。专用设备行业整体表现较弱,较前一交易日下跌1.1%,48只个股上涨,117只个股下跌。个股表现方面,专用设备行业当日领跌股为巨轮智能(002031),该股当日报收6.75,下跌1
2025元旦迎新年活动策划书
当我们想要做某一个项目时,都需要制定方案,一个方案的诞生,一般都是想法在前而表述在后,对于方案的撰写你是否毫无头绪呢?下面是小编为大家收集关于2025元旦迎新年活动策划书,希望你喜欢。一、活动背景元旦佳节即将来临,为了丰富员工
相关文章
推荐文章
发表评论
0评