一个快速的问题,以确保我理解“块”背后的概念及其与缓存的使用。
如果我有一个小缓存,每个缓存包含4个4个字的块。让我们说它也直接映射。如果我尝试访问存储器地址2处的字,那么包含字0-3的块是否会被带入高速缓存的第一个块位置,还是会引入字2-5?
我想我的问题是内存中是否存在“块”。当访问一个值并触发缓存未命中时,CPU是否从内存中访问的值开始加载一个块的数据(4个字),或者它是否计算内存中该字所在的块并改为使用该块。
如果这个问题很难理解,我可以提供我想解释的图表。
答案 0 :(得分:1)
通常将缓存组织为“缓存行”(或者,如您所说,块)。需要关联地寻址缓存的内容,即,通过使用所请求的地址的一些部分来访问(即,如果你愿意的话,“查找表密钥”)。如果高速缓存使用1字的块大小,则整个地址 - 它的所有N位 - 将是“密钥”。每个单词都可以使用刚刚描述的粒度进行访问。
然而,这种关联密钥匹配过程是非常硬件密集的,并且是设计复杂性(使用的门)和速度的瓶颈(如果你想使用更少的门,你需要在权衡中获得速度)。当然,在某些时候,你不能通过权衡速度来减少门的使用(延迟访问所需的元素),因为缓存的整个目的是快速的!
因此,权衡方式略有不同。缓存被组织成块(缓存“行”或“行”)。每个块通常从对应于高速缓存行大小的某个2 ^ N对齐边界开始。例如,对于128字节的高速缓存行,高速缓存行密钥地址在最后7位(2 ^ 7 = 128)中总是具有0。这有效地消除了我们刚才提到的地址匹配复杂度中的7位。另一方面,每当由于“高速缓存未命中”而“需要”该高速缓存行的任何部分时,高速缓存将读取整个高速缓存行到高速缓存存储器中 - 在关联存储器中找不到地址“密钥”。
现在看起来,如果你需要在一个128字节的缓存行中使用字节126,那么你需要花费很长一段时间,等待读取缓存块。为了适应这种情况,缓存填充可以从“关键缓存地址”开始 - 处理器需要完成当前提取周期的字。这使得CPU可以非常快速地以快进方式运行,同时高速缓存控制单元继续前进 - 通常通过以模N方式(其中N是高速缓存行大小)逐字读取数据到缓存存储器中。 p>
旧的MPC5200 PowerPC数据手册对这种关键字缓存填充顺序进行了很好的描述。我确信它也在其他地方使用过。
HTH ...... JoGusto。