2014-03-24 52 views
0

一个简单的问题,以确保我理解“块”及其与缓存的用法背后的概念。理解缓存和块大小

如果我有一个小缓存,每个缓存可容纳4个4字的块。我们假设它也是直接映射的。如果我尝试访问内存地址为2的单词,那么包含单词0-3的块是否会被带入缓存的第一个块位置,或者是否会引入单词2-5?

我想我的问题是如何“块”存在于内存中。当一个值被访问并且缓存未命中被触发时,CPU是否从内存中的访问值开始加载一个块的数据(4个字),或者计算内存中该单词的哪个块并代替该块。

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

回答

1

通常高速缓存被组织成“高速缓存行”(或者,就像你说的那样,块)。高速缓存的内容需要进行联想编址,即通过使用请求地址的某个部分(即,如果您愿意的话,“查找表键”)进行访问。如果缓存使用1个字的块大小,则整个地址(全部N位)将是“密钥”。每个单词都可以用刚刚描述的粒度访问。然而,这种关联密钥匹配过程非常硬件密集,并且是设计复杂性(门使用)和速度(如果你想使用更少的门,在折衷中获得速度打击)的瓶颈。当然,在某些情况下,您不能通过牺牲速度(延迟访问所需元素)来最大限度地降低门的使用量,因为缓存的整体目的是快速!

所以,折衷做的有点不同。缓存被组织成块(缓存“行”或“行”)。每个块通常在对应于高速缓存行大小的2^N对齐边界处开始。例如,对于128字节的高速缓存行,高速缓存行键值地址在最低七位(2^7 = 128)中将始终为0。这有效地消除了我们之前提到的地址匹配复杂度中的7个比特。另一方面,由于“高速缓存未命中”,只要该高速缓存行的任何部分“需要”,高速缓存就会将整个高速缓存行读入高速缓存存储器中 - 在关联存储器中找不到地址“密钥”。

现在看来,如果你需要128字节的缓存行中的字节126,那么你会在你的拇指中徘徊很长一段时间,等待该缓存块被读入。为了适应这种情况,缓存填充可以从“临界缓存地址”开始 - 即处理器完成当前获取周期所需的字。这使得CPU能够非常快速地继续其快乐的方式,而高速缓存控制单元继续前进 - 通常通过以模N方式(其中N是高速缓存行大小)逐字读取数据到高速缓存存储器中。

旧的MPC5200 PowerPC数据手册给出了这种关键词缓存填充排序的相当好的描述。我相信它在其他地方也有用。

HTH ... JoGusto。