分享好友 最新动态首页 最新动态分类 切换频道
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+高校创智计划海选赛在智慧与创意的碰撞中落幕,经过三个月的激烈比拼,50支高校
高清美女写真一键生成:探索AI绘画工具的奥秘与玩法
在这个数字化的时代,AI技术的普及使得我们可以轻松生成超逼真的美女写真。想象一下,只需简单的几步操作,你就能得到一张涵盖各类风格和细节的完美人像。这是不是让你心动呢?今天,我们将带你进入AI生成美女写真工具的世界,分析几款热门
泉州爱采购自运营
百度爱采购是如何排序的?1.时间因素:爱采购网站展示的高品质数据,并非人工介入,而是受时间因素控制,在不同的时间,同一物品会出现在不同的地点。比方说,您在采购中做了一款游泳产品,早上您查询的展示位置是在首页首行,下午再次查询
PTA: 确定班级排名
某学年的班级考评中,班名为cn1​的班级获评先进班集体,班名为cn2​的班级获评优秀学风班。经了解,该学年学院所有班级中,按班级考评的总分sc1​排名选前3个班级获评先进班集体,按学风得分sc2​排名选排
“朋友圈被领导点赞”被认定为加班证据?法院:算加班
12月10日据上海市总工会消息法院处理了一起以领导点赞朋友圈证明加班事实的劳动纠纷案一员工休息时间推广公司产品发朋友圈后领导为其点赞后该员工被公司开除主张领导朋友圈点赞应视为加班公司应支付加班费双方为此对簿公堂员工被开除,要求
滁州琅琊区蛙人水下封堵-善于管理「施工单位」(2025新+排名一览)
滁州琅琊区蛙人水下封堵-善于管理「施工单位」(2025新+排名一览)标题:滁州琅琊区蛙人水下封堵:守护城市水下安全近年来,我国城市化进程的加快,城市水下基础设施的安全维护日益受到重视。滁州琅琊区作为一座历史悠久的城市,其水下基础设
“适度宽松”所释放的重要信号(2024版)(文字版+视频版合集)
每年的年底都有定调来年楼市关键会议,今天会议也出来了,房地产相关,天狼明天在给大家细说,今晚同样也是说重点的,那么是什么样的重点呢?适度宽松,对于这四个字,稍微熟悉楼市的购房者基本是熟悉的,今晚天狼给大家说下对于楼市而言,
如何搭建小程序?
随着移动互联网的普及,小程序已经成为了一种非常流行的应用方式,因为它可以在不需要下载安装的情况下提供完整的应用体验。因此,越来越多的人开始关注如何搭建小程序。下面,我们来简单介绍一下如何搭建小程序。现在,无需找app开发公司
附件上传的大小限制
IIS6 默认允许的附件最大上传大小为4M,在IIS7之前,当我们需要扩大这个上传限制时,比如需要将允许上传的附件上限设置为50M,则可以在web.config中做如下配置:system.webhttpRuntime maxRequestLength="51200" //system.web2. maxAllowed
相关文章
推荐文章
发表评论
0评