当前位置: 首页 > 知识库问答 >
问题:

L1和L2缓存的行大小

容鸿畴
2023-03-14

从本论坛上的前一个问题中,我了解到,在大多数内存系统中,一级缓存是二级缓存的子集,这意味着从二级缓存中删除的任何条目也将从一级缓存中删除。

所以现在我的问题是如何为L2缓存中的条目确定L1缓存中的相应条目。存储在L2条目中的唯一信息是标签信息。基于此标记信息,如果我重新创建addr,如果L1和L2缓存的行大小不相同,它可能会跨L1缓存中的多行。

体系结构是否真的为刷新这两条缓存线而烦恼,还是只维护具有相同缓存线大小的一级缓存和二级缓存。

我知道这是一个政策决定,但我想知道常用的技术。

共有3个答案

闾丘卓
2023-03-14

在严格包含的缓存层次结构中处理缓存块大小的最常用技术是对强制包含属性的所有缓存级别使用相同大小的缓存块。这会导致比更高级别缓存使用更大的块时更大的标记开销,这不仅使用芯片面积,而且还会增加延迟,因为更高级别缓存通常使用分阶段访问(在访问数据部分之前检查标记)。但是,它也在一定程度上简化了设计,减少了数据未使用部分造成的容量浪费。它不需要128字节缓存块中大量未使用的64字节块来补偿额外32位标记的面积损失。此外,通过相对简单的预取,可以提供利用更广泛空间局部性的更大缓存块效应,它的优点是,如果不加载附近的块(以节省内存带宽或减少冲突内存读取的延迟),则不会留下未使用的容量,并且邻接预取不需要局限于更大的对齐块。

一种不太常见的技术将缓存块划分为扇区。使扇区大小与较低级别缓存的块大小相同,可以避免过多的反向失效问题,因为较高级别缓存中的每个扇区都有自己的有效位。(为每个扇区提供所有一致性状态元数据,而不仅仅是有效性,可以避免在块中至少有一个扇区未被脏/修改以及一些一致性开销时过度使用写回带宽。)[例如,如果一个扇区处于共享状态,而另一个扇区处于独占状态,则如果使用snoopy而不是目录html" target="_blank">一致性,则对独占状态的扇区的写入可能不涉及一致性通信]。)

当标签在处理器芯片上,但数据在芯片外时,分区缓存块的面积节省尤为显著。显然,如果数据存储占用的面积与处理器芯片的大小相当(这并非不合理),那么具有64字节块的32位标记将占用处理器面积的16%(约6%),而128字节块将占用处理器面积的一半。(2009年推出的IBM POWER6可能是使用处理器芯片内标签和处理器外数据的最新处理器。像IBM那样,将数据存储在高密度嵌入式DRAM中,将标签存储在低密度SRAM中,夸大了这种效果。)

需要注意的是,Intel使用“缓存线”表示较小的单元,使用“缓存扇区”表示较大的单元。(这就是我在解释中使用“缓存块”的原因之一。)使用Intel的术语,缓存线在不同级别的缓存中大小不同是非常罕见的,无论这些级别是严格包含、严格独占还是使用其他包含策略。

(严格排除通常使用较高级别的缓存作为牺牲品缓存,其中从较低级别缓存的逐出插入到较高级别缓存中。显然,如果块大小不同且未使用分区,则逐出将要求从某个位置读取较大块的其余部分,如果在t中存在,则逐出将无效。)他创建了较低级别的缓存。[理论上,严格排除可用于不灵活的缓存绕过,其中一级逐出将绕过二级缓存并转到三级缓存,一级/二级缓存未命中将仅分配给一级缓存或二级缓存,在某些访问中绕过一级缓存。据我所知,最接近实现这一点的是安腾对浮点访问绕过一级缓存;如何实现如果我没记错的话,L2包括L1。])

刘琨
2023-03-14

缓存线大小(通常)为64字节。

此外,请看这篇关于处理器缓存的非常有趣的文章:处理器缓存效果库

你会发现以下章节:

  1. 内存访问和性能
  2. 缓存线的影响
  3. 一级和二级缓存大小
  4. 指令级并行性
  5. 缓存关联性
  6. 错误缓存线共享
  7. 硬件复杂性
解晟睿
2023-03-14

在core i7中,L1、L2和L3中的行大小相同:即64字节。我想这简化了保持包容性和一致性。

参见第10页:https://www.aristeia.com/TalkNotes/ACCU2011_CPUCaches.pdf

 类似资料:
  • 本文向大家介绍L1和L2正则相关面试题,主要包含被问及L1和L2正则时的应答技巧和注意事项,需要的朋友参考一下 参考回答: L范数(L1 norm)是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。比如 向量A=[1,-1,3],那么A的L1范数为 |1|+|-1|+|3|.简单总结一下就是: L1范数: 为x向量各个元素绝对值之和。 L2范数

  • 本文向大家介绍L1、L2正则化相关面试题,主要包含被问及L1、L2正则化时的应答技巧和注意事项,需要的朋友参考一下 https://blog.csdn.net/jinping_shi/article/details/52433975 L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L

  • 本文向大家介绍L1和L2正则化的区别相关面试题,主要包含被问及L1和L2正则化的区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: L1是模型各个参数的绝对值之和,L2为各个参数平方和的开方值。L1更趋向于产生少量的特征,其它特征为0,最优的参数值很大概率出现在坐标轴上,从而导致产生稀疏的权重矩阵,而L2会选择更多的矩阵,但是这些矩阵趋向于0。

  • 本文向大家介绍pytorch 实现L2和L1正则化regularization的操作,包括了pytorch 实现L2和L1正则化regularization的操作的使用技巧和注意事项,需要的朋友参考一下 1.torch.optim优化器实现L2正则化 torch.optim集成了很多优化器,如SGD,Adadelta,Adam,Adagrad,RMSprop等,这些优化器自带的一个参数weight

  • 我正在研究多核机器上paralle算法的性能。我用循环重新排序(ikj)技术做了一个关于矩阵乘法的实验。 串行执行结果如下图所示。对于所有大小的 nXn 矩阵,循环顺序 ikj 和 kij 的 L1 数据缓存命中率接近 100%(图 1 框编号 1 你认为L2统一缓存对加剧问题有什么影响吗?但是仍然是什么导致了这种减少,我应该分析算法和性能的什么特征来寻找原因。 实验机器是英特尔e4500,具有2

  • 问题内容: 为了防止错误共享,我想将数组的每个元素与高速缓存行对齐。因此,首先我需要知道高速缓存行的大小,因此我为每个元素分配了字节数。其次,我希望数组的开头与缓存行对齐。 我正在使用Linux和8核x86平台。首先,我如何找到缓存行大小。其次,如何在C中对齐缓存行。我正在使用gcc编译器。 因此,假设缓存行大小为64,结构将如下所示。 依此类推,假设0-63与高速缓存行对齐。 问题答案: 要知道