完全关联缓存

Fully Associative Cache

本文关键字:缓存 关联      更新时间:2023-10-16

我试图找出一个问题,在那里我需要看看有多少缓存丢失发生以下嵌套循环

for i=0; i < 32 ; i++
   for j=0; j < 32; j++
      sum += arr[i][j];

我有一个完全关联的缓存,它有16个缓存行,每个缓存行可以存储32个单词。缓存最初是空的,arr[0][0]映射到第一条缓存行

现在根据我的理解,总共会有32次失误。最初,当请求发出时,缓存是空的,因此它被视为错过,根据完全关联缓存,所有块都被填充,然后应用LRU。

我在这里有点困惑,这里可以使用一些指导

假设一个整数存储在一个单词中

让我们从1st内存访问开始。arr[0][0]。它将导致一个缺失,这是强制缺失,这将把32个整数带进缓存。为了方便我们,我们将在以后的访问中访问这些确切的内存位置。arr[0][0]arr[0][31]

现在,当我们访问arr[1][0]时,我们访问的是第33个位置,它不在我们的缓存中。这又是一次失误。

一般来说,你每访问32个值就会有一个错误请注意,这只是针对你所展示的那种循环:

for i=0; i < 32 ; i++
   for j=0; j < 32; j++
      sum += arr[i][j];

这里的内存访问是连续的。此外,正如@Peter Cordes在评论中所说,在特定情况下,完全关联缓存将以与直接映射缓存完全相同的方式运行。