Caching 了解缓存和块大小

Caching 了解缓存和块大小,caching,memory,block,Caching,Memory,Block,一个简短的问题,以确保我理解“块”背后的概念及其在缓存中的用法 如果我有一个小的缓存,每个缓存包含4个字的4个块。假设它也直接映射。如果我尝试访问内存地址2处的一个字,那么包含字0-3的块会被带到缓存的第一个块位置,还是会带进字2-5 我想我的问题是“块”在内存中是如何存在的。当访问一个值并触发缓存未命中时,CPU是从内存中访问的值开始加载一个块的数据(4个字),还是计算内存中该字所在的块并将该块取而代之 如果这个问题很难理解,我可以提供我试图解释的图表。通常缓存被组织成“缓存线”(或者,如您所

一个简短的问题,以确保我理解“块”背后的概念及其在缓存中的用法

如果我有一个小的缓存,每个缓存包含4个字的4个块。假设它也直接映射。如果我尝试访问内存地址2处的一个字,那么包含字0-3的块会被带到缓存的第一个块位置,还是会带进字2-5

我想我的问题是“块”在内存中是如何存在的。当访问一个值并触发缓存未命中时,CPU是从内存中访问的值开始加载一个块的数据(4个字),还是计算内存中该字所在的块并将该块取而代之


如果这个问题很难理解,我可以提供我试图解释的图表。

通常缓存被组织成“缓存线”(或者,如您所说的块)。缓存的内容需要关联寻址,也就是说,通过使用请求地址的某些部分来访问(如果愿意的话,可以使用“查找表键”)。如果缓存使用1个字的块大小,则整个地址(其中的所有N位)将是“键”。每个单词都可以按照刚才描述的粒度访问

然而,这种关联密钥匹配过程是非常硬件密集型的,并且是设计复杂性(使用的门)和速度(如果您想使用更少的门,则在权衡中会受到速度的影响)的瓶颈。当然,在某些情况下,您不能通过牺牲速度(访问所需元素的延迟)来最小化门的使用,因为缓存的全部目的是为了快速

因此,折衷的方式有点不同。缓存被组织成块(缓存“行”或“行”)。每个块通常从与缓存线大小相对应的2^N对齐边界开始。例如,对于128字节的缓存线,缓存线密钥地址的底部七位中始终有0(2^7=128)。这有效地消除了我们前面提到的地址匹配复杂性中的7位。另一方面,每当由于“缓存未命中”而“需要”缓存线的任何部分时,缓存就会将整个缓存线读取到缓存内存中——地址“键”在关联内存中找不到

现在,看起来,如果你需要128字节缓存线中的126字节,你会在相当长的一段时间里摆弄你的拇指,等待缓存块被读入。为了适应这种情况,缓存填充可以从“关键缓存地址”(处理器完成当前提取周期所需的字)开始。这使得CPU能够非常快速地运行,而高速缓存控制单元则继续前进——通常是通过以模N方式逐字(其中N是高速缓存线大小)将数据读取到高速缓存内存中

旧的MPC5200 PowerPC数据手册很好地描述了这种关键字缓存填充顺序。我相信它也在其他地方使用

嗯。。。乔古斯托