caching - 写在 L1 和 L2 缓存上的行是否也写在 LLC 中
问题描述
我读到“当程序尝试在缓存中存在的页面上写入时发生写入命中”。如果一个程序开始写入 L1 缓存并找到足够的行来写入数据,它是否也会写入 LLC?我有疑问,因为在读取带入 L1 和 L2 缓存的值时也会带入 LLC。
请帮我理解。先感谢您
解决方案
我将尝试分点回答这个问题,希望如果我遗漏了什么,有人可以添加它,或更正我的答案:
当程序尝试在缓存中存在的页面上写入时发生写入命中
- 实际上,当 CPU 尝试更新在 L1 数据高速缓存中找到的数据块(也称为高速缓存行)时,就会发生写入命中。但是,更新的缓存块会根据您的系统使用的回写/直通方案(或存在的其他方案)在内存层次结构(即 L2、LLC)中更新。
- 快速说明:据我所知,缓存中的数据通常称为缓存块或缓存行,而不是缓存页。
如果一个程序开始写入 L1 缓存并找到足够的行来写入数据,它是否也会写入 LLC?
- 这在很大程度上取决于内存管理单元 (MMU) 和回写/直通方案。在多核多缓存系统中,如果一个数据块同时被多个核需要/处理/更新,则该块很可能在更新时立即在各级缓存中更新(直写)由任何核心。如果每个核心单独工作而没有数据共享或数据共享最少,如果一个块由一个核心更新,则只有当它从更新该块的核心的 L1 高速缓存中被逐出以保持一致性时,它才会在更高级别的高速缓存中更新(回写)。
我有疑问,因为在读取带入 L1 和 L2 缓存的值时也会带入 LLC。
- 如果您使用的是多核系统,则该进程很可能一次由多个核处理,因此任何核对数据进行的任何更改都需要更新整个内存层次结构中的块以避免连贯性问题。
推荐阅读
- swift - Macos Cocoa 应用程序中未显示自定义字体
- mongodb - 填充方法未填充我的评论数组
- multiprocessing - 使用 torch.multiprocessing 时 Pytorch 模型前进速度降低
- html - 表格上方出现未知空格(在 asp.net 数据列表中)
- javascript - 嵌套循环解决方案的时间复杂度如何比使用缓存的解决方案最差?
- django - Django React:API HTML 响应不呈现浏览器
- android - View Pager 2 /Recycler 视图因不一致而崩溃
- jquery - 摆脱移动视图上的水平滚动条
- javascript - State ValueChange 无法重新渲染组件
- swift - 范围限制的“无法推断通用参数 'T'”