gpt4 book ai didi

performance - L2 和 L3 缓存中加载了多少数据?

转载 作者:行者123 更新时间:2023-12-03 17:07:17 24 4
gpt4 key购买 nike

如果我有这个类:

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 只从 L1 缓存中加载它需要的数据,但是当 L1 缓存从 L2 缓存中检索数据时,它会加载整个“缓存行”(可能包括它不包含的几个字节的数据)不需要)。

L2 缓存从 L3 缓存加载多少数据,L3 缓存从主内存加载多少数据?它是根据页面定义的吗?如果是,这个答案根据不同的 L2/L3 缓存大小?

最佳答案

L2 和 L3 缓存也有比虚拟内存系统页面更小的缓存行。 L2 和 L3 缓存行的大小大于或等于 L1 缓存行的大小,通常是 L1 缓存行大小的两倍。

对于最新的 x86 处理器,所有缓存都使用相同的 64 字节缓存行大小。 (早期的 Pentium 4 处理器有 64 字节的 L1 缓存线和 128 字节的 L2 缓存线。)

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

在末级缓存中使用更大的缓存行大小可减少标记开销并促进处理器和主内存之间的长突发访问(更长的突发可以提供更多带宽并促进更广泛的纠错和 DRAM 芯片冗余),同时允许其他级别缓存和缓存一致性以使用更小的 block ,从而减少带宽使用和容量浪费。 (大的末级缓存 block 也提供预取效果,由于末级缓存的容量相对较高,缓存污染问题不那么严重。但是,硬件预取可以达到同样的效果,缓存容量的浪费较小。) (例如,典型的 L1 缓存),驱逐发生得更频繁,因此可以利用空间局部性的时间跨度更小(即,更有可能在缓存行被驱逐之前仅使用一个较小块中的数据)。较大的缓存行也会减少可用 block 的数量,从某种意义上说会降低缓存的容量;这种容量减少对于小型缓存来说尤其成问题。

关于performance - L2 和 L3 缓存中加载了多少数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com