Caching Nehalem二级缓存中的银行数量
我正在研究不同缓存配置的访问时间,突然在cacti接口中偶然发现了一个术语“银行数量” “组数”是缓存中交错模块的数量,它增加了缓存的带宽和并行访问的数量 在这种情况下,我想找到Nehalem体系结构缓存中的银行数量。我在谷歌上搜索这个东西,但没有找到任何有用的东西 我的理由是:Caching Nehalem二级缓存中的银行数量,caching,memory-management,cpu-cache,nehalem,Caching,Memory Management,Cpu Cache,Nehalem,我正在研究不同缓存配置的访问时间,突然在cacti接口中偶然发现了一个术语“银行数量” “组数”是缓存中交错模块的数量,它增加了缓存的带宽和并行访问的数量 在这种情况下,我想找到Nehalem体系结构缓存中的银行数量。我在谷歌上搜索这个东西,但没有找到任何有用的东西 我的理由是: 一级数据和指令缓存必须具有单个存储组。访问粒度在这里是一个词 二级缓存支持一级数据和指令缓存的未命中。因此,它必须支持2家银行 L3缓存通常跨系统中的所有核心共享,因此它必须有大量(32)个存储组 我的直觉正确吗??此
我不明白你说的“银行”是什么意思。Nehalem的缓存是8路关联的,每个缓存线64位(8字节) 这意味着对缓存的每次读/写访问都会传输8个字节的数据,这与64位体系结构很好地对应,其中所有虚拟地址都有8个字节。因此,每次必须从内存中检索或存储地址时,都必须传输8个字节,因此自然适合以这种方式在缓存中设计单个条目。(其他缓存大小也有意义,具体取决于应用程序:例如向量处理单元的数据缓存的较大大小) 确定内存地址与该地址中的信息可存储在缓存中的位置之间的关系。术语“8路关联性”是指存储在特定内存地址的数据可以保存在8条不同的缓存线中。缓存有一个地址比较机制来选择一条路径内的匹配条目,还有一些用来决定使用哪条x路径,可能会排除以前的有效值 您使用的术语“bank”可能指的是这种8向关联性的一个“集合”。因此,你的问题的答案可能是“8”。同样,每个核心有一个二级缓存,每个都有这样的结构 您关于同时访问的假设也是有效的。它是 然而,是否以及如何独立访问这些缓存集或缓存组是任何人的猜测。Wikipedia图显示了一级数据缓存和二级缓存之间的256位总线。这可能意味着可以独立地访问4种方式(4*64=256),但更可能的是,在任何给定的时间,实际上只传输一个内存加载/存储,较慢的二级缓存只同时向较快的一级缓存提供4条缓存线,这可以称为突发 这一假设得到以下事实的支持:在第2.2.6章中,可以在上找到的列出了后来的Sandy Bridge改进,强调“两个负载的内部带宽和每个周期一个存储”。因此,Sandy Bridge之前的CPU应具有较少数量的并发负载/存储 请注意,“飞行中”加载/存储和传输的实际数据存在差异。“飞行中”是指当前正在执行的操作。如果加载可能需要在所有缓存报告未命中后等待内存生成数据。因此,您可以并行执行多个加载,但您仍然可以在任何给定时间仅使用一次任意两个缓存之间的数据总线。上述SandyBridge改进实际上是将数据总线扩展到两个负载和一个存储区,同时实际传输数据,这是Nehalem(一个“tock”,或Sandy Bridge之前的一个架构)无法做到的 你的直觉在某些方面是不正确的:
- Nehalem的二级缓存是8路关联的
- 它支持少于2个同时加载和1个存储操作,可能是