高速缓存通过提供对数据/指令的快速访问,在减少程序的处理时间方面起着重要的作用。高速缓存内存小而又快,而主内存又大又慢。
缓存的概念将在下面说明。
缓存原理:
高速缓存存储器的目的是提供对资源的最快访问,而不会损害存储器的大小和价格。试图读取数据字节的处理器首先查看高速缓存。如果该字节在高速缓存存储器中不存在,它将在主存储器中搜索该字节。一旦在主存储器中找到该字节,就将包含固定字节数的块读入高速缓存,然后再传送到处理器。由于被称为“引用局部性”或“局部性原理”的现象,随着更早地读取到高速缓冲存储器中的块包含与该过程相关的字节,在高速缓冲存储器中找到后续字节的可能性增加。
缓存内存设计:
- 缓存大小和块大小–
为了与处理器速度保持一致,高速缓存非常小,因此查找和获取数据所需的时间更少。通常根据体系结构将它们分为多个层。高速缓存的大小应适应块的大小,而块的大小又由处理器的体系结构确定。当块大小增加时,由于局部性原理,命中率最初会增加。块大小的进一步增加导致将更多数据带入缓存将降低命中率,因为在特定点之后,使用由新块带来的新数据的概率小于重用正在使用的数据的概率。冲出来为新的块腾出空间。
- 映射函数–
从主存储器读取数据块时,映射函数确定高速缓存中的哪个位置被读入的主存储器块占据。如果高速缓存已满,这将需要用主存储块替换高速缓存存储块,这会变得很复杂。应该替换哪个缓存块?应该注意不要替换更可能被处理器引用的缓存块。替换算法直接取决于映射函数,因此,如果映射函数更灵活,替换算法将提供最大的命中率。但是,为了提供更大的灵活性,搜索高速缓存存储器以确定该块是否在高速缓存中的电路的复杂性增加了。
- 替换算法–
它决定在高速缓存已满时,高速缓存中的哪个块被主内存中的读入块替换,并具有来自映射函数的某些约束。应该替换在不久的将来不会被引用的缓存块,但是很难确定哪个块不会被引用。因此,应将高速缓存中已长时间未引用的块替换为来自主存储器的新读入块。这称为最近最少使用算法。 - 写政策–
内存缓存最重要的方面之一。选择要由新的读入主存储器块替换的来自缓存的数据块应首先放回主存储器中。这是为了防止数据丢失。应确定何时将高速缓存块放回主存储器中。这两个可用选项如下-
- 选择将其替换为主存储器中的新读入块时,请将其放在主存储器中。
- 每次对高速缓存块进行更新后,将其放置在主存储器中。
写策略决定何时将高速缓存块写回到主存储器。如果选择了选项1,则对主存储器执行过多的写操作。如果选择了选项2,则在多处理器系统的情况下,主内存中的块已过时,因为尚未从高速缓存中替换该块,但已进行了更改。
例子 :
- 什么是命中率?
命中数(在高速缓存中成功搜索)/尝试总数(总搜索)。 - 什么是LRU算法?
此处有更多详细信息 - 有哪些不同的高速缓存存储层?
此处和此处有更多详细信息。 - 如何在Windows PC中检查缓存的不同层?
打开任务管理器->性能-> CPU(示例– L1,L2,L3)