CPU缓存学习
参考资料
内存架构
Memory Hierarchy · GitBook
程序的时间局部性和空间局部性
程序表现出两种主要的局部性形式:
-
时间局部性:程序倾向于随着时间的推移重复访问相同的数据。也就是说,如果程序最近使用过某个变量,那么它很可能很快会再次使用该变量。
-
空间局部性:程序倾向于访问位于其他先前访问过的数据附近的数据。这里的“附近”是指数据的内存地址。例如,如果程序访问地址N和 N+4处的数据,则很可能很快就会访问N+8。
缓存架构和设计
需要访问一个数据的时候,会同时发送需要的数据的内存地址到cache和主存,如果能直接从cache拿到数据,就不等待从主存返回的数据。
如果没有命中,主存的数据也会给cache发一份,以便后续的空间时间局部性访问
Cache Architecture and Design · GitBook
问题
1
-
Capacity misses: Caches store a subset of main memory. Ideally, a cache will store exactly the subset of memory that a program is actively using. However, if a program is actively using more memory than fits in the cache, it can't possibly find all of the data it wants in the cache, leading to misses.
-
容量未命中:缓存存储主内存的一个子集。理想情况下,缓存将准确存储程序正在使用的内存子集。但是,如果程序正在使用的内存多于缓存可容纳的内存,则它可能无法在缓存中找到所需的所有数据,从而导致未命中。
那么其实有一个可能的问题,就是假如有一个数组,索引分别是0到10000,那我的cache可能只能存到0到5000,发现访存到4000了,主存就把4000到9000的数据做替换到cache