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

有多少数据加载到二级和三级缓存中?

丁震博
2023-03-14

如果我有这门课:

class MyClass{
    short a;
    short b;
    short c;
};

我用这段代码对上面的内容进行计算:

std::vector<MyClass> vec;
//
for(auto x : vec){
    sum = vec.a * (3 + vec.b) / vec.c;
}

我知道CPU只从一级缓存加载它所需的数据,但当一级缓存从二级缓存检索数据时,它会加载整个“缓存线”(可能包含一些它不需要的字节数据)。

二级缓存从三级缓存加载多少数据,三级缓存从主存加载多少数据?它是根据页面定义的吗?如果是,根据不同的二级/三级缓存大小,这个答案会有什么不同?

共有2个答案

齐栋
2023-03-14

这在某种程度上取决于平台的ISA和微体系结构。最近基于x86-64的微体系结构在所有级别的缓存层次结构中使用64字节行。

通常有符号的短路需要两个字节,每个字节意味着MyClass除了类开销之外还需要6个字节。如果你的C实现存储了向量

明智的做法是,由于您以一种非常可预测的模式访问元素,因此硬件预取器应该启动并获取它预期在未来使用的合理数量的数据。这可能会为缓存层次结构的各个级别带来超出您需要的内容。它会因芯片而异。

方和顺
2023-03-14

二级和三级缓存还具有比虚拟内存系统页小的缓存线。二级和三级缓存线的大小大于或等于一级缓存线的大小,通常是一级缓存线大小的两倍。

对于最新的x86处理器,所有缓存都使用相同的64字节缓存线大小。(早期的奔腾4处理器有64字节的一级缓存线和128字节的二级缓存线。)

IBM的POWER7在L1、L2和L3中使用128字节缓存块。(然而,POWER4在L1和L2中使用128字节块,而在片外L3中使用512字节块。扇区块为子块提供有效位。对于L2和L3缓存,扇区允许在整个系统中使用单个一致性大小。)

在最后一级缓存中使用更大的缓存线大小可以减少标记开销,并有助于处理器和主内存之间的长突发访问(更长的突发可以提供更多带宽,并有助于更广泛的纠错和DRAM芯片冗余),同时允许其他级别的缓存和缓存一致性使用更小的块,从而减少带宽使用和容量浪费。(大型末级缓存块还提供预取效果,由于末级缓存的容量相对较高,其缓存污染问题不太严重。但是,硬件预取可以在缓存容量浪费较少的情况下实现相同的效果。)对于较小的缓存(例如,典型的一级缓存),逐出发生的频率更高,因此可以利用空间局部性的时间跨度更小(即,在逐出缓存线之前,更有可能只使用一个较小块中的数据)。更大的缓存线还减少了可用块的数量,在某种意义上降低了缓存的容量;这种容量减少对于小型缓存来说尤其成问题。

 类似资料:
  • 1、一级缓存:指的是mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入sqlSession中,再次查询的时候,先去sqlSession中查询,有的话直接拿出,当sqlSession消失时,mybatis的一级缓存也就消失了,当调用sqlSession的修改、添加、删除、commit()、close()等方法时,会清空一级缓存。 2、二级缓存:指的是mybati

  • 当你使用本地(在内存中)缓存时,服务器可以缓存一些信息并快速地检索它,但是其他服务器不能访问这个缓存数据,他们需要到数据库中查询同样的信息。 如果你喜欢使用分布式缓存让其他服务器访问缓存的数据,由于它有一些序列化/反序列化和网络延迟开销,则需要注意:在某些情况下,它可能会降低性能。 缓存需要处理的另一个问题:缓存失效。 There are only two hard things in Compu

  • 本文向大家介绍Android 三级缓存?相关面试题,主要包含被问及Android 三级缓存?时的应答技巧和注意事项,需要的朋友参考一下 网络加载,不优先加载,速度慢,浪费流量 本地缓存,次优先加载,速度快 内存缓存,优先加载,速度最快 首次加载Android App时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中,之后运行APP时,优先访问内存中的图片缓存,若内存中没有

  • 本文向大家介绍说一下 MyBatis 的一级缓存和二级缓存?相关面试题,主要包含被问及说一下 MyBatis 的一级缓存和二级缓存?时的应答技巧和注意事项,需要的朋友参考一下 一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,它的声明周期是和 SQLSession 一致的,有多个 SQLSession 或者分布式的环境中数据库操作,可能会出现脏数据。当 Session f

  • 本文向大家介绍Hibernate中一级缓存和二级缓存之间的区别,包括了Hibernate中一级缓存和二级缓存之间的区别的使用技巧和注意事项,需要的朋友参考一下 Hibernate支持两种类型的缓存,一种是第一级缓存,另一种是第二级缓存。  一级缓存是会话级缓存,它始终与会话级对象关联。这种类型的缓存用于通过缓存对象的状态来最小化Db交互。 那不是在事务中完成每次修改之后更新,而是仅在事务结束时更新

  • 问题内容: 我想在hibernate项目中使用二级缓存,但是我只对hibernate二级缓存了解一点,任何人都可以解释我应该如何在代码中使用它以及需要什么配置和.jar文件吗?我将这些设置设置为我的hibernate.cfg.xml文件 并添加这些jar文件, 我想知道我是否需要更改其他配置? 我怎么知道我的项目使用二级缓存? 如果只是设置此设置,hibernate将自动使用此设置,否则我必须在我