是否总是在查找时触发L2行填充?

问题描述 投票:0回答:1

这是有据可查的事实,关于L1D,L2是non-unclusive,这意味着L2不必包含L1DCache具有的所有行。

是否也会错过L2的L1d缺失(读取,RFO)会填充L1d线而不填充相应的L2线?英特尔公司对此有何解释? 更新:有。英特尔第3卷,有关内存类型的部分。

或以另一种方式改写问题:缺少L2的查找是否总是导致其行被填充?

经过一番挖掘,我自己找到了答案。它是回写存储器类型的属性,而不是高速缓存级别]

Write-back(WB)-读写系统内存是已缓存。读取来自缓存命中中的缓存行;读错原因缓存填充。

assembly x86 x86-64 cpu-architecture cpu-cache
1个回答
1
投票

答案取决于外部缓存wrt的cache inclusion policy。 L1d。

在Intel上,NT预取可以绕过L2(例如,在包含L3的Intel CPU上仅填充L1d和L3的一种方式),但是正常需求负载是通过L2获取的,并且确实在L2中分配L1d。 (以及prefetchnta以外的所有预取)

以上适用于大多数CPU(NINE L2)。但是某些微架构具有唯一的L2 / L1d,因此没有,仅在开始时才在L1d中分配,并且线路移至L2。与英特尔相比,AMD在专有缓存方面进行了更多的试验。


AMD已使用exclusive和/或victim caches构建了一些CPU,例如Zen的每CCX L3是该4核(https://en.wikichip.org/wiki/amd/microarchitectures/zen#Memory_Hierarchyhttps://www.anandtech.com/show/11170/the-amd-zen-and-ryzen-7-review-a-deep-dive-on-1800x-1700x-and-1700/9)复合系统中L2缓存的牺牲品缓存。 Skylake-X / Cascade Lake的非包含L3也是L2的受害者缓存。

在那些CPU中,读取不在L3中分配,只有L2和L1d分配。 (或者L1i用于代码提取)。

[[巴塞罗那(又名K10)具有一个共享的L3和一个L1 / L2,彼此互斥(来源:David Kanter's excellent writeup)。因此,在K10上,肯定不会分配在L1d中分配的行在L2中。从L1d撤出以为新生产线腾出空间的生产线通常将移至L2,从L2撤出旧生产线。

K8具有与L1d相同的L2,但没有共享的L3。

也相关:Which cache mapping technique is used in intel core i7 processor?


这是回写内存类型的属性,而不是高速缓存级别...

读取未命中会导致高速缓存填充。

Intel的vol.3手册只是对未来的证明而已。这只是保证它将被缓存在缓存层次结构中的某个位置。

对于预期在同一行中进行其他读取的所有理智的设计将包含在L1d中(立即的空间局部性非常常见)。但是根据设计,它不必立即包含L2甚至L3。也就是说,这并不意味着所有级别。

x86不能保证在纸上具有多于一层的缓存。 (或者甚至有一个[is

高速缓存,但ISA文档中有关高速缓存作为RAM模式的部分以及类似的内容除外。)这些文档是在假设CPU至少具有2个级别的情况下编写的,因为因为P6(以及带有主板的P5提供了L2缓存),但是类似clflush的任何内容都应理解为“假设有缓存”。
© www.soinside.com 2019 - 2024. All rights reserved.