我已经在一些算法上运行了一些基准测试并分析了它们的内存使用和效率(L1 / L2 / TLB访问和未命中),并且一些结果对我来说非常有趣。

考虑到包容性缓存层次结构(L1和L2缓存), L1缓存未命中数是否应该与L2缓存访问次数一致? 我发现的一个解释是TLB相关:当TLB中没有映射虚拟地址时,系统会自动跳过某些缓存级别的搜索。 这看起来合法吗?

===============>>#1 票数:9 已采纳

首先,包容性缓存层次结构可能并不像您假设的那么常见。 例如,我不认为任何当前的英特尔处理器 - 不是Nehalem,而不是Sandybridge,可能是Atoms--都有一个L1包含在L2中。 (然而,Nehalem和Sandybridge确实将L1和L2都包含在L3中;使用英特尔目前的术语,FLC和MLC在LLC中。)

但是,这不一定重要。 在大多数缓存层次结构中,如果您有L1缓存未命中,那么可能会在L2中查找该未命中。 无论是否具有包容性都无关紧要。 如果不这样做,你必须要有一些东西告诉你,你关心的数据(可能)不在L2中,你不需要看。 虽然我已经设计了这样做的协议和内存类型 - 例如只在L1而不是L2中缓存的内存类型,对于像图形这样的东西很有用,你可以在L1中获得组合的好处,但是你反复扫描的地方一个大型数组,所以L2中的缓存不是一个好主意。 有点我不知道有人正在运送它们。

无论如何,这里有一些原因可以解释为什么L1高速缓存未命中的数量可能不等于L2高速缓存访​​问的数量。

您没有说明您正在使用的系统 - 我知道我的答案适用于Nehalem和Sandybridge等Intel x86,其EMON性能事件监控允许您计算诸如L1和L2缓存未命中等事情。它可能会也适用于任何具有硬件性能计数器的现代微处理器,用于缓存未命中,例如ARM和Power上的缓存未命中。

大多数现代微处理器不会在第一次缓存未命中时停止,而是继续尝试做额外的工作。 这通常被称为推测性执行。 此外,处理器可能是有序的或无序的,但是虽然后者可能会给你更多的L1未命中数和L2访问次数之间的差异,但是没有必要 - 你甚至可以在以下情况下获得这种行为 - 订单处理器。

简短回答:这些推测性内存访问中的许多将访问相同的内存位置。 他们将被压扁并合并。

性能事件“L1缓存未命中”可能[*]计算错过L1缓存的(推测)指令的数量。 然后分配一个硬件数据结构,在英特尔称为填充缓冲区,在其他地方分配一个未命中状态处理寄存器。 对同一高速缓存行的后续高速缓存未命中将丢失L1高速缓存但是命中填充缓冲区,并且将被压扁。 只有其中一个,通常是第一个将被发送到L2,并计为L2访问。)

顺便说一下,可能会有一个性能事件:Squashed_Cache_Misses。

可能还有性能事件L1_Cache_Misses_Retired。 但这可能会有所不足,因为推测可能会将数据拉入缓存,并且退休时的缓存未命中可能永远不会发生。

([*]顺便说一下,当我在这里说“可能”时,我的意思是“在我帮助设计的机器上。”几乎肯定。我可能要检查定义,看一下RTL,但如果我看到,我会非常惊讶没有。几乎可以保证。)

例如,假设您正在访问字节A [0],A [1],A [2],... A [63],A [64],...

如果A [0]的地址等于零模64,那么A [0] .. A [63]将在具有64字节高速缓存行的机器上的同一高速缓存行中。 如果使用这些代码的代码很简单,很可能所有这些都可以推测性地发布。 QED:64个推测性内存访问,64个L1缓存未命中,但只有一个L2内存访问。

(顺便说一句,不要指望数字非常干净。每次L2访问可能无法获得64次L1访问。)

更多可能性:

如果L2访问次数大于L1缓存未命中数(我几乎从未见过它,但有可能),则可能存在令硬件预取混淆的内存访问模式。 硬件预取程序尝试预测您将需要哪些缓存行。 如果预取程序预测错误,它可能会获取您实际不需要的缓存行。 通常,有一个表现不计算Prefetches_from_L2或Prefetches_from_Memory。

某些机器可能会在将它们发送到L2之前取消导致L1缓存未命中的推测访问。 但是,我不知道英特尔会这样做。

===============>>#2 票数:1

数据高速缓存的写入策略确定存储命中是仅将其数据写入该高速缓存(回写或回写)还是高速缓存层次结构的后续级别(直写)。 因此,在直写L1-D高速缓存中命中的存储也将其数据写入L2高速缓存。

这可能是L2访问的另一个来源,它不是来自L1缓存未命中。

  ask by nuno translate from so

未解决问题?本站智能推荐:

1回复

VIPT缓存:TLB和缓存之间的连接?

我只是想澄清一下这个概念,并且可以找到足够详细的答案,可以对硬件中的实际工作方式有所了解。 请提供任何相关详细信息。 对于VIPT高速缓存,内存请求将同时发送到TLB和高速缓存。 从TLB,我们获得了翻译后的物理地址。 从缓存索引中,我们可以获得标签列表(例如,从属于一个集合的所有缓存行中)。
1回复

L1,L2和L3高速缓存的高速缓存命中和高速缓存未命中数

以下代码将在具有以下缓存结构的CPU上运行: L1快取:1KB L2快取:8KB 三级缓存:64KB 块大小:16B 我正在为期中考试而学习,这是一个问题。 修改此代码以最大程度地减少罚款。 根据L1,L2和L3高速缓存计算高速缓存命中和高速缓存未命
1回复

转换后备缓冲区(TLB)与L1缓存到CPU的级别是否相同? 那么,我可以将虚拟地址转换与L1缓存访问重叠吗?

我试图了解有关缓存的整个结构和概念。 由于我们使用TLB将虚拟地址快速映射到物理地址,如果我们使用虚拟索引,物理标记的L1缓存,是否可以将虚拟地址转换与L1缓存访问重叠?
1回复

TLB条目的更新是否利用了数据缓存?

在ARM CPU体系结构中,我们知道,如果TLB高速缓存未命中,CPU将查找页表以计算所需虚拟地址的物理地址。 我的问题是,如果将页表缓存在数据缓存区中,那么在计算物理地址时,CPU是否使用缓存中的页表或DRAM中的页表?
1回复

Cortex A53 L1 L2缓存信息

查看Cortex A53 ,我试图弄清楚究竟是什么: 带奇偶校验的8-64k I缓存 8-64k是什么意思? 它是大小为64 KB的8路设置关联缓存吗? 或只是说大小在8〜64kByte范围内 什么是“带平价”? 带ECC的8-64k D
2回复

L2页面何时复制到L1页面?

我不确定我是否正确理解L1和L2缓存的概念。 当我们使用read命令时,逻辑背后: 首先检查数据是否存储在L1缓存中(速度更快),否则,将检查L2缓存。 因此,如果数据存储在L2缓存中,操作系统是否会立即将此页面复制到L1缓存中? 现在,如果我们要w
1回复

英特尔处理器可以延迟TLB失效吗?

参考InteI的软件开发人员手册(订单号:325384-039US,2011年5月)的第4.10.4.4节“延迟的无效”描述了TLB条目无效的潜在延迟,这可能会导致在访问其分页结构条目的内存时导致不可预测的结果已经变了。 该手册说:“ 在某些情况下,所需的失效可能会延迟。软件开发人员应了解
1回复

如何学习TLB的关联性(方式数)?

我的任务是学习TLB缓存中的方法数量。 我应该使用哪种算法?
2回复

什么是LUT和类似的L1 / L2缓存行为?

假设一个LUT说512KB的64位双类型。 一般来说,CPU如何缓存L1或L2中的结构? 例如:我访问中间元素,是否尝试缓存整个LUT或只是其中的一部分 - 比如说中间元素然后是n个后续元素? CPU使用什么样的算法来确定它在L2缓存中保留的内容? 它是否遵循一定的前瞻策略
1回复

为什么LRU实现在完全关联的TLB中是昂贵的?

我有一本书的声明: 在完全关联TLB中实现LRU非常昂贵,因此一般的方法是使用随机替换。 我不明白为什么在完全关联缓存下它很昂贵。 这不仅仅是添加额外的参考位......?