arm - cortex-A53中L1和L2缓存的写入策略是什么?
问题描述
Cortex-A53 处理器具有一到四个内核,每个内核都有一个 L1 内存系统和一个共享的 L2 缓存。
解决方案
- L1i:只读所以没有写策略。
- L1d:回写,写分配(通常)
- (可选)L2:回写(我假设),L1d 的受害者缓存,或读取指令获取的正常分配。
正如预期的那样,ARM 使用带有 write-allocate 的回写缓存。这是几乎所有东西的标准设计,因为它适用于大多数 CPU 用例。
我没有为 L2 找到明确的确认,只有 L1d,但如果最后一级缓存是直写的,那就太奇怪了。存在具有直写内部缓存的设计(例如,具有小型写入组合缓冲区的 AMD Bulldozer 系列)。但是拥有直写 L2 没有什么意义。
一个快速的谷歌cortex-a53 cache policy
发现这是最热门的
ARM Cortex-A53 MPCore 处理器技术参考手册
主页 > 1 级内存系统 > 缓存行为 >数据缓存一致性
L1d 使用 MOESI 实现缓存一致性,允许在 L1d 缓存之间直接传输“脏”行。
读分配模式
L1 数据缓存仅支持回写策略。 它通常在读取未命中或写入未命中时分配高速缓存行,尽管您可以通过更改页表中的内部高速缓存分配提示来更改此设置。
但是,在某些情况下不需要在写入时进行分配,例如执行 C 标准库 memset() 函数以将大块内存清除为已知值。
所以显然它支持整个缓存行的不分配写入,基本上是一个缓存绕过memset,可能类似于x86上的NT存储。(除了 ARM 总是弱排序,而 x86 需要特殊指令来使存储弱排序以及缓存绕过。)
二级缓存:
二级内存系统 >可选的集成二级缓存
可选的集成 L2 可配置缓存大小为 128KB、256KB、512KB、1MB 和 2MB。
数据仅在从 L1 内存系统中逐出时才分配给 L2 缓存,而不是在首次从系统中获取时分配给 L2 缓存。此规则的唯一例外是标记有内部瞬态提示的内存,或者对于非临时加载,请参阅非临时加载,它们只分配给 L2 缓存。L1 缓存可以从系统中预取数据,而不会从 L2 缓存中逐出数据。
指令在从系统中获取时分配到 L2 高速缓存,并且可以在维护操作期间失效。
L2 高速缓存是 16 路组关联的。L2 缓存标签与 SCU 重复标签并行查找。如果 L2 标记和 SCU 重复标记都命中,则读取会优先访问 L2 缓存,而不是窥探其他内核之一。
推荐阅读
- javascript - Angular 11 自定义指令使插入符号跳转到输入字段中的文本末尾
- java - 我可以从外部 JAR 文件中的另一个包重新加载 Java 类吗?
- excel - Excel 在运行宏以过滤并将粘贴行复制到新工作表时关闭
- javascript - VueJS - setInterval 函数的显示倒计时
- android - ANDROID MVP 交互器与 MVVM 存储库
- android - 检查日期是否是次日上午 00:00 之后
- python - AttributeError:模块“正则表达式”没有属性“编译”
- marklogic - what are facets in MarkLogic
- amazon-web-services - 我们可以在不使用凭证文件的情况下将 GCP(谷歌云平台)服务帐户凭证作为键值对传递吗?
- javascript - 如何从单页和水平滚动应用程序创建整页捕获屏幕?