X86 intel core i7处理器使用哪种缓存映射技术?

X86 intel core i7处理器使用哪种缓存映射技术?,x86,intel,cpu-architecture,cpu-cache,amd-processor,X86,Intel,Cpu Architecture,Cpu Cache,Amd Processor,我学习了不同的缓存映射技术,如直接映射和完全关联或集合关联映射,以及它们之间的权衡。() 但我很好奇,现在Intel core i7或AMD处理器中使用的是哪一款 这些技术是如何演变的?还有哪些方面需要改进呢?直接映射缓存基本上从未在现代高性能CPU中使用过。相同大小的一组关联缓存在命中率方面的巨大优势超过了功耗节约,而控制逻辑只稍微复杂一点。现在晶体管的预算非常大 对于软件来说,通常至少有两个阵列彼此相距4k的倍数,这会在直接映射缓存中造成冲突未命中。(如果一个循环需要一次遍历所有数组,那么使

我学习了不同的缓存映射技术,如直接映射和完全关联或集合关联映射,以及它们之间的权衡。()

但我很好奇,现在Intel core i7或AMD处理器中使用的是哪一款


这些技术是如何演变的?还有哪些方面需要改进呢?

直接映射缓存基本上从未在现代高性能CPU中使用过。相同大小的一组关联缓存在命中率方面的巨大优势超过了功耗节约,而控制逻辑只稍微复杂一点。现在晶体管的预算非常大

对于软件来说,通常至少有两个阵列彼此相距4k的倍数,这会在直接映射缓存中造成冲突未命中。(如果一个循环需要一次遍历所有数组,那么使用多个数组调整代码可能会涉及倾斜它们以减少冲突未命中)

现代CPU速度如此之快,以至于DRAM延迟超过200个核心时钟周期,这对于功能强大的无序执行CPU来说都太大了,无法很好地隐藏缓存丢失


多级缓存是必不可少的(用于所有高性能CPU),可为最热的数据提供低延迟(~4个周期)/高吞吐量(例如,L1D缓存和向量加载/存储执行单元之间有128、256甚至512位路径),同时仍然足够大以缓存合理大小的工作集。在物理上不可能构建一个非常大/非常快/高度关联的缓存,它的性能与典型工作负载的当前多级缓存一样好;当数据必须实际传播很远时,光速延迟是一个问题。电力成本也将令人望而却步。(事实上,功率/功率密度是现代CPU的主要限制因素,请参阅。)

在我所知道的所有x86 CPU中,所有级别的缓存(uop缓存除外)都进行了物理索引/物理标记。大多数设计中的L1D缓存从页面偏移量下方获取索引位,因此也是VIPT,允许TLB查找与标记获取并行进行,但没有任何别名问题。因此,缓存不需要在上下文开关或任何东西上刷新。(请参阅概述和VIPT速度技巧,以及一些实际x86 CPU的一些缓存参数。)


专用(每核)L1D/L1I和L2缓存是传统的集合关联缓存,对于小型/快速缓存,通常为8路或4路。在所有现代x86 CPU上,缓存线大小为64字节。数据缓存被写回。(AMD推土机系列除外,其中L1D通过一个小的4KB写入组合缓冲区进行写入。)

对于各种微体系结构(包括许多x86),具有良好的缓存组织/延迟数、带宽和TLB组织/性能数

英特尔Sandybridge系列中的“L0”解码uop缓存被设置为关联并实际寻址。多达6个UOP的多达3个块可以缓存32字节机器代码块中指令的解码结果。相关:。(uop缓存是x86的一大进步:x86指令长度可变,难以快速/并行解码,因此缓存内部解码结果以及机器码(L1I$)具有显著的功耗和吞吐量优势。仍然需要强大的解码器,因为uop缓存并不大;它在循环中最有效(包括中到大的循环)。这避免了Pentium4错误(或基于当时晶体管大小的限制),即使用弱解码器和依赖跟踪缓存


现代Intel(我猜还有AMD)L3 aka LLC aka末级缓存使用的索引函数不仅仅是一系列地址位。它是一个哈希函数,可以更好地分配内容,以减少固定步长的冲突


从Nehalem开始,Intel使用了一个大型包容性共享三级缓存,它过滤核心之间的一致性通信量
。也就是说,当一个核心读取另一个核心的L1d中处于修改状态的数据时,三级标签会显示哪个核心,因此会显示RFO(读取所有权)只能发送到该核心,而不是广播。。inclusivity属性很重要,因为它意味着在L3不知道的情况下,私有二级缓存或一级缓存都不能有缓存线的副本。如果它在私有缓存中处于独占或修改状态,L3将具有该缓存线的无效数据,但标记仍会指出哪个核心可能具有该缓存线我有一个副本。绝对没有副本的内核不需要发送有关副本的消息,从而通过内核和L3之间的内部链接节省了电源和带宽。有关英特尔“i7”(即Nehalem和Sandybridge系列,它们是不同的体系结构,但使用相同的缓存层次结构)中的片上缓存一致性的更多详细信息,请参阅

Core2Duo有一个共享的最后一级缓存(L2),但在二级未命中时生成RFO(读取所有权)请求的速度很慢。因此,使用适合L1d的小缓冲区的内核之间的带宽与使用不适合L2的大缓冲区时的带宽一样慢(即DRAM速度)。当缓冲区适合L2而不是L1d时,有一个快速的大小范围,因为写入内核将自己的数据逐出到L2,而另一个内核的负载可以命中,而无需生成RFO请求。(请参阅Ulrich Drepper的“每个程序员都应该知道的内存”)


Skylake-AVX512具有更大的每核L2(1MiB而不是256k),以及更小的每核L3(LLC)片。它不再包含在内。它使用网状网络而不是环形总线将核心相互连接。请参阅(但在其他页面的微体系结构详细信息中有一些不准确之处,)

由于LLC的非包容性
,LLC中缺少缓存线不会导致