caching - 在“延迟值表”中:每一级缓存的延迟值是否包括上一级缓存的访问?
问题描述
对于这个问题,我将以这张表为例:
但是这个处理器的内存层次与这个问题无关!
我的问题是每个级别缓存的延迟值是否包括上一级缓存访问。我的意思是,如果我们假设我们只在 L1 未命中后访问 L2(并且仅在 L2 未命中后访问 L3),那么在我的示例中(对于 L1 未命中、L2 未命中和 L3 命中),所花费的 cicle 数将为〜21个周期还是〜(4 + 12 + 21)个周期?
而且,如果答案是延迟值包括上一级缓存访问,那么 RAM 访问延迟值是否也包含在内?
正如我所说,请忽略处理器的确切数字,请以一般方式回答这个问题。
我看过很多“延迟值表”,但由于这个疑问,我从来不知道如何正确解释它们。
解决方案
通常(包括这种情况)延迟被给出为在存储器层次结构的该级别停止的访问的总延迟(在内部级别丢失之后)。
这就是您可以实际测量的内容(例如,使用不适合 L1d、不适合 L2 或其他任何内容的链表),以及最容易考虑的内容。
请注意,L3 和内存延迟取决于来自其他内核的争用,以及请求必须遍历多大的环形总线或网格才能从该内核到达 L3 的切片。 为什么 Skylake 在单线程内存吞吐量方面比 Broadwell-E 好这么多?. 例如对于英特尔,四核“客户端”芯片比具有相同内核的大 Xeon 具有更好的 L3 和内存延迟(以及单核带宽)。
OTOH 为 L1d 和 L2 缓存提供相当硬的数字是有点合理的,因为它们是每个核心私有的。请注意,L1d 负载使用延迟并不总是 4 个周期;仅当您正在跟踪指针(取消引用您刚刚加载的指针)并且您使用的是简单的寻址模式时。 当 base+offset 位于与 base 不同的页面时,是否会受到惩罚?
推荐阅读
- java - 如何在使用 Collectors.groupby() 时迭代流中的对象
- jquery - 同一类中的 jQuery 复选框验证
- python - 使用 Oracle 数据库连接的 Python 应用程序的 PyInstaller 打包问题
- c# - 如何使用 System.Text.Json 将 double[,] 2d 数组序列化为 JSON?
- pine-script - Trading View Pine Script 如何计算入场总成本
- ios - 如何使用 Xcode 12 生成未签名的 IPA
- python - 如何总结列表中2个数字的减法?
- python - re.search() 和 re.match() 的结果相同,但比较运算符不同
- javascript - Electron/Node.js:从 REST 响应中提取文件并保存到本地磁盘
- shortcut - 如何在 Vimium 中将一个键重新映射到另一个键