Cache
Cache
2.1 Cache的一般设计
cache的产生原因:大容量存储器的访问速度和处理器的运行速度不匹配
并且数据之间存在时间相关性和空间相关性,即一个数据现在被访问以后可能还会被访问,它周围的数据也可能会被访问。
L1cache速度最快,紧密耦合在处理器流水线中。
L1 cache一般包含指令Cache(I-Cache)和数据Cache(D-Cache),一般使用SRAM实现,主要体现“快”。
L2 Cache体现“全”,一般指令和数据共享,要尽量保存更多的内容。
多核情况下,L1 Cache属于私有,L2与L3可以多核共享。
Cache由Tag和data转成,data从来保存一片连续地址的数据,tag保存这片连续数据的公共地址。一个Tag和它对应的所有数据组成的一行称为一个Cache line。
Cache的缺失:cache只能保存最近被处理器使用过的内容,但由于容量有限,很多情况下要找的指令或数据并不在cache中。
直接相连
查找数据时先对比index,再对比tag,最后通过block offset获得数据实际位置。但index部分相同时,cache对应位置就会被交互访问,一直缺失。
组相连
思想是一个数据不单单只放在一个cache line中,对index寻址后通过对比tag确定最终哪个cache line才是需要的。如果tag全都比对错误,那么说明发生了cache缺失。此种方法因为需要比对tag所以延迟会比较大,但能显著减少cache缺失发生的频率。
全相联
不再需要index,通过tag在整个cache中进行比较。
全相联cache缺失率最低,延迟也最大。一般使用CAM(Content Address Memory)存储tag,使用普通SRAM存储数据。
2.2提高cache的性能
写缓存
流水线
多级结构
victim cache
本质相当于增加了 way的个数,能够避免多个数据竞争cache中有限的位置。
2.3 多端口Cache
最原始的多端口Cache将所有Cache中的控制通路和数据通路都进行复制,但这种方法会增大很多面积,并且需要驱动多个端口会增加访问时间和功耗。
常用方法
multi-banking
将cache分为很多小的banck,每个bank只有一个端口。
2.4 超标量处理器的取指令
n-way的超标量处理器的I-Cache应该支持每周期能至少取出n条指令,这样才能不浪费流水线。
对于cache来说,一个周期只能访问一个cache line,除非n条指令在同一个cache line中才可以一次性取出,不然无法取足就会造成流水线性能浪费。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】