前言:绝大部分内容来源于北京大学的慕课《计算机组成原理》,地址:
https://www.coursera.org/learn/jisuanji-zucheng
cache是为了解决cpu和内存速度不对等的问题。
一,cache的结构
当前较为普遍的cache配置是L1,L2,L3。
L1 Cache:指令和数据分离,各32KB 8路组相联,命中时间4个周期 。
L2 Cache:统一的指令和数据,共256KB 8路组相联,命中时间11个周期 。
L3 Cache:统一的指令和数据,多核共享,共8MB 16路组相联,命中时间30~40个周期。
局部性:
计算机程序从时间和空间都表现出“局部性” 。
时间局部性(Temporal Locality) :最近被访问的存储器单元(指令或数据)很快还会被访问 。
空间局部性(Spatial Locality):正在被访问的存储器单元附近的单元很快会被访问。
缓存行(Cache Line):根据局部性结论可以知道,CPU为了高效,在获取数据不是一个字节一个字节,而是一块一块(block),也即Cache Line(常见的有64Byte)。
二,cache访问流程
Cache命中时的写策略:
① 写穿透(Write Through):数据同时写入Cache和主存 。
② 写返回(Write Back):数据只写入Cache,仅当该数据块被替换时 才将数据写回主存。
Cache失效”时的写策略 :
① 写不分配(Write Non-Allocate):直接将数据写入主存 。
② 写分配(Write Allocate):将该数据所在的块读入Cache后,再将数 据写入Cache。
参考:
https://www.coursera.org/learn/jisuanji-zucheng
https://coolshell.cn/articles/20793.html
https://www.stardog.com/blog/writing-cache-friendly-code/
https://dzone.com/articles/optimizing-memory-access-with-cpu-cache
https://coolshell.cn/articles/10249.html
https://max.book118.com/html/2017/1007/136335602.shtm